From cf1d82ac66b0c5c6e9989dc18c6ba06225c0868f Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Thu, 16 Dec 2021 14:10:11 +0100 Subject: [PATCH 001/120] Add .git-blame-ignore-revs and prettier instructions (#585) --- .git-blame-ignore-revs | 1 + README.md | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..b2c2a6a4 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1 @@ +193434461dbd9c48fe5dcbad95693470aec422ac diff --git a/README.md b/README.md index fed8186b..95529e3f 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,23 @@ Common code referenced across Bitwarden JavaScript projects. - _Microsoft Build Tools 2015_ in Visual Studio Installer - [Windows 10 SDK 17134](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/) either by downloading it seperately or through the Visual Studio Installer. + +## Prettier + +We recently migrated to using Prettier as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps: + +1. Check out your local Branch +2. Run `git merge 8b2dfc6cdcb8ff5b604364c2ea6d343473aee7cd` +3. Resolve any merge conflicts, commit. +4. Run `npm prettier` +5. Commit +6. Run `git merge -Xours 193434461dbd9c48fe5dcbad95693470aec422ac` +7. Push + +### Git diff + +We also recommend that you configure git to ignore the prettier revision using: + +```bash +git config blame.ignoreRevsFile .git-blame-ignore-revs +``` From 36b3aea758eec7bf3e85aaa81fff3d207bc671cb Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Thu, 16 Dec 2021 14:38:11 +0100 Subject: [PATCH 002/120] Update README.md (#586) * Update README.md * Replace header Git diff with Git blame --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 95529e3f..ce5cb1f1 100644 --- a/README.md +++ b/README.md @@ -24,12 +24,12 @@ We recently migrated to using Prettier as code formatter. All previous branches 1. Check out your local Branch 2. Run `git merge 8b2dfc6cdcb8ff5b604364c2ea6d343473aee7cd` 3. Resolve any merge conflicts, commit. -4. Run `npm prettier` +4. Run `npm run prettier` 5. Commit 6. Run `git merge -Xours 193434461dbd9c48fe5dcbad95693470aec422ac` 7. Push -### Git diff +### Git blame We also recommend that you configure git to ignore the prettier revision using: From e9666458c483d4b895e01b241d0207e6047fb00c Mon Sep 17 00:00:00 2001 From: Linus Aarnio <42450444+linusaarnio@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:41:37 +0100 Subject: [PATCH 003/120] Select an image to display for credit cards based on the brand. (#537) Co-authored-by: Hinton --- angular/src/components/icon.component.ts | 23 +++++++++ angular/src/images/cards/amex-dark.png | Bin 0 -> 773 bytes angular/src/images/cards/amex-light.png | Bin 0 -> 773 bytes angular/src/images/cards/diners_club-dark.png | Bin 0 -> 783 bytes .../src/images/cards/diners_club-light.png | Bin 0 -> 713 bytes angular/src/images/cards/discover-dark.png | Bin 0 -> 808 bytes angular/src/images/cards/discover-light.png | Bin 0 -> 830 bytes angular/src/images/cards/jcb-dark.png | Bin 0 -> 836 bytes angular/src/images/cards/jcb-light.png | Bin 0 -> 798 bytes angular/src/images/cards/maestro-dark.png | Bin 0 -> 752 bytes angular/src/images/cards/maestro-light.png | Bin 0 -> 820 bytes angular/src/images/cards/mastercard-dark.png | Bin 0 -> 737 bytes angular/src/images/cards/mastercard-light.png | Bin 0 -> 757 bytes angular/src/images/cards/union_pay-dark.png | Bin 0 -> 1255 bytes angular/src/images/cards/union_pay-light.png | Bin 0 -> 1245 bytes angular/src/images/cards/visa-dark.png | Bin 0 -> 548 bytes angular/src/images/cards/visa-light.png | Bin 0 -> 590 bytes angular/src/scss/icons.scss | 44 ++++++++++++++++++ 18 files changed, 67 insertions(+) create mode 100644 angular/src/images/cards/amex-dark.png create mode 100644 angular/src/images/cards/amex-light.png create mode 100644 angular/src/images/cards/diners_club-dark.png create mode 100644 angular/src/images/cards/diners_club-light.png create mode 100644 angular/src/images/cards/discover-dark.png create mode 100644 angular/src/images/cards/discover-light.png create mode 100644 angular/src/images/cards/jcb-dark.png create mode 100644 angular/src/images/cards/jcb-light.png create mode 100644 angular/src/images/cards/maestro-dark.png create mode 100644 angular/src/images/cards/maestro-light.png create mode 100644 angular/src/images/cards/mastercard-dark.png create mode 100644 angular/src/images/cards/mastercard-light.png create mode 100644 angular/src/images/cards/union_pay-dark.png create mode 100644 angular/src/images/cards/union_pay-light.png create mode 100644 angular/src/images/cards/visa-dark.png create mode 100644 angular/src/images/cards/visa-light.png create mode 100644 angular/src/scss/icons.scss diff --git a/angular/src/components/icon.component.ts b/angular/src/components/icon.component.ts index a32948cb..d30ce20e 100644 --- a/angular/src/components/icon.component.ts +++ b/angular/src/components/icon.component.ts @@ -18,6 +18,21 @@ const IconMap: any = { "fa-apple": String.fromCharCode(0xf179), }; +/** + * Provides a mapping from supported card brands to + * the filenames of icon that should be present in images/cards folder of clients. + */ +const cardIcons: Record = { + Visa: "card-visa", + Mastercard: "card-mastercard", + Amex: "card-amex", + Discover: "card-discover", + "Diners Club": "card-diners-club", + JCB: "card-jcb", + Maestro: "card-maestro", + UnionPay: "card-union-pay", +}; + @Component({ selector: "app-vault-icon", templateUrl: "icon.component.html", @@ -59,6 +74,7 @@ export class IconComponent implements OnChanges { break; case CipherType.Card: this.icon = "fa-credit-card"; + this.setCardIcon(); break; case CipherType.Identity: this.icon = "fa-id-card-o"; @@ -102,4 +118,11 @@ export class IconComponent implements OnChanges { this.image = null; } } + + private setCardIcon() { + const brand = this.cipher.card.brand; + if (this.imageEnabled && brand in cardIcons) { + this.icon = "credit-card-icon " + cardIcons[brand]; + } + } } diff --git a/angular/src/images/cards/amex-dark.png b/angular/src/images/cards/amex-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1b075975dbcdcd2f24465c3718497d2999758f GIT binary patch literal 773 zcmV+g1N!`lP)>;Q4j|NsABrr;oh)PT6=-|hK8l-j@C z^B{uM5PH$?_WYp9?Vrl*&*b(ni`Rd+=Wws&kiqG%)9_H8-A|p}&*k-x!0H5^x&i~zSRde&X?s-=3?091tkTsX)KDa=@Si@{V$T40&LuDFL=X zo~sLB;(Bg)3WWIq?#>oIbYoQ2)YbQNHoD-%APS-*sVC1(&xPd(8>}sJ1{!6eLZ3SeOQ5b@feB@j=lru%v)@Ma^kHhP{m>#!QtLmhL-IbQ2{yRfxkICV1qz`*b2x1&dwRJ z=2YsF94mz@VmbH$6!4j-59YoTlp@CgcU|UB5q4A_lzx!9JU82UT_QyCqMTvkEvXG)qRPCMiV9_MQ4V&2c}khGNQ zMfZu?_JW@KI8k+KlIiqLyZNEINZTjX;k|!D@BM!O8;ZSS7+?&300000NkvXXu0mjf D##w7Z literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/amex-light.png b/angular/src/images/cards/amex-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1b075975dbcdcd2f24465c3718497d2999758f GIT binary patch literal 773 zcmV+g1N!`lP)>;Q4j|NsABrr;oh)PT6=-|hK8l-j@C z^B{uM5PH$?_WYp9?Vrl*&*b(ni`Rd+=Wws&kiqG%)9_H8-A|p}&*k-x!0H5^x&i~zSRde&X?s-=3?091tkTsX)KDa=@Si@{V$T40&LuDFL=X zo~sLB;(Bg)3WWIq?#>oIbYoQ2)YbQNHoD-%APS-*sVC1(&xPd(8>}sJ1{!6eLZ3SeOQ5b@feB@j=lru%v)@Ma^kHhP{m>#!QtLmhL-IbQ2{yRfxkICV1qz`*b2x1&dwRJ z=2YsF94mz@VmbH$6!4j-59YoTlp@CgcU|UB5q4A_lzx!9JU82UT_QyCqMTvkEvXG)qRPCMiV9_MQ4V&2c}khGNQ zMfZu?_JW@KI8k+KlIiqLyZNEINZTjX;k|!D@BM!O8;ZSS7+?&300000NkvXXu0mjf D##w7Z literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/diners_club-dark.png b/angular/src/images/cards/diners_club-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d23233eb868ab2853671392b7aabcd55d6a0b9 GIT binary patch literal 783 zcmV+q1MvKbP)?x` z5oetiUye1B%E8|6qRi)myxvu!(kDSxqRr!V_ec7GI5Yv)ZT^a|59>N7}NDvq&D< zY8hzFoQ3iM&45xKy~ZVA%KSCq?}m8P7{NtKc{>I~i_i6Yp!(1#+0IodLP0E~tWZ*d zXcU@ngo>+)Py~>Slb|yxho%sudlR4tgy#;%BT{6A5(v=gO9APf1*!qQcYX2O zPrs9Q2$i)NdIRaU@g*q01F1;&gwnwXaS&cNAP9Be`lNH*1iisebPz%*BPAK2wEMGw zzacoPk^sZUAr41+VG6;%Z5$Cw#-Rwp_PU}6VM!tB+c+bN9#Nvaz-qGgslf>gyqSE>L`_Sg|veoOM(@A3h000Pd zQchC<-_O5*Umy^g&-vK^00Iq3L_t(o!|m5=bE_Z_24I>?;}W?DqN$g*|NmDWJ44tV zP)QD%IWuSaeoG8bc2N--W0%vB7v*qfKY4%S#d&*QpvAdei*j3}3p;cESrz7!^AkJp zTUDGJKQhj*<71flS)B+ZFENP$BKA(VPj(helU;1(!^!z5tD zHuMb*`C|%&bI>3(Y(vhURoO-mmNb#xwxPzCt098$lK_m|gj#=0twA5jBzMvFyOdqB-jcn7!D21@OZcCc!T9k!k2VLkcIuO#yJqQQb6-l(D9{JdA#HD)| z=^%PuXCU0fC=qSDLOG(!Krv7s?P^CsQ~xjf?0*LxU-Q0p vV5ir-L7v&=HSe@9e9K;PK9n)X(}l4=&6Si7S+2pm00000NkvXXu0mjfGeTH0 literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/discover-dark.png b/angular/src/images/cards/discover-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed6f6f942264a62e11813df4e2ed85411705f81 GIT binary patch literal 808 zcmV+@1K0eCP)u#OXKj6ehL@S1%goNPv$pc`^GQxsUPLxYO;tQWNxr|rzGW$nRWMdsVLLcG z;&LR|+1qwaGn!d0)@~-t%+HF9l1Mx`aCCX5T`Z)gs%l9!f>AQEVJymOC~HYIN0}H2 z0000HbW%=J0N=lrU?33h*Ux~@uYi9*5C%cQNdN!>DoI2^R9M69*I9GgKnw@)4JG90 zDQhp*HU?9h`$+ozzgs1F92aIN>8u}`8U7E9VLiW<iXpDDP!fh=-#3ZT*C8YyGqgZv6GOC$?$=ouQ*Dson!<(6^_E#!@@Fr*CaNzB(N z_(6=rj(7x!Z#2X00nwpD6oKbU+!I7mwl?7=#M-7r$2kjuBp@j)UGDwY8g}6O~ zuz?`A8bgkufsTJd4hw0yt0-V)-~^K18KM|6LvsmP2i4SY(A;u2BO5|_3YmbGAxqa= z8kdvv02ZdLvz+sQWFj48*3@bT>7t^RWkI9%p&2UrB52sOkL_1et8F0f{a!loxbGm! z%0hP_r5G0w`7CUvQcnh)N&}@kkcJQ3x`ED9ni85A!yr+0oxT0^q2B)g3Yzx>Wy@Zm z`7TLR56tXm(g$?llOGRd?W?HbnRrN;c&H{O9+D>&4`mBtqM`Ybdy0mnm}n@I$;3jN z*)+MF2ld`sUX#D(Q4Ow7_ds*GmQU*WN-5IN^?X;OyNi`%$7x&2)q*bl%ih!rLEi01 mhEHe4%Rd+ok6*t2Amlgxq9NYlwX%u;0000P)X8-^I3v^OWQvlz;AP~=hU|-LFw=t%^0006pNkl8nPdRNEhFD|LcS z&JERB#cS1V5UmNv)Y zbB7y#_Xryky@H~QtrTgOWYQ()GNt(8b_-4A0n(D4W~XfTpz%1bw?AjCS=uPupJ|%b z&Oq4BR&KW+7a4c|gqU55S=PU<$gW`S|OP;Vri@r8P`8!X8es^{Vf6$9zZyHMlJ^V-u03wl2<>LO?zIzje| z(HzJ}vQX+OXs*w+`+5BK{raQ%@q#n$5l`93<%J*9Xf=c2Ck1=YrAl7PApigX07*qo IM6N<$g0_C7tN;K2 literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/jcb-dark.png b/angular/src/images/cards/jcb-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb484d91e5a7302b07365ebbfe47e8cd06f4633 GIT binary patch literal 836 zcmV-K1H1f*P)u$J(B_rB+}PRMcB#|L%+5)T z!?Clr=c}`qnVyP`lG0^#V`ptVK}o7<>d^oI01I?dPE!Ei&%a*~fFK}%e^WtB#sB~T z{z*hZR9M69*Vl5JKoo%CwTe?X0z-rWv9>}-y~~bUdQaZ}b+Sv5V82=x|NGm@)Pg8+p&bqsbplcXx#CjubyPYgV9UcfYk%8_y zdB~J_pjYsPfpCX`W}J}6Kob_~azY{lsZY=Yf;JjyOd&T^EsSw*;{S9Av^`4;xF8Kk zeHkXo3U>7fl*wF{fTC8)!dZkqPN0Bn{gw{1k`PY!|2&3H$&qY2oRx&;owPkPqk~-% zav4b1^)-D(H&P`iZKMZ0(EAK@chAx65gE1|&=5$MG34I^N$Y4ThK!9zoj%ay7y>0i z+$)87BIp)Fq_>7P0NSM}gN5mYC#q`gK1h=U(Qx2snh_%~{4kAoZEislR`OrAZXbYT zQS{{LRQ57U>xA>GdAM++cNBD!Zpnfih7NE4skG|}suh~DkpGX+n1y-_bjt~84CDX< z1@M~(l7WE~2C~g}0tX}y8AyRVv|PjW-yyF*fE={=203VXW5QRV2r|-!5QTe57EU%b z%^bnSkHWv&lTtmfANKzOYS!a4&~ZIb3$^RH)7E#(rnMT?nC6Q%LVo~LqTQs{{F>_k O0000#@5ju-+3QJ-!_HS{hO^jkymjaF=)x{Rq{iWJymsO2_4niE zh{ufc_W1kp^7GZ%x8Az*`t;M1&40KXXQvlz;AP|7hU|-MAf0kZ9oB#j;>`6pHR9M69*I9F_FciS?XtnLV z_e4=-5f@qn#9iywy}et%|3~VHk)~z_3ylx$wEq_d9)6QB90mv>gXnsAZbwlx@+>2)Po(>qRR~5t>F( z)K0sitK_ZmS6h!st7J&$4i`rJ(21Ay_zJQByHAFoK6La8#{4B+XsX$t+=VL?Sb^Srr*>= z-_VDI92qhs=qV*Ml%cK!wNgT!1g$}W{-%SPunV~z2^zy*NI1LDx(mCI-%Ex@PTa5# z*sKw^ybb{yx8iQB&-Z!!5uo5OP@eYHp#eQ6#l!qTo{~b2(m_R~pigP;aDUmXlVdd| cUn~&v3^hLOTPN|%xBvhE07*qoM6N<$f=djcb^rhX literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/maestro-dark.png b/angular/src/images/cards/maestro-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4879b56fc47f68985a2e8e49a4cccbce928393 GIT binary patch literal 752 zcmV> z001vDJuomkFfc$bG(0afJuWmnFEc$aGd(ahIxjRmFfu(YGCeRbIxjRm>i`=7q2G3M zz(y@O29wLY4I?8@Wzz;91De$=J4fIH9!rDEG>y?aiqHm=%5QeU35~!Heyo#MmmOVs zDMC?!9WK-d9}k<`9hKKuf5;4mwh?%u6mggrYK|IXgrZ1-sX%wo8bCTQJ6000kkQchDq0N)@G&%c20pD^!WU@)amw738O0kug)K~z}7?bnA= z!Y}~F@un0I9O=fQGHe0avWJL!y#EtP^`I5L){c0dcl;mVcOjz*93etFMdOsrBnTlK zN$@moeAb3|8o$E?;f^VbQiMxVCJ7v6QNnKb0po-17%PCY>rSGZcPmrRCyFE+0H4R@#$pNP;UjRw90Oadj z%QBV>Z)gUbSK00yNM%oG1e`nhvtkWM3lB&UL38=5I)F|M3{8O3lh<7Vsf{2!pqmYJ zkA?)HA)KL2MG2%MXbPY=2ZFz?g`gSSLr!Q1ln^9>E?v+Wnj`=zQ6MQO^x%T(aiDnw zs1LVMggK(s2&>ir5IiBb;r9{V+4(3tyPrqv?>j{WeEP?}r@t2X^iu^6$!|bbh%aQ% z=L>0iezP^SaGq=5r20#kTcqo8ixdnt_gcvcf73pNxM`g#+k?{H>9VkW#ySCBBg({0 zX#;9!mfTF+2=zY7SKaTUWv6UoYPqHV=cnHu`W-061`@b56DLDBfoI?xB-s4RJ~$yO ih>)XXEQU`DE93*8%LLh0NtU<(0000+1?I1V(-{bt>;_yIJzvuVw`TY>5;Y)+d><}sZ{Qcka`}OwspxpE8?(pK~=}^Au zFtg<}jnO-b&~J9a_K=&CSC^|kb^h=1kk;`)xaSX>+Z~nH`oG5YfQ_O^g7j~H@lRs! zFhwo zuuN$}hfD2)nsLA)hVx?n@xp;VYbe-0g0bXAh1T6I@*z8S?FlVzEe zT1H5yP){0rcTG_}|VDgy-G~Tmg9mNg#VJXblY#fRe!wNLc9A1)cLi zoe7``wkJqyT9VQ`_X~a#848J71l@4-| y2vMu2O>iV*_q5aLvghqCn~>!gU$edx?IB;CRP+I%fo)a*0000> z001vDJuomkFfc$bGd(XfJuovmFEl(aGd(UeJuWgmFElX#ixEjV=`Fq3I4 zpl~YQkss3rAKwEV?F<+ChY|Wm2mNmb{Zj+}Spi{AG=^d>xqBtB5GC;$6I4ewpKmJC ziXrnR5c+}-_A(6ocnkMC3T;&~Y9un57b?gKA?<_}ZZap!&177zwSmyIh+GW;f}L zH?e;zXKKJK&n!e;#7#D%6Zeud1V)pS2iKFawaBssz%5sH5Bsn TcbISa00000NkvXXu0mjfUKKLh literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/mastercard-light.png b/angular/src/images/cards/mastercard-light.png new file mode 100644 index 0000000000000000000000000000000000000000..f87ae25911d375f66a2f00dd473a6392abfee7fa GIT binary patch literal 757 zcmVh16MpsDtdoArQ=_^LPUAUEs~Dfc!D`bP)-ZwCES1O8b7{pZH~)tmdyjqy-o`nzHC zDHib=6aMYg^?!}|utxlN3;p4^_^-J3kDL3?jr4GT^JZ`FFh=^2AqhP(q5uE@3UpFV zQvl!3Umy^_fWLpPic@C*00GfSL_t(o!|m7EQo=A42H*e!N_%L!XbZJPcEN>Ra9`g4 zp=_A}g#HOgxX>B?%UpbubJC;EY3-al#@D%pvbA$iYjSDQkG?iss+VV ziSjH>je>IObjpZ|>QIg7Fi`Ob{Q)TOTF%IF+Ara1jF-y3Y5K#yy))!FU2PGoIUlkI zroN2d-w6sWZ7rRMDpmBgn0!0b>S~+$80(1)w?S%;4fo5#)&`6z54#rZ0dT07adaObJ5)a2{eq*rke% zAbDlDwr2>n@!BtI15g=2xJ5l<6#)4VvH)brA#*QCylm>FjUn`oKBIk_-IOgq-nS(P zxd56-KS-Se2zUER+UrNWMeu1PuM9&$7i>03W!J*<=oL*#Iw1_v7a#uq{xOY+8fs}MMoYuq z++Hm;z8)q{otfe8?IMMMB{N47FkSHW_R{9%z{=Q(y}LzXjkVU)n8m|YZp!b=a9$#R?8!e{I%%;xEK$Vdv zOM4S`b@Xm?3`}koEn_26Rf!=#J2E?imb3V$s&tB~4_|WfQC3hVQSm}aD?de!B`%sH zEdB8C`_t5Ht*Rr1fE{pdB`jYpIYI9wEu5ARxcJ zu$I~Y00T2gL_t(o!|j(>bJIW+Mg>VIS?OD|uo9@tE$#+vV_FhQ=)L#ed-?wlteAmo z%Zn)X3k+w*^4l5j@m{TD7{wi>ozG7d8RQf81suWVa`}T8_@=1 zaYpun zNGH0j7aboJ9mt6G=tTSVqHUw1x8t5$?AMoe&>Cf5HjxgBJzb&#iKa`mGb7R^I`Yej zNJNQ_R;%Z&!_}+0L>1xLBI0ABb0iv1)I~MD4Ar)tNE9OqZ1hGwXJ|w+iK^(Pm!p%3 zZZHAK0z{LENJNQF;IO(}wC=vTo|s8#)hs5VX%3R`Ib#5GY%FokxWgsm6}25nlt~1f zSC=P;p}5lVYe~HUKZN3xgezRc0bIDJVfPU*wnn1yMAvZAvW6HA@wAN4N3B#cQA)5} zh791f0x8j}Krq{mY{vFv?njiUt3>B7;_eEr`zY4yA(}NbFQ-mNK&?d;m!}Xg4_IQX zkP%U$Ye4k`u39JY28|m08ZI?aYbdA3TsTU!8?giz_IcU4`2aVf3n%J!9n10ZT;Xr*}I8yc*mz?*d z{Pu$i8BzYAJ%(TIz(ZPBxE@>^?Fs_gjuRsNy{J)NUcSOQO6)#bq=*YGuMxE8C5Jp$~S#QkEMl^3M%;ueThHu%5`6=IPH_t5?#uwCV?}T=F Ra!&vN002ovPDHLkV1lCmMkoLP literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/union_pay-light.png b/angular/src/images/cards/union_pay-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2d75aa9070de5b32bc5efc83b242ddec1ba135af GIT binary patch literal 1245 zcmV<31S0#1P)n4C6Ngl#2A?h15}y>)UmzK`ozYPqrCaH zxK(eK5o&Y_J!|t{WwaeJ{_yeq)YVmQm-T#s6L@!~9yXJsy@|fNWPG4SVvRD5iD_7S z5M*;RDq4dnNc`dA-pJ6Sy2p~Fyy~g0N`RC1i;uc^|GR>6WO5& zRs9d0394O><<+%h=wve1u~2O~C-URAmdLHgB%RsgAnu5yoclx)PYykbJ2$k{1<9bM z9J(2Yo}{3AGN>qrw&Kv86!iGdKTTfIixX5t3IfVhQ5OQrRFNKoGF4C z$SUek9@j}glSxQaRK?3^nUhsi1g$d^5)hJ*sAvWo(K7XWMbAkIMUEvPT@F=qxfOhl zmig(e!|hfjXlSi`Uei8px3*1EfWxt}sT0FA9b)PxnN32XqIuvOU)JWq)9457%EAKt z7I^FqKpE()Wmzy7I`9Z_rBE%Go5I6rnVZ7fr|5;)^if&H9>NC7O|X)!cR;&fgu;VC z2unhuq8$!J746_dh&yvvair%b-Vb5ojS|APz z7V3ziA5E-)hF8=^(B4D@*`y4;4#TL!F-R0k3dt+l^RXN>P^NWTClsz#aKR%gia|pw z>icN714dw3P6uusHgATC%`pxQe~Oj^tp%@xV)RAZM%e*{K7ia5G_;}$u&@af0Iy4V zQ5J*EsR6`NkhCHpRVrG=FipcGJceQNp3TAMeWai>Zu+E|hE6wVBAyi5kX0mJ*Rm9( z&`uosev+-R3n}zI4jrBZ(&f;@`FKZPPtcJohfu3diF`T8C-P2Dr#bl-{yqL@pmB9E zJG7*ZD5K|dg1n@R@iXnxM5ZkAGwnH^vU#qKWMjrh#}wr!|Gozv9!)d500000NkvXX Hu0mjfHGyZg literal 0 HcmV?d00001 diff --git a/angular/src/images/cards/visa-dark.png b/angular/src/images/cards/visa-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0705b68e7d47f7c94d982aa8ba2d26eab61b4054 GIT binary patch literal 548 zcmV+<0^9wGP)u!+K}pNZ&#|+%V`pvh^7D#} zlBA}pmzkb@fQ8uE+rGcUeSn5mT48W>d2n-i*xA~Ghql`Q000SeQchC<-@kxgAP~>b zB|4OJ0004VNklBM(ojF65jiDU+) zRNppqNsms6?l-!u+nqt+TqgCZqate6vka(FR7e$6K^0U%ML||W6vaD>1&?0aHrn(c z2U_=mW#BjRZlh@!0*AT*vVxg-GiFOW1G~+#^GviFcN`0uXooG^Bg<}H665+pb~&f> zVGpp2d>%v&nUPr2!fRqfb2?iNw8mZ-J_M)^hxm^Dg&iJw(1>adw3>Kb5X|9%g5C1{ zR~{sTnkCi<6d@WUbH>8G6ujg?@Wt$7LnK^dRFfqQ@`185AVlx6)f70IpqIhWJsY$> zVa|f|kS4sR)Tna73l(){L1+>hj=8U7y==V{dkjg(8z3}fPXm+{GBSe6vH0rW03q*| zUa9quqvHrz3le2PmU9O9JI9I7#hJ;3nUTi){-Akd|J5H`1yxW5eGsTA!+EH-45(9m mnQz*1U)iGWc@5LFy;462ua(aA6>O;h0000iOwztgq`TC|okMaNj z01R|ePE!EizaS9LfM3slU|=QdAB6w_0gFjQK~z}7?U&1zgCGos8Ef0QfaO+Et7zZ< zB`5i5-Lk;VoZ(+E5XqN>Fg*t$MEljKBAu^-b^1`n`Zy7YIMc026Omf+t<+N%>Z#O4 ze5y$nYf_C+>Q)ZADOEugR6!MVD9GHQ*NSEa13qmb^k)B%13i|Gq#ZAMnguy@U6j(< z4q}oUXwqj(TO(~7dFF{|99HBD>12m3dq#$~c@B)f8=`Zb*2g8n&hmMXw1|wrPR=y$ zY-oJtmIpo3S!hZEREs1QhmWvhM;_Fpnt-F0G|q4)cSgZ(Xuah@+^CU#HACUzK+W8g@DyV|~5vV!ly>=FtV_uL~(H`@rJ?@pw`ZOV07*qoM6N<$f@Y&2-T(jq literal 0 HcmV?d00001 diff --git a/angular/src/scss/icons.scss b/angular/src/scss/icons.scss new file mode 100644 index 00000000..4d2ea459 --- /dev/null +++ b/angular/src/scss/icons.scss @@ -0,0 +1,44 @@ +$card-icons-base: "~@bitwarden/jslib-angular/src/images/cards/"; +$card-icons: ( + "visa": $card-icons-base + "visa-light.png", + "amex": $card-icons-base + "amex-light.png", + "diners-club": $card-icons-base + "diners_club-light.png", + "discover": $card-icons-base + "discover-light.png", + "jcb": $card-icons-base + "jcb-light.png", + "maestro": $card-icons-base + "maestro-light.png", + "mastercard": $card-icons-base + "mastercard-light.png", + "union-pay": $card-icons-base + "union_pay-light.png", +); + +$card-icons-dark: ( + "visa": $card-icons-base + "visa-dark.png", + "amex": $card-icons-base + "amex-dark.png", + "diners-club": $card-icons-base + "diners_club-dark.png", + "discover": $card-icons-base + "discover-dark.png", + "jcb": $card-icons-base + "jcb-dark.png", + "maestro": $card-icons-base + "maestro-dark.png", + "mastercard": $card-icons-base + "mastercard-dark.png", + "union-pay": $card-icons-base + "union_pay-dark.png", +); + +.credit-card-icon { + display: block; // Resolves the parent container being slighly to big + height: 19px; + width: 24px; + background-size: contain; + background-repeat: no-repeat; +} + +@each $name, $url in $card-icons { + .card-#{$name} { + background-image: url("#{$url}"); + } +} + +@each $theme in $dark-icon-themes { + @each $name, $url in $card-icons-dark { + .#{$theme} .card-#{$name} { + background-image: url("#{$url}"); + } + } +} From a8168d6ee7ebcde490fb014b3c5f555485412762 Mon Sep 17 00:00:00 2001 From: Linus Aarnio <42450444+linusaarnio@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:46:33 +0100 Subject: [PATCH 004/120] Fix for issue #1287 in bitwarden/web (#569) * Format the fieldvalue as a LocaleDateString instead of epoch when importing a date from 1P This would be better solved by storing it as a date FieldType instead of Text. But since it is unclear when new field types are added, this solution serves as a fix for now and also guides the solution when new fieldtype exists. * Remove trailing whitespace * Add tests for custom fields of 1pif imported identity * Change representation of 1pif imported dates to UTC string * Changes after running prettier Co-authored-by: Daniel James Smith --- .../onepasswordImporters/onepassword1PifImporter.ts | 6 +++++- .../importers/onepassword1PifImporter.spec.ts | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts b/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts index 01ec4e59..fd202ba5 100644 --- a/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts +++ b/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts @@ -172,7 +172,11 @@ export class OnePassword1PifImporter extends BaseImporter implements Importer { return; } - const fieldValue = field[valueKey].toString(); + // TODO: when date FieldType exists, store this as a date field type instead of formatted Text if k is 'date' + const fieldValue = + field.k === "date" + ? new Date(field[valueKey] * 1000).toUTCString() + : field[valueKey].toString(); const fieldDesignation = field[designationKey] != null ? field[designationKey].toString() : null; diff --git a/spec/common/importers/onepassword1PifImporter.spec.ts b/spec/common/importers/onepassword1PifImporter.spec.ts index ade73e99..ffa2417a 100644 --- a/spec/common/importers/onepassword1PifImporter.spec.ts +++ b/spec/common/importers/onepassword1PifImporter.spec.ts @@ -476,6 +476,19 @@ describe("1Password 1Pif Importer", () => { // remaining fields as custom fields expect(cipher.fields.length).toEqual(6); + const fields = cipher.fields; + expect(fields[0].name).toEqual("sex"); + expect(fields[0].value).toEqual("male"); + expect(fields[1].name).toEqual("birth date"); + expect(fields[1].value).toEqual("Mon, 11 Mar 2019 12:01:00 GMT"); + expect(fields[2].name).toEqual("occupation"); + expect(fields[2].value).toEqual("Engineer"); + expect(fields[3].name).toEqual("department"); + expect(fields[3].value).toEqual("IT"); + expect(fields[4].name).toEqual("job title"); + expect(fields[4].value).toEqual("Developer"); + expect(fields[5].name).toEqual("home"); + expect(fields[5].value).toEqual("+49 333 222 111"); }); it("should create password history", async () => { From 59a530045860f89bde2cd37e93f4e09d76e307b3 Mon Sep 17 00:00:00 2001 From: Jake Fink Date: Fri, 17 Dec 2021 11:24:38 -0500 Subject: [PATCH 005/120] move sso properties to globalstate (#583) * move sso properties to globalstate * whitespace * npm prettier changes --- common/src/models/domain/account.ts | 3 -- common/src/models/domain/globalState.ts | 3 ++ common/src/services/state.service.ts | 44 +++++++++++-------- common/src/services/stateMigration.service.ts | 18 ++++---- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 22ab5ddf..98ea62df 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -95,9 +95,6 @@ export class AccountProfile { hasPremiumPersonally?: boolean; lastActive?: number; lastSync?: string; - ssoCodeVerifier?: string; - ssoOrganizationIdentifier?: string; - ssoState?: string; userId?: string; usesKeyConnector?: boolean; keyHash?: string; diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index ad270bce..66ad5130 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -5,6 +5,9 @@ export class GlobalState { locale?: string; openAtLogin?: boolean; organizationInvitation?: any; + ssoCodeVerifier?: string; + ssoOrganizationIdentifier?: string; + ssoState?: string; rememberedEmail?: string; theme?: string; window?: Map = new Map(); diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 8fc30f8b..59c5a73a 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1874,46 +1874,54 @@ export class StateService implements StateServiceAbstraction { } async getSsoCodeVerifier(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.ssoCodeVerifier; + return ( + await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())) + )?.ssoCodeVerifier; } async setSsoCodeVerifier(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + const globals = await this.getGlobals( + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); + globals.ssoCodeVerifier = value; + await this.saveGlobals( + globals, + this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.profile.ssoCodeVerifier = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); } async getSsoOrgIdentifier(options?: StorageOptions): Promise { return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) - )?.profile?.ssoOrganizationIdentifier; + await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) + )?.ssoOrganizationIdentifier; } async setSsoOrganizationIdentifier(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); - account.profile.ssoOrganizationIdentifier = value; - await this.saveAccount( - account, + globals.ssoOrganizationIdentifier = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); } async getSsoState(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.ssoState; + return ( + await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())) + )?.ssoState; } async setSsoState(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + const globals = await this.getGlobals( + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); + globals.ssoState = value; + await this.saveGlobals( + globals, + this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.profile.ssoState = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); } async getTheme(options?: StorageOptions): Promise { diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index bab3667f..903cc093 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -192,6 +192,15 @@ export class StateMigrationService { ), openAtLogin: await this.storageService.get(v1Keys.openAtLogin, options), organizationInvitation: await this.storageService.get("", options), + ssoCodeVerifier: await this.storageService.get( + v1Keys.ssoCodeVerifier, + options + ), + ssoOrganizationIdentifier: await this.storageService.get( + v1Keys.ssoIdentifier, + options + ), + ssoState: null, rememberedEmail: await this.storageService.get( v1Keys.rememberedEmail, options @@ -327,15 +336,6 @@ export class StateMigrationService { keyHash: await this.storageService.get(v1Keys.keyHash, options), lastActive: await this.storageService.get(v1Keys.lastActive, options), lastSync: null, - ssoCodeVerifier: await this.storageService.get( - v1Keys.ssoCodeVerifier, - options - ), - ssoOrganizationIdentifier: await this.storageService.get( - v1Keys.ssoIdentifier, - options - ), - ssoState: null, userId: userId, usesKeyConnector: null, }, From 9e263365497d669c9f7c85a324315a0597a1ea60 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 20 Dec 2021 08:48:47 -0500 Subject: [PATCH 006/120] [feat(Account Switching)] Allow for extending application state (#584) * [feat(Account Switching)] Allow for extending application state * [bug(Account Switching)] Remove hardcoded dev urls * [bug(Account Switching)] Init Account when signing in * [bug(Account Switching)] Check for state migration version in local storage for web * [bug(Account Switching)] Fix never lock configurations * [chore] Prettier merge * [bug] Move environmentUrls to global state * [chore] Ran prettier * [bug]change storage location for enityId and type * [style] Ran prettier Co-authored-by: Robyn MacCallum --- common/src/abstractions/state.service.ts | 6 +- common/src/models/domain/account.ts | 3 - common/src/models/domain/globalState.ts | 3 + common/src/models/domain/state.ts | 4 +- common/src/services/auth.service.ts | 53 ++-- common/src/services/crypto.service.ts | 12 +- common/src/services/environment.service.ts | 13 +- common/src/services/state.service.ts | 257 ++++++++++-------- common/src/services/stateMigration.service.ts | 22 +- common/src/services/vaultTimeout.service.ts | 2 +- node/src/cli/baseProgram.ts | 2 +- 11 files changed, 198 insertions(+), 179 deletions(-) diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index 55707b7f..5dd3da2e 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -24,11 +24,11 @@ import { CollectionView } from "../models/view/collectionView"; import { FolderView } from "../models/view/folderView"; import { SendView } from "../models/view/sendView"; -export abstract class StateService { - accounts: BehaviorSubject<{ [userId: string]: Account }>; +export abstract class StateService { + accounts: BehaviorSubject<{ [userId: string]: T }>; activeAccount: BehaviorSubject; - addAccount: (account: Account) => Promise; + addAccount: (account: T) => Promise; setActiveUser: (userId: string) => Promise; clean: (options?: StorageOptions) => Promise; init: () => Promise; diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 98ea62df..cab08d1a 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -130,9 +130,6 @@ export class AccountSettings { enableMinimizeToTray?: boolean; enableStartToTray?: boolean; enableTray?: boolean; - environmentUrls?: any = { - server: "bitwarden.com", - }; equivalentDomains?: any; minimizeOnCopyToClipboard?: boolean; neverDomains?: { [id: string]: any }; diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 66ad5130..0fdce648 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -24,4 +24,7 @@ export class GlobalState { noAutoPromptBiometrics?: boolean; noAutoPromptBiometricsText?: string; stateVersion: number; + environmentUrls?: any = { + server: "bitwarden.com", + }; } diff --git a/common/src/models/domain/state.ts b/common/src/models/domain/state.ts index 17889bf4..d9087264 100644 --- a/common/src/models/domain/state.ts +++ b/common/src/models/domain/state.ts @@ -1,8 +1,8 @@ import { Account } from "./account"; import { GlobalState } from "./globalState"; -export class State { - accounts: { [userId: string]: Account } = {}; +export class State { + accounts: { [userId: string]: TAccount } = {}; globals: GlobalState = new GlobalState(); activeUserId: string; } diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 5e44c90d..3d7506d3 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -2,7 +2,13 @@ import { HashPurpose } from "../enums/hashPurpose"; import { KdfType } from "../enums/kdfType"; import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; -import { Account, AccountData, AccountProfile, AccountTokens } from "../models/domain/account"; +import { + Account, + AccountData, + AccountKeys, + AccountProfile, + AccountTokens, +} from "../models/domain/account"; import { AuthResult } from "../models/domain/authResult"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; @@ -538,27 +544,34 @@ export class AuthService implements AuthServiceAbstraction { result.forcePasswordReset = tokenResponse.forcePasswordReset; const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken); - await this.stateService.addAccount({ - profile: { - ...new AccountProfile(), - ...{ - userId: accountInformation.sub, - email: accountInformation.email, - apiKeyClientId: clientId, - apiKeyClientSecret: clientSecret, - hasPremiumPersonally: accountInformation.premium, - kdfIterations: tokenResponse.kdfIterations, - kdfType: tokenResponse.kdf, + await this.stateService.addAccount( + new Account({ + profile: { + ...new AccountProfile(), + ...{ + userId: accountInformation.sub, + email: accountInformation.email, + apiKeyClientId: clientId, + hasPremiumPersonally: accountInformation.premium, + kdfIterations: tokenResponse.kdfIterations, + kdfType: tokenResponse.kdf, + }, }, - }, - tokens: { - ...new AccountTokens(), - ...{ - accessToken: tokenResponse.accessToken, - refreshToken: tokenResponse.refreshToken, + keys: { + ...new AccountKeys(), + ...{ + apiKeyClientSecret: clientSecret, + }, }, - }, - }); + tokens: { + ...new AccountTokens(), + ...{ + accessToken: tokenResponse.accessToken, + refreshToken: tokenResponse.refreshToken, + }, + }, + }) + ); if (tokenResponse.twoFactorToken != null) { await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email); diff --git a/common/src/services/crypto.service.ts b/common/src/services/crypto.service.ts index 05c14d93..fd9d83c4 100644 --- a/common/src/services/crypto.service.ts +++ b/common/src/services/crypto.service.ts @@ -761,13 +761,13 @@ export class CryptoService implements CryptoServiceAbstraction { // Helpers protected async storeKey(key: SymmetricCryptoKey, userId?: string) { - if ( - (await this.shouldStoreKey(KeySuffixOptions.Auto, userId)) || - (await this.shouldStoreKey(KeySuffixOptions.Biometric, userId)) - ) { - await this.stateService.setCryptoMasterKeyB64(key.keyB64, { userId: userId }); + if (await this.shouldStoreKey(KeySuffixOptions.Auto, userId)) { + await this.stateService.setCryptoMasterKeyAuto(key.keyB64, { userId: userId }); + } else if (await this.shouldStoreKey(KeySuffixOptions.Biometric, userId)) { + await this.stateService.setCryptoMasterKeyBiometric(key.keyB64, { userId: userId }); } else { - await this.stateService.setCryptoMasterKeyB64(null, { userId: userId }); + await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId }); + await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId }); } } diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index d95718e0..cf435d87 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -109,18 +109,7 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { } async setUrlsFromStorage(): Promise { - const urlsObj: any = await this.stateService.getEnvironmentUrls(); - const urls = urlsObj || { - base: null, - api: null, - identity: null, - icons: null, - notifications: null, - events: null, - webVault: null, - keyConnector: null, - }; - + const urls: any = await this.stateService.getEnvironmentUrls(); const envUrls = new EnvironmentUrls(); if (urls.base) { diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 59c5a73a..5de1ccb1 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1,6 +1,12 @@ import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; -import { Account } from "../models/domain/account"; +import { + Account, + AccountData, + AccountKeys, + AccountProfile, + AccountTokens, +} from "../models/domain/account"; import { LogService } from "../abstractions/log.service"; import { StorageService } from "../abstractions/storage.service"; @@ -34,19 +40,21 @@ import { SendData } from "../models/data/sendData"; import { BehaviorSubject } from "rxjs"; -import { StateMigrationService } from "./stateMigration.service"; +import { StateMigrationService } from "../abstractions/stateMigration.service"; -export class StateService implements StateServiceAbstraction { - accounts = new BehaviorSubject<{ [userId: string]: Account }>({}); +export class StateService + implements StateServiceAbstraction +{ + accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({}); activeAccount = new BehaviorSubject(null); - private state: State = new State(); + protected state: State = new State(); constructor( - private storageService: StorageService, - private secureStorageService: StorageService, - private logService: LogService, - private stateMigrationService: StateMigrationService + protected storageService: StorageService, + protected secureStorageService: StorageService, + protected logService: LogService, + protected stateMigrationService: StateMigrationService ) {} async init(): Promise { @@ -60,7 +68,7 @@ export class StateService implements StateServiceAbstraction { async loadStateFromDisk() { if ((await this.getActiveUserIdFromStorage()) != null) { - const diskState = await this.storageService.get( + const diskState = await this.storageService.get>( "state", await this.defaultOnDiskOptions() ); @@ -71,10 +79,7 @@ export class StateService implements StateServiceAbstraction { } } - async addAccount(account: Account) { - if (account?.profile?.userId == null) { - return; - } + async addAccount(account: TAccount) { this.state.accounts[account.profile.userId] = account; await this.scaffoldNewAccountStorage(account); await this.setActiveUser(account.profile.userId); @@ -83,7 +88,7 @@ export class StateService implements StateServiceAbstraction { async setActiveUser(userId: string): Promise { this.state.activeUserId = userId; - const storedState = await this.storageService.get( + const storedState = await this.storageService.get>( "state", await this.defaultOnDiskOptions() ); @@ -1321,47 +1326,64 @@ export class StateService implements StateServiceAbstraction { } async getEntityId(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.entityId; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) + )?.profile?.entityId; } async setEntityId(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); account.profile.entityId = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) + ); } async getEntityType(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.entityType; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) + )?.profile?.entityType; } async setEntityType(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); account.profile.entityType = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) + ); } async getEnvironmentUrls(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.environmentUrls ?? { + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.environmentUrls ?? { + base: null, + api: null, + identity: null, + icons: null, + notifications: null, + events: null, + webVault: null, + keyConnector: null, + // TODO: this is a bug and we should use base instead for the server detail in the account switcher, otherwise self hosted urls will not show correctly server: "bitwarden.com", } ); } async setEnvironmentUrls(value: any, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.environmentUrls = value; - await this.saveAccount( - account, + globals.environmentUrls = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } @@ -1402,17 +1424,20 @@ export class StateService implements StateServiceAbstraction { async getEverBeenUnlocked(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile - ?.everBeenUnlocked ?? false + (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.profile?.everBeenUnlocked ?? false ); } async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); account.profile.everBeenUnlocked = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); } async getForcePasswordReset(options?: StorageOptions): Promise { @@ -1981,10 +2006,7 @@ export class StateService implements StateServiceAbstraction { const accountVaultTimeout = ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) )?.settings?.vaultTimeout; - const globalVaultTimeout = ( - await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) - )?.vaultTimeout; - return accountVaultTimeout ?? globalVaultTimeout ?? 15; + return accountVaultTimeout; } async setVaultTimeout(value: number, options?: StorageOptions): Promise { @@ -2047,7 +2069,7 @@ export class StateService implements StateServiceAbstraction { ); } - private async getGlobals(options: StorageOptions): Promise { + protected async getGlobals(options: StorageOptions): Promise { let globals: GlobalState; if (this.useMemory(options.storageLocation)) { globals = this.getGlobalsFromMemory(); @@ -2060,39 +2082,41 @@ export class StateService implements StateServiceAbstraction { return globals ?? new GlobalState(); } - private async saveGlobals(globals: GlobalState, options: StorageOptions) { + protected async saveGlobals(globals: GlobalState, options: StorageOptions) { return this.useMemory(options.storageLocation) ? this.saveGlobalsToMemory(globals) : await this.saveGlobalsToDisk(globals, options); } - private getGlobalsFromMemory(): GlobalState { + protected getGlobalsFromMemory(): GlobalState { return this.state.globals; } - private async getGlobalsFromDisk(options: StorageOptions): Promise { - return (await this.storageService.get("state", options))?.globals; + protected async getGlobalsFromDisk(options: StorageOptions): Promise { + return (await this.storageService.get>("state", options))?.globals; } - private saveGlobalsToMemory(globals: GlobalState): void { + protected saveGlobalsToMemory(globals: GlobalState): void { this.state.globals = globals; } - private async saveGlobalsToDisk(globals: GlobalState, options: StorageOptions): Promise { + protected async saveGlobalsToDisk(globals: GlobalState, options: StorageOptions): Promise { if (options.useSecureStorage) { - const state = (await this.secureStorageService.get("state", options)) ?? new State(); + const state = + (await this.secureStorageService.get>("state", options)) ?? new State(); state.globals = globals; await this.secureStorageService.save("state", state, options); } else { - const state = (await this.storageService.get("state", options)) ?? new State(); + const state = + (await this.storageService.get>("state", options)) ?? new State(); state.globals = globals; await this.saveStateToStorage(state, options); } } - private async getAccount(options: StorageOptions): Promise { + protected async getAccount(options: StorageOptions): Promise { try { - let account: Account; + let account: TAccount; if (this.useMemory(options.storageLocation)) { account = this.getAccountFromMemory(options); } @@ -2101,51 +2125,51 @@ export class StateService implements StateServiceAbstraction { account = await this.getAccountFromDisk(options); } - return account != null ? new Account(account) : null; + return account; } catch (e) { this.logService.error(e); } } - private getAccountFromMemory(options: StorageOptions): Account { + protected getAccountFromMemory(options: StorageOptions): TAccount { if (this.state.accounts == null) { return null; } return this.state.accounts[this.getUserIdFromMemory(options)]; } - private getUserIdFromMemory(options: StorageOptions): string { + protected getUserIdFromMemory(options: StorageOptions): string { return options?.userId != null ? this.state.accounts[options.userId]?.profile?.userId : this.state.activeUserId; } - private async getAccountFromDisk(options: StorageOptions): Promise { + protected async getAccountFromDisk(options: StorageOptions): Promise { if (options?.userId == null && this.state.activeUserId == null) { return null; } const state = options?.useSecureStorage - ? (await this.secureStorageService.get("state", options)) ?? - (await this.storageService.get( + ? (await this.secureStorageService.get>("state", options)) ?? + (await this.storageService.get>( "state", this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local }) )) - : await this.storageService.get("state", options); + : await this.storageService.get>("state", options); return state?.accounts[options?.userId ?? this.state.activeUserId]; } - private useMemory(storageLocation: StorageLocation) { + protected useMemory(storageLocation: StorageLocation) { return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both; } - private useDisk(storageLocation: StorageLocation) { + protected useDisk(storageLocation: StorageLocation) { return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both; } - private async saveAccount( - account: Account, + protected async saveAccount( + account: TAccount, options: StorageOptions = { storageLocation: StorageLocation.Both, useSecureStorage: false, @@ -2156,86 +2180,75 @@ export class StateService implements StateServiceAbstraction { : await this.saveAccountToDisk(account, options); } - private async saveAccountToDisk(account: Account, options: StorageOptions): Promise { + protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise { const storageLocation = options.useSecureStorage ? this.secureStorageService : this.storageService; - const state = (await storageLocation.get("state", options)) ?? new State(); + const state = + (await storageLocation.get>("state", options)) ?? new State(); state.accounts[account.profile.userId] = account; await storageLocation.save("state", state, options); await this.pushAccounts(); } - private async saveAccountToMemory(account: Account): Promise { + protected async saveAccountToMemory(account: TAccount): Promise { if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) { this.state.accounts[account.profile.userId] = account; } await this.pushAccounts(); } - private async scaffoldNewAccountStorage(account: Account): Promise { + protected async scaffoldNewAccountStorage(account: TAccount): Promise { await this.scaffoldNewAccountLocalStorage(account); await this.scaffoldNewAccountSessionStorage(account); await this.scaffoldNewAccountMemoryStorage(account); } - private async scaffoldNewAccountLocalStorage(account: Account): Promise { + protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise { const storedState = - (await this.storageService.get("state", await this.defaultOnDiskLocalOptions())) ?? - new State(); + (await this.storageService.get>( + "state", + await this.defaultOnDiskLocalOptions() + )) ?? new State(); const storedAccount = storedState.accounts[account.profile.userId]; if (storedAccount != null) { - account = { - settings: storedAccount.settings, - profile: account.profile, - tokens: account.tokens, - keys: account.keys, - data: account.data, - }; + account.settings = storedAccount.settings; } storedState.accounts[account.profile.userId] = account; await this.saveStateToStorage(storedState, await this.defaultOnDiskLocalOptions()); } - private async scaffoldNewAccountMemoryStorage(account: Account): Promise { + protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise { const storedState = - (await this.storageService.get("state", await this.defaultOnDiskMemoryOptions())) ?? - new State(); + (await this.storageService.get>( + "state", + await this.defaultOnDiskMemoryOptions() + )) ?? new State(); const storedAccount = storedState.accounts[account.profile.userId]; if (storedAccount != null) { - account = { - settings: storedAccount.settings, - profile: account.profile, - tokens: account.tokens, - keys: account.keys, - data: account.data, - }; + account.settings = storedAccount.settings; } storedState.accounts[account.profile.userId] = account; await this.saveStateToStorage(storedState, await this.defaultOnDiskMemoryOptions()); } - private async scaffoldNewAccountSessionStorage(account: Account): Promise { + protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise { const storedState = - (await this.storageService.get("state", await this.defaultOnDiskOptions())) ?? - new State(); + (await this.storageService.get>( + "state", + await this.defaultOnDiskOptions() + )) ?? new State(); const storedAccount = storedState.accounts[account.profile.userId]; if (storedAccount != null) { - account = { - settings: storedAccount.settings, - profile: account.profile, - tokens: account.tokens, - keys: account.keys, - data: account.data, - }; + account.settings = storedAccount.settings; } storedState.accounts[account.profile.userId] = account; await this.saveStateToStorage(storedState, await this.defaultOnDiskOptions()); } - private async pushAccounts(): Promise { + protected async pushAccounts(): Promise { await this.pruneInMemoryAccounts(); if (this.state?.accounts == null || Object.keys(this.state.accounts).length < 1) { this.accounts.next(null); @@ -2245,7 +2258,7 @@ export class StateService implements StateServiceAbstraction { this.accounts.next(this.state.accounts); } - private reconcileOptions( + protected reconcileOptions( requestedOptions: StorageOptions, defaultOptions: StorageOptions ): StorageOptions { @@ -2263,11 +2276,11 @@ export class StateService implements StateServiceAbstraction { return requestedOptions; } - private get defaultInMemoryOptions(): StorageOptions { + protected get defaultInMemoryOptions(): StorageOptions { return { storageLocation: StorageLocation.Memory, userId: this.state.activeUserId }; } - private async defaultOnDiskOptions(): Promise { + protected async defaultOnDiskOptions(): Promise { return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Session, @@ -2276,7 +2289,7 @@ export class StateService implements StateServiceAbstraction { }; } - private async defaultOnDiskLocalOptions(): Promise { + protected async defaultOnDiskLocalOptions(): Promise { return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Local, @@ -2285,7 +2298,7 @@ export class StateService implements StateServiceAbstraction { }; } - private async defaultOnDiskMemoryOptions(): Promise { + protected async defaultOnDiskMemoryOptions(): Promise { return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Memory, @@ -2294,7 +2307,7 @@ export class StateService implements StateServiceAbstraction { }; } - private async defaultSecureStorageOptions(): Promise { + protected async defaultSecureStorageOptions(): Promise { return { storageLocation: StorageLocation.Disk, useSecureStorage: true, @@ -2302,46 +2315,38 @@ export class StateService implements StateServiceAbstraction { }; } - private async getActiveUserIdFromStorage(): Promise { - const state = await this.storageService.get("state"); + protected async getActiveUserIdFromStorage(): Promise { + const state = await this.storageService.get>("state"); return state?.activeUserId; } - private async removeAccountFromLocalStorage( + protected async removeAccountFromLocalStorage( userId: string = this.state.activeUserId ): Promise { - const state = await this.storageService.get("state", { + const state = await this.storageService.get>("state", { htmlStorageLocation: HtmlStorageLocation.Local, }); if (state?.accounts[userId] == null) { return; } - - state.accounts[userId] = new Account({ - settings: state.accounts[userId].settings, - }); - + state.accounts[userId] = this.resetAccount(state.accounts[userId]); await this.saveStateToStorage(state, await this.defaultOnDiskLocalOptions()); } - private async removeAccountFromSessionStorage( + protected async removeAccountFromSessionStorage( userId: string = this.state.activeUserId ): Promise { - const state = await this.storageService.get("state", { + const state = await this.storageService.get>("state", { htmlStorageLocation: HtmlStorageLocation.Session, }); if (state?.accounts[userId] == null) { return; } - - state.accounts[userId] = new Account({ - settings: state.accounts[userId].settings, - }); - + state.accounts[userId] = this.resetAccount(state.accounts[userId]); await this.saveStateToStorage(state, await this.defaultOnDiskOptions()); } - private async removeAccountFromSecureStorage( + protected async removeAccountFromSecureStorage( userId: string = this.state.activeUserId ): Promise { await this.setCryptoMasterKeyAuto(null, { userId: userId }); @@ -2349,15 +2354,18 @@ export class StateService implements StateServiceAbstraction { await this.setCryptoMasterKeyB64(null, { userId: userId }); } - private removeAccountFromMemory(userId: string = this.state.activeUserId): void { + protected removeAccountFromMemory(userId: string = this.state.activeUserId): void { delete this.state.accounts[userId]; } - private async saveStateToStorage(state: State, options: StorageOptions): Promise { + protected async saveStateToStorage( + state: State, + options: StorageOptions + ): Promise { await this.storageService.save("state", state, options); } - private async pruneInMemoryAccounts() { + protected async pruneInMemoryAccounts() { // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state for (const userId in this.state.accounts) { if (!(await this.getIsAuthenticated({ userId: userId }))) { @@ -2365,4 +2373,13 @@ export class StateService implements StateServiceAbstraction { } } } + + // settings persist even on reset + protected resetAccount(account: TAccount) { + account.data = new AccountData(); + account.keys = new AccountKeys(); + account.profile = new AccountProfile(); + account.tokens = new AccountTokens(); + return account; + } } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 903cc093..afe756e4 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -114,19 +114,22 @@ export class StateMigrationService { readonly latestVersion: number = 2; constructor( - private storageService: StorageService, - private secureStorageService: StorageService + protected storageService: StorageService, + protected secureStorageService: StorageService ) {} async needsMigration(): Promise { - const currentStateVersion = (await this.storageService.get("state"))?.globals - ?.stateVersion; + const currentStateVersion = ( + await this.storageService.get>("state", { + htmlStorageLocation: HtmlStorageLocation.Local, + }) + )?.globals?.stateVersion; return currentStateVersion == null || currentStateVersion < this.latestVersion; } async migrate(): Promise { let currentStateVersion = - (await this.storageService.get("state"))?.globals?.stateVersion ?? 1; + (await this.storageService.get>("state"))?.globals?.stateVersion ?? 1; while (currentStateVersion < this.latestVersion) { switch (currentStateVersion) { case 1: @@ -138,10 +141,10 @@ export class StateMigrationService { } } - private async migrateStateFrom1To2(): Promise { + protected async migrateStateFrom1To2(): Promise { const options: StorageOptions = { htmlStorageLocation: HtmlStorageLocation.Local }; const userId = await this.storageService.get("userId"); - const initialState: State = + const initialState: State = userId == null ? { globals: { @@ -174,6 +177,7 @@ export class StateMigrationService { v1Keys.enableBiometric, options ), + environmentUrls: await this.storageService.get(v1Keys.environmentUrls, options), installedVersion: await this.storageService.get( v1Keys.installedVersion, options @@ -439,10 +443,6 @@ export class StateMigrationService { options ), enableTray: await this.storageService.get(v1Keys.enableTray, options), - environmentUrls: await this.storageService.get( - v1Keys.environmentUrls, - options - ), equivalentDomains: await this.storageService.get( v1Keys.equivalentDomains, options diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index 544e6bc2..cd810e8c 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -53,7 +53,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { async isLocked(userId?: string): Promise { const neverLock = (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) && - !(await this.stateService.getEverBeenUnlocked({ userId: userId })); + (await this.stateService.getEverBeenUnlocked({ userId: userId })); if (neverLock) { // TODO: This also _sets_ the key so when we check memory in the next line it finds a key. // We should refactor here. diff --git a/node/src/cli/baseProgram.ts b/node/src/cli/baseProgram.ts index e8c15f9a..b2ddd22f 100644 --- a/node/src/cli/baseProgram.ts +++ b/node/src/cli/baseProgram.ts @@ -9,7 +9,7 @@ import { StringResponse } from "./models/response/stringResponse"; export abstract class BaseProgram { constructor( - private stateService: StateService, + protected stateService: StateService, private writeLn: (s: string, finalLine: boolean, error: boolean) => void ) {} From 3d7b427b0ea7d6b75cc1eebb7a7595314f564503 Mon Sep 17 00:00:00 2001 From: Jake Fink Date: Tue, 21 Dec 2021 12:02:56 -0500 Subject: [PATCH 007/120] Use MP policies when registering a new user through SSO (#587) * use MP policies when registering a new user through SSO * prettier and linting --- .../src/components/change-password.component.ts | 2 +- angular/src/components/set-password.component.ts | 2 ++ common/src/abstractions/api.service.ts | 4 ++++ common/src/abstractions/policy.service.ts | 1 + common/src/services/api.service.ts | 14 ++++++++++++++ common/src/services/policy.service.ts | 9 +++++++++ 6 files changed, 31 insertions(+), 1 deletion(-) diff --git a/angular/src/components/change-password.component.ts b/angular/src/components/change-password.component.ts index 6ca81494..2431ece2 100644 --- a/angular/src/components/change-password.component.ts +++ b/angular/src/components/change-password.component.ts @@ -40,7 +40,7 @@ export class ChangePasswordComponent implements OnInit { async ngOnInit() { this.email = await this.stateService.getEmail(); - this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(); + this.enforcedPolicyOptions ??= await this.policyService.getMasterPasswordPolicyOptions(); } async submit() { diff --git a/angular/src/components/set-password.component.ts b/angular/src/components/set-password.component.ts index e651eca5..89f6e520 100644 --- a/angular/src/components/set-password.component.ts +++ b/angular/src/components/set-password.component.ts @@ -79,6 +79,8 @@ export class SetPasswordComponent extends BaseChangePasswordComponent { const response = await this.apiService.getOrganizationAutoEnrollStatus(this.identifier); this.orgId = response.id; this.resetPasswordAutoEnroll = response.resetPasswordEnabled; + this.enforcedPolicyOptions = + await this.policyService.getMasterPasswordPoliciesForInvitedUsers(this.orgId); } catch { this.platformUtilsService.showToast("error", null, this.i18nService.t("errorOccurred")); } diff --git a/common/src/abstractions/api.service.ts b/common/src/abstractions/api.service.ts index ca648f0c..4ef3c1a9 100644 --- a/common/src/abstractions/api.service.ts +++ b/common/src/abstractions/api.service.ts @@ -355,6 +355,10 @@ export abstract class ApiService { email: string, organizationUserId: string ) => Promise>; + getPoliciesByInvitedUser: ( + organizationId: string, + userId: string + ) => Promise>; putPolicy: ( organizationId: string, type: PolicyType, diff --git a/common/src/abstractions/policy.service.ts b/common/src/abstractions/policy.service.ts index 97dcb4ad..f1f6b4e5 100644 --- a/common/src/abstractions/policy.service.ts +++ b/common/src/abstractions/policy.service.ts @@ -15,6 +15,7 @@ export abstract class PolicyService { getPolicyForOrganization: (policyType: PolicyType, organizationId: string) => Promise; replace: (policies: { [id: string]: PolicyData }) => Promise; clear: (userId?: string) => Promise; + getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise; getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise; evaluateMasterPassword: ( passwordStrength: number, diff --git a/common/src/services/api.service.ts b/common/src/services/api.service.ts index 2764108e..16b94b09 100644 --- a/common/src/services/api.service.ts +++ b/common/src/services/api.service.ts @@ -1047,6 +1047,20 @@ export class ApiService implements ApiServiceAbstraction { return new ListResponse(r, PolicyResponse); } + async getPoliciesByInvitedUser( + organizationId: string, + userId: string + ): Promise> { + const r = await this.send( + "GET", + "/organizations/" + organizationId + "/policies/invited-user?" + "userId=" + userId, + null, + false, + true + ); + return new ListResponse(r, PolicyResponse); + } + async putPolicy( organizationId: string, type: PolicyType, diff --git a/common/src/services/policy.service.ts b/common/src/services/policy.service.ts index 79af726a..dce9af6f 100644 --- a/common/src/services/policy.service.ts +++ b/common/src/services/policy.service.ts @@ -78,6 +78,15 @@ export class PolicyService implements PolicyServiceAbstraction { await this.stateService.setEncryptedPolicies(null, { userId: userId }); } + async getMasterPasswordPoliciesForInvitedUsers( + orgId: string + ): Promise { + const userId = await this.stateService.getUserId(); + const response = await this.apiService.getPoliciesByInvitedUser(orgId, userId); + const policies = await this.mapPoliciesFromToken(response); + return this.getMasterPasswordPolicyOptions(policies); + } + async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise { let enforcedOptions: MasterPasswordPolicyOptions = null; From d68c1dafaf0528f5323dd595773b0fa122403d0d Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Wed, 22 Dec 2021 19:46:25 +0100 Subject: [PATCH 008/120] Remove usage/detection of NativeScript (#566) * Remove usage of NativeScript * npm prettier run * Removing type from Utils.global --- common/src/misc/utils.ts | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/common/src/misc/utils.ts b/common/src/misc/utils.ts index b39ada3b..a91ccd5a 100644 --- a/common/src/misc/utils.ts +++ b/common/src/misc/utils.ts @@ -7,7 +7,6 @@ const nodeURL = typeof window === "undefined" ? require("url") : null; export class Utils { static inited = false; - static isNativeScript = false; static isNode = false; static isBrowser = true; static isMobileBrowser = false; @@ -30,18 +29,13 @@ export class Utils { (process as any).release != null && (process as any).release.name === "node"; Utils.isBrowser = typeof window !== "undefined"; - Utils.isNativeScript = !Utils.isNode && !Utils.isBrowser; Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window); Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window); - Utils.global = Utils.isNativeScript - ? global - : Utils.isNode && !Utils.isBrowser - ? global - : window; + Utils.global = Utils.isNode && !Utils.isBrowser ? global : window; } static fromB64ToArray(str: string): Uint8Array { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return new Uint8Array(Buffer.from(str, "base64")); } else { const binaryString = window.atob(str); @@ -58,7 +52,7 @@ export class Utils { } static fromHexToArray(str: string): Uint8Array { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return new Uint8Array(Buffer.from(str, "hex")); } else { const bytes = new Uint8Array(str.length / 2); @@ -70,7 +64,7 @@ export class Utils { } static fromUtf8ToArray(str: string): Uint8Array { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return new Uint8Array(Buffer.from(str, "utf8")); } else { const strUtf8 = unescape(encodeURIComponent(str)); @@ -91,7 +85,7 @@ export class Utils { } static fromBufferToB64(buffer: ArrayBuffer): string { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return Buffer.from(buffer).toString("base64"); } else { let binary = ""; @@ -112,7 +106,7 @@ export class Utils { } static fromBufferToUtf8(buffer: ArrayBuffer): string { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return Buffer.from(buffer).toString("utf8"); } else { const bytes = new Uint8Array(buffer); @@ -127,7 +121,7 @@ export class Utils { // ref: https://stackoverflow.com/a/40031979/1090359 static fromBufferToHex(buffer: ArrayBuffer): string { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return Buffer.from(buffer).toString("hex"); } else { const bytes = new Uint8Array(buffer); @@ -160,7 +154,7 @@ export class Utils { } static fromUtf8ToB64(utfStr: string): string { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return Buffer.from(utfStr, "utf8").toString("base64"); } else { return decodeURIComponent(escape(window.btoa(utfStr))); @@ -172,7 +166,7 @@ export class Utils { } static fromB64ToUtf8(b64Str: string): string { - if (Utils.isNode || Utils.isNativeScript) { + if (Utils.isNode) { return Buffer.from(b64Str, "base64").toString("utf8"); } else { return decodeURIComponent(escape(window.atob(b64Str))); @@ -387,7 +381,7 @@ export class Utils { private static getUrlObject(uriString: string): URL { try { if (nodeURL != null) { - return nodeURL.URL ? new nodeURL.URL(uriString) : nodeURL.parse(uriString); + return new nodeURL.URL(uriString); } else if (typeof URL === "function") { return new URL(uriString); } else if (window != null) { From e4cd0af2f9ae924f9b749fefe3695f7c69135bf6 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 31 Dec 2021 09:14:43 -0500 Subject: [PATCH 009/120] [bug] Add several state value defaults (#593) * [bug] Add several state value defaults * [refactor] Implement StateVersion as an enum * [refactor] Implement StateVersion enum over magic number --- common/src/enums/stateVersion.ts | 5 +++++ common/src/models/domain/account.ts | 2 +- common/src/models/domain/globalState.ts | 8 +++++--- common/src/services/state.service.ts | 1 - common/src/services/stateMigration.service.ts | 19 +++++++++---------- 5 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 common/src/enums/stateVersion.ts diff --git a/common/src/enums/stateVersion.ts b/common/src/enums/stateVersion.ts new file mode 100644 index 00000000..aa45edbb --- /dev/null +++ b/common/src/enums/stateVersion.ts @@ -0,0 +1,5 @@ +export enum StateVersion { + One = 1, // Original flat key/value pair store + Two = 2, // Move to a typed State object + Latest = Two, +} diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index cab08d1a..6a998138 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -139,7 +139,7 @@ export class AccountSettings { protectedPin?: string; settings?: any; // TODO: Merge whatever is going on here into the AccountSettings model properly vaultTimeout?: number; - vaultTimeoutAction?: string; + vaultTimeoutAction?: string = "lock"; } export class AccountTokens { diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 0fdce648..0dcf4939 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -1,15 +1,17 @@ +import { StateVersion } from "../../enums/stateVersion"; + export class GlobalState { enableAlwaysOnTop?: boolean; installedVersion?: string; lastActive?: number; - locale?: string; + locale?: string = "en"; openAtLogin?: boolean; organizationInvitation?: any; ssoCodeVerifier?: string; ssoOrganizationIdentifier?: string; ssoState?: string; rememberedEmail?: string; - theme?: string; + theme?: string = "light"; window?: Map = new Map(); twoFactorToken?: string; disableFavicon?: boolean; @@ -23,7 +25,7 @@ export class GlobalState { biometricText?: string; noAutoPromptBiometrics?: boolean; noAutoPromptBiometricsText?: string; - stateVersion: number; + stateVersion: StateVersion = StateVersion.Latest; environmentUrls?: any = { server: "bitwarden.com", }; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 5de1ccb1..85280996 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -74,7 +74,6 @@ export class StateService ); this.state = diskState; await this.pruneInMemoryAccounts(); - await this.saveStateToStorage(this.state, await this.defaultOnDiskMemoryOptions()); await this.pushAccounts(); } } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index afe756e4..7f36906e 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -2,6 +2,7 @@ import { StorageService } from "../abstractions/storage.service"; import { Account } from "../models/domain/account"; import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; +import { GlobalState } from "../models/domain/globalState"; import { State } from "../models/domain/state"; import { StorageOptions } from "../models/domain/storageOptions"; @@ -16,6 +17,7 @@ import { SendData } from "../models/data/sendData"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; +import { StateVersion } from "../enums/stateVersion"; // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. @@ -111,8 +113,6 @@ const v1KeyPrefixes = { }; export class StateMigrationService { - readonly latestVersion: number = 2; - constructor( protected storageService: StorageService, protected secureStorageService: StorageService @@ -124,15 +124,16 @@ export class StateMigrationService { htmlStorageLocation: HtmlStorageLocation.Local, }) )?.globals?.stateVersion; - return currentStateVersion == null || currentStateVersion < this.latestVersion; + return currentStateVersion == null || currentStateVersion < StateVersion.Latest; } async migrate(): Promise { let currentStateVersion = - (await this.storageService.get>("state"))?.globals?.stateVersion ?? 1; - while (currentStateVersion < this.latestVersion) { + (await this.storageService.get>("state"))?.globals?.stateVersion ?? + StateVersion.One; + while (currentStateVersion < StateVersion.Latest) { switch (currentStateVersion) { - case 1: + case StateVersion.One: await this.migrateStateFrom1To2(); break; } @@ -147,9 +148,7 @@ export class StateMigrationService { const initialState: State = userId == null ? { - globals: { - stateVersion: 2, - }, + globals: new GlobalState(), accounts: {}, activeUserId: null, } @@ -209,7 +208,7 @@ export class StateMigrationService { v1Keys.rememberedEmail, options ), - stateVersion: 2, + stateVersion: StateVersion.Two, theme: await this.storageService.get(v1Keys.theme, options), twoFactorToken: await this.storageService.get( v1KeyPrefixes.twoFactorToken + userId, From cc989e407138405e12a461edec113e63adcbcaf1 Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Fri, 31 Dec 2021 10:05:23 -0500 Subject: [PATCH 010/120] Rename all occurances of fb to formBuilder (#595) --- angular/src/components/export.component.ts | 4 ++-- .../components/settings/vault-timeout-input.component.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/angular/src/components/export.component.ts b/angular/src/components/export.component.ts index f3aba8e2..17a751fc 100644 --- a/angular/src/components/export.component.ts +++ b/angular/src/components/export.component.ts @@ -20,7 +20,7 @@ export class ExportComponent implements OnInit { formPromise: Promise; disabledByPolicy: boolean = false; - exportForm = this.fb.group({ + exportForm = this.formBuilder.group({ format: ["json"], secret: [""], }); @@ -41,7 +41,7 @@ export class ExportComponent implements OnInit { protected win: Window, private logService: LogService, private userVerificationService: UserVerificationService, - private fb: FormBuilder + private formBuilder: FormBuilder ) {} async ngOnInit() { diff --git a/angular/src/components/settings/vault-timeout-input.component.ts b/angular/src/components/settings/vault-timeout-input.component.ts index 95180f88..2f63f97f 100644 --- a/angular/src/components/settings/vault-timeout-input.component.ts +++ b/angular/src/components/settings/vault-timeout-input.component.ts @@ -21,9 +21,9 @@ export class VaultTimeoutInputComponent implements ControlValueAccessor, Validat static CUSTOM_VALUE = -100; - form = this.fb.group({ + form = this.formBuilder.group({ vaultTimeout: [null], - custom: this.fb.group({ + custom: this.formBuilder.group({ hours: [null], minutes: [null], }), @@ -38,7 +38,7 @@ export class VaultTimeoutInputComponent implements ControlValueAccessor, Validat private validatorChange: () => void; constructor( - private fb: FormBuilder, + private formBuilder: FormBuilder, private policyService: PolicyService, private i18nService: I18nService ) {} From c27fc39411c63f7eaa411aa504135d1f3f6746ee Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Thu, 6 Jan 2022 11:03:44 -0500 Subject: [PATCH 011/120] Use correct api Keys (#599) --- common/src/services/stateMigration.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 7f36906e..864a243a 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -31,8 +31,8 @@ const v1Keys = { biometricText: "biometricText", biometricUnlock: "biometric", clearClipboard: "clearClipboardKey", - clientId: "clientId", - clientSecret: "clientSecret", + clientId: "apikey_clientId", + clientSecret: "apikey_clientSecret", collapsedGroupings: "collapsedGroupings", convertAccountToKeyConnector: "convertAccountToKeyConnector", defaultUriMatch: "defaultUriMatch", From c6f20f8142d3ef56fdf417589fe02bdc7cadbcca Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Fri, 7 Jan 2022 14:23:42 +0100 Subject: [PATCH 012/120] Fix prettier (#598) * Add .github/workflows to .prettierignore * Add all filestypes to prettier and ignore via .prettierignore * Add --ignore-unknown to prettier for lint-staged --- .prettierignore | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.prettierignore b/.prettierignore index 1521c8b7..2d0a1ff5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,5 @@ +# Build directories dist + +# Github Workflows +.github/workflows diff --git a/package.json b/package.json index 8363ee4c..ce1d2a8f 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "npm": "~8" }, "lint-staged": { - "*.{js,ts,css,scss,md}": "prettier --write" + "*": "prettier --ignore-unknown --write" } } From 57d60bdfa6355571f4e2e738ce0a56a48bd19414 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 7 Jan 2022 09:30:54 -0500 Subject: [PATCH 013/120] Misc Account Switching Fixes & Refactors (#600) * [refactor] Restructure EnvironmentUrls in state * Patch up (add missing fields) and more extensivly use the EnvironmentUrls class instead of passing around an any * Add environmentUrls to the AccountSettings model in addition to GlobalState for use in both scopes * Move EnvironmentUrls initialization to the model level and out of StateSerice * Adjust the StateMigrationService to account for these changes * [refactor] Improve order of operations for LockGuardService We currently jump through a bunch of hoops to verify users can access the Lock page, like checking authentication first. If a user is not authenticated, they are not locked, so we can improve performance for the happy path of this serivice by checking isLocked first and using isAuthenticated to deviate from the normal flow if needed. * [bug] Subscribe to State.accounts in EnvironmentService and set urls accordingly The EnvironmentService has no context for account changes currently and does not update actively used urls based on active account. This commit addresses this issue by subscribing to State.accounts and resetting the service's urls on account change. * [bug] Clear AccessToken from State on clean In order for logout flows to function as expected we need to deauthenticate users when cleaning up state before checking for the next active user Otherwise the service will continue to think the user being logged out is active * [refactor] Stop pushing accounts when modifying disk state There is no reason to push new accounts to subscribers when updating disk state. Subscribers recieve a copy of in memory state, so changes to disk will not be refelected and have to be fetched seperatly from the service. Pushing when saving disk state is just creating an unecassary performance burden. * [refactor] Default to in memory active user if availible, even when accessing disk state Sometimes we need to pull activeUserId from storage to access a bit of data, like on initial boot, but most of the time this isn't necassary. Since we pull this userId a lot, checking disk each time is a performance burden. Defaulting to the in memory user ID if avaible helps alleviate this. * [style] Ran prettier * [style] Change a let to a const --- angular/src/services/lock-guard.service.ts | 16 ++++---- common/src/models/domain/account.ts | 2 + common/src/models/domain/environmentUrls.ts | 4 ++ common/src/models/domain/globalState.ts | 5 +-- common/src/services/environment.service.ts | 6 ++- common/src/services/state.service.ts | 39 +++++++++---------- common/src/services/stateMigration.service.ts | 10 ++++- 7 files changed, 49 insertions(+), 33 deletions(-) diff --git a/angular/src/services/lock-guard.service.ts b/angular/src/services/lock-guard.service.ts index b0598c34..517e4406 100644 --- a/angular/src/services/lock-guard.service.ts +++ b/angular/src/services/lock-guard.service.ts @@ -7,6 +7,7 @@ import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.serv @Injectable() export class LockGuardService implements CanActivate { protected homepage = "vault"; + protected loginpage = ""; constructor( private vaultTimeoutService: VaultTimeoutService, private router: Router, @@ -14,16 +15,15 @@ export class LockGuardService implements CanActivate { ) {} async canActivate() { - if (!(await this.stateService.getIsAuthenticated())) { - this.router.navigate(["login"]); - return false; + if (await this.vaultTimeoutService.isLocked()) { + return true; } - if (!(await this.vaultTimeoutService.isLocked())) { - this.router.navigate([this.homepage]); - return false; - } + const redirectUrl = (await this.stateService.getIsAuthenticated()) + ? [this.homepage] + : [this.loginpage]; - return true; + this.router.navigate(redirectUrl); + return false; } } diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 6a998138..565b86e6 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -21,6 +21,7 @@ import { FolderData } from "../data/folderData"; import { PolicyData } from "../data/policyData"; import { ProviderData } from "../data/providerData"; import { SendData } from "../data/sendData"; +import { EnvironmentUrls } from "./environmentUrls"; export class EncryptionPair { encrypted?: TEncrypted; @@ -130,6 +131,7 @@ export class AccountSettings { enableMinimizeToTray?: boolean; enableStartToTray?: boolean; enableTray?: boolean; + environmentUrls: EnvironmentUrls = new EnvironmentUrls(); equivalentDomains?: any; minimizeOnCopyToClipboard?: boolean; neverDomains?: { [id: string]: any }; diff --git a/common/src/models/domain/environmentUrls.ts b/common/src/models/domain/environmentUrls.ts index 6426fef4..c8026592 100644 --- a/common/src/models/domain/environmentUrls.ts +++ b/common/src/models/domain/environmentUrls.ts @@ -2,5 +2,9 @@ export class EnvironmentUrls { base: string; api: string; identity: string; + icons: string; + notifications: string; events: string; + webVault: string; + keyConnector: string; } diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 0dcf4939..24dc54ae 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -1,4 +1,5 @@ import { StateVersion } from "../../enums/stateVersion"; +import { EnvironmentUrls } from "./environmentUrls"; export class GlobalState { enableAlwaysOnTop?: boolean; @@ -26,7 +27,5 @@ export class GlobalState { noAutoPromptBiometrics?: boolean; noAutoPromptBiometricsText?: string; stateVersion: StateVersion = StateVersion.Latest; - environmentUrls?: any = { - server: "bitwarden.com", - }; + environmentUrls: EnvironmentUrls = new EnvironmentUrls(); } diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index cf435d87..cf59d389 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -21,7 +21,11 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { private eventsUrl: string; private keyConnectorUrl: string; - constructor(private stateService: StateService) {} + constructor(private stateService: StateService) { + this.stateService.activeAccount.subscribe(async (_userId) => { + await this.setUrlsFromStorage(); + }); + } hasBaseUrl() { return this.baseUrl != null; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 85280996..aefdf665 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -41,6 +41,7 @@ import { SendData } from "../models/data/sendData"; import { BehaviorSubject } from "rxjs"; import { StateMigrationService } from "../abstractions/stateMigration.service"; +import { EnvironmentUrls } from "../models/domain/environmentUrls"; export class StateService implements StateServiceAbstraction @@ -79,6 +80,7 @@ export class StateService } async addAccount(account: TAccount) { + await this.setAccountEnvironmentUrls(account); this.state.accounts[account.profile.userId] = account; await this.scaffoldNewAccountStorage(account); await this.setActiveUser(account.profile.userId); @@ -99,6 +101,7 @@ export class StateService async clean(options?: StorageOptions): Promise { // Find and set the next active user if any exists + await this.setAccessToken(null, { userId: options?.userId }); if (options?.userId == null || options.userId === (await this.getUserId())) { for (const userId in this.state.accounts) { if (userId == null) { @@ -1359,24 +1362,16 @@ export class StateService } async getEnvironmentUrls(options?: StorageOptions): Promise { - return ( - (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.environmentUrls ?? { - base: null, - api: null, - identity: null, - icons: null, - notifications: null, - events: null, - webVault: null, - keyConnector: null, - // TODO: this is a bug and we should use base instead for the server detail in the account switcher, otherwise self hosted urls will not show correctly - server: "bitwarden.com", - } - ); + options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); + if (this.state.activeUserId == null) { + return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls(); + } + return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls(); } async setEnvironmentUrls(value: any, options?: StorageOptions): Promise { + // Global values are set on each change and the current global settings are passed to any newly authed accounts. + // This is to allow setting environement values before an account is active, while still allowing individual accounts to have their own environments. const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); @@ -2189,7 +2184,6 @@ export class StateService state.accounts[account.profile.userId] = account; await storageLocation.save("state", state, options); - await this.pushAccounts(); } protected async saveAccountToMemory(account: TAccount): Promise { @@ -2283,7 +2277,7 @@ export class StateService return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Session, - userId: await this.getActiveUserIdFromStorage(), + userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), useSecureStorage: false, }; } @@ -2292,7 +2286,7 @@ export class StateService return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Local, - userId: await this.getActiveUserIdFromStorage(), + userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), useSecureStorage: false, }; } @@ -2301,7 +2295,7 @@ export class StateService return { storageLocation: StorageLocation.Disk, htmlStorageLocation: HtmlStorageLocation.Memory, - userId: await this.getUserId(), + userId: this.state.activeUserId ?? (await this.getUserId()), useSecureStorage: false, }; } @@ -2310,7 +2304,7 @@ export class StateService return { storageLocation: StorageLocation.Disk, useSecureStorage: true, - userId: await this.getActiveUserIdFromStorage(), + userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()), }; } @@ -2381,4 +2375,9 @@ export class StateService account.tokens = new AccountTokens(); return account; } + + protected async setAccountEnvironmentUrls(account: TAccount): Promise { + account.settings.environmentUrls = await this.getEnvironmentUrls(); + return account; + } } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 864a243a..5c5ee37f 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -18,6 +18,7 @@ import { SendData } from "../models/data/sendData"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StateVersion } from "../enums/stateVersion"; +import { EnvironmentUrls } from "../models/domain/environmentUrls"; // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. @@ -176,7 +177,9 @@ export class StateMigrationService { v1Keys.enableBiometric, options ), - environmentUrls: await this.storageService.get(v1Keys.environmentUrls, options), + environmentUrls: + (await this.storageService.get(v1Keys.environmentUrls, options)) ?? + new EnvironmentUrls(), installedVersion: await this.storageService.get( v1Keys.installedVersion, options @@ -442,6 +445,11 @@ export class StateMigrationService { options ), enableTray: await this.storageService.get(v1Keys.enableTray, options), + environmentUrls: + (await this.storageService.get( + v1Keys.environmentUrls, + options + )) ?? new EnvironmentUrls(), equivalentDomains: await this.storageService.get( v1Keys.equivalentDomains, options From def3c47a1e27a48466830e4e688efa40aae94aba Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Mon, 10 Jan 2022 16:38:10 +0100 Subject: [PATCH 014/120] Disable spell checking (#601) --- electron/src/window.main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/electron/src/window.main.ts b/electron/src/window.main.ts index 97f9648b..e3355863 100644 --- a/electron/src/window.main.ts +++ b/electron/src/window.main.ts @@ -120,6 +120,7 @@ export class WindowMain { backgroundColor: "#fff", alwaysOnTop: this.enableAlwaysOnTop, webPreferences: { + spellcheck: false, nodeIntegration: true, backgroundThrottling: false, contextIsolation: false, From 4074c2a45f26ebb589ec70a2cc46a069ac09fd4c Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 10 Jan 2022 12:25:38 -0500 Subject: [PATCH 015/120] [Bug] [Account Switching] Ensure EnvironmentUrls Pull From The Correction Location On Account Add (#602) * [bug] Fully initilize environmentUrls default value We want the full environmentUrls object to be saved to storage with null values as an indicator of using BW cloud. Currently the initilization behavior creates an empty object instead. Setting property values returns the correct behavior. * [bug] Return the correct environmentUrls when scaffloging a new account To allow for setting environmentUrls before an account is created we save that value as a global setting and then apply it to any newly authed accounts. There is a bug that will instead save the urls used by the previous logged in account, making account switching with multiple servers cause errors. This commit resolves this by specifically getting environementUrls from global state when creating a new account --- common/src/abstractions/state.service.ts | 5 +++-- common/src/models/domain/environmentUrls.ts | 16 ++++++++-------- common/src/services/state.service.ts | 15 ++++++++++----- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index 5dd3da2e..693feb7e 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -14,6 +14,7 @@ import { SendData } from "../models/data/sendData"; import { Account } from "../models/domain/account"; import { EncString } from "../models/domain/encString"; +import { EnvironmentUrls } from "../models/domain/environmentUrls"; import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; import { Policy } from "../models/domain/policy"; import { StorageOptions } from "../models/domain/storageOptions"; @@ -213,8 +214,8 @@ export abstract class StateService { setEntityId: (value: string, options?: StorageOptions) => Promise; getEntityType: (options?: StorageOptions) => Promise; setEntityType: (value: string, options?: StorageOptions) => Promise; - getEnvironmentUrls: (options?: StorageOptions) => Promise; - setEnvironmentUrls: (value: any, options?: StorageOptions) => Promise; + getEnvironmentUrls: (options?: StorageOptions) => Promise; + setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise; getEquivalentDomains: (options?: StorageOptions) => Promise; setEquivalentDomains: (value: string, options?: StorageOptions) => Promise; getEventCollection: (options?: StorageOptions) => Promise; diff --git a/common/src/models/domain/environmentUrls.ts b/common/src/models/domain/environmentUrls.ts index c8026592..d4fd173c 100644 --- a/common/src/models/domain/environmentUrls.ts +++ b/common/src/models/domain/environmentUrls.ts @@ -1,10 +1,10 @@ export class EnvironmentUrls { - base: string; - api: string; - identity: string; - icons: string; - notifications: string; - events: string; - webVault: string; - keyConnector: string; + base: string = null; + api: string = null; + identity: string = null; + icons: string = null; + notifications: string = null; + events: string = null; + webVault: string = null; + keyConnector: string = null; } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index aefdf665..0f6b1c9e 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1361,15 +1361,15 @@ export class StateService ); } - async getEnvironmentUrls(options?: StorageOptions): Promise { - options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); + async getEnvironmentUrls(options?: StorageOptions): Promise { if (this.state.activeUserId == null) { - return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls(); + return await this.getGlobalEnvironmentUrls(options); } + options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls(); } - async setEnvironmentUrls(value: any, options?: StorageOptions): Promise { + async setEnvironmentUrls(value: EnvironmentUrls, options?: StorageOptions): Promise { // Global values are set on each change and the current global settings are passed to any newly authed accounts. // This is to allow setting environement values before an account is active, while still allowing individual accounts to have their own environments. const globals = await this.getGlobals( @@ -2377,7 +2377,12 @@ export class StateService } protected async setAccountEnvironmentUrls(account: TAccount): Promise { - account.settings.environmentUrls = await this.getEnvironmentUrls(); + account.settings.environmentUrls = await this.getGlobalEnvironmentUrls(); return account; } + + protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise { + options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); + return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls(); + } } From 2341b1907ac601f70842e6a405cd641bf2706c06 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 11 Jan 2022 13:22:52 +1000 Subject: [PATCH 016/120] Fix "no amr found" error in bwdc cli (#589) * Fix amr error when authing with org api key * Fix linting * Return null instead of error if no amr * Return false instead of null --- common/src/services/token.service.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index aa4cab32..bad5ce62 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -209,11 +209,8 @@ export class TokenService implements TokenServiceAbstraction { async getIsExternal(): Promise { const decoded = await this.decodeToken(); - if (!Array.isArray(decoded.amr)) { - throw new Error("No amr found"); - } - return decoded.amr.includes("external"); + return Array.isArray(decoded.amr) && decoded.amr.includes("external"); } private async skipTokenStorage(): Promise { From 172392ff3b3d8e68795549deef5433c0d1329c9c Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Wed, 12 Jan 2022 09:11:25 -0500 Subject: [PATCH 017/120] [Account Switching] Fix options dropdowns being empty (#603) * Fix dropdowns initially being empty * run prettier * Remove default nulls for locale and theme --- common/src/services/state.service.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 0f6b1c9e..35dfca3f 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -355,8 +355,12 @@ export class StateService async getClearClipboard(options?: StorageOptions): Promise { return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) - )?.settings?.clearClipboard; + ( + await this.getAccount( + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) + ) + )?.settings?.clearClipboard ?? null + ); } async setClearClipboard(value: number, options?: StorageOptions): Promise { From c7ccb997bdc10f65d6c5edc2d610473e9307fb7f Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Wed, 12 Jan 2022 10:15:39 -0500 Subject: [PATCH 018/120] [bug] Use the correct login url in lock guard (#606) --- angular/src/services/lock-guard.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular/src/services/lock-guard.service.ts b/angular/src/services/lock-guard.service.ts index 517e4406..992c6e5d 100644 --- a/angular/src/services/lock-guard.service.ts +++ b/angular/src/services/lock-guard.service.ts @@ -7,7 +7,7 @@ import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.serv @Injectable() export class LockGuardService implements CanActivate { protected homepage = "vault"; - protected loginpage = ""; + protected loginpage = "login"; constructor( private vaultTimeoutService: VaultTimeoutService, private router: Router, From 957e010036c89cfbcb0b526eea99c4b9e292b1f8 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Wed, 12 Jan 2022 11:32:45 -0500 Subject: [PATCH 019/120] [bug] Ensure neverLock vaults can be manually locked (#607) The client side storage restructuring work incorrectly checks if a vault has ever been unlocked to determine neverLock scenerios, but production does the opposite. This creates an inability to never manually lock neverLock vaults. This commit sets that condition back to the way it was. --- common/src/services/vaultTimeout.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index cd810e8c..544e6bc2 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -53,7 +53,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { async isLocked(userId?: string): Promise { const neverLock = (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) && - (await this.stateService.getEverBeenUnlocked({ userId: userId })); + !(await this.stateService.getEverBeenUnlocked({ userId: userId })); if (neverLock) { // TODO: This also _sets_ the key so when we check memory in the next line it finds a key. // We should refactor here. From ddcfe2336740549c97523d9d75e602f905f0431c Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 13 Jan 2022 06:18:54 +1000 Subject: [PATCH 020/120] Make lowdbStorageService wait until initialised (#605) * Make lowdbStorageService wait until initialised * Fix prettier --- node/src/services/lowdbStorage.service.ts | 24 ++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/node/src/services/lowdbStorage.service.ts b/node/src/services/lowdbStorage.service.ts index 1dcaaf1a..05396115 100644 --- a/node/src/services/lowdbStorage.service.ts +++ b/node/src/services/lowdbStorage.service.ts @@ -7,12 +7,14 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { StorageService } from "jslib-common/abstractions/storage.service"; import { NodeUtils } from "jslib-common/misc/nodeUtils"; +import { sequentialize } from "jslib-common/misc/sequentialize"; import { Utils } from "jslib-common/misc/utils"; export class LowdbStorageService implements StorageService { protected dataFilePath: string; private db: lowdb.LowdbSync; private defaults: any; + private ready = false; constructor( protected logService: LogService, @@ -23,7 +25,12 @@ export class LowdbStorageService implements StorageService { this.defaults = defaults; } + @sequentialize(() => "lowdbStorageInit") async init() { + if (this.ready) { + return; + } + this.logService.info("Initializing lowdb storage service."); let adapter: lowdb.AdapterSync; if (Utils.isNode && this.dir != null) { @@ -81,9 +88,12 @@ export class LowdbStorageService implements StorageService { this.logService.info("Successfully wrote defaults to db."); }); } + + this.ready = true; } - get(key: string): Promise { + async get(key: string): Promise { + await this.waitForReady(); return this.lockDbFile(() => { this.readForNoCache(); const val = this.db.get(key).value(); @@ -99,7 +109,8 @@ export class LowdbStorageService implements StorageService { return this.get(key).then((v) => v != null); } - save(key: string, obj: any): Promise { + async save(key: string, obj: any): Promise { + await this.waitForReady(); return this.lockDbFile(() => { this.readForNoCache(); this.db.set(key, obj).write(); @@ -108,7 +119,8 @@ export class LowdbStorageService implements StorageService { }); } - remove(key: string): Promise { + async remove(key: string): Promise { + await this.waitForReady(); return this.lockDbFile(() => { this.readForNoCache(); this.db.unset(key).write(); @@ -127,4 +139,10 @@ export class LowdbStorageService implements StorageService { this.db.read(); } } + + private async waitForReady() { + if (!this.ready) { + await this.init(); + } + } } From 12011bf4da5a5f5272dfdec9bff0fc28fa512836 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Mon, 17 Jan 2022 13:21:20 +0100 Subject: [PATCH 021/120] Add a shared tsconfig file (#609) --- angular/tsconfig.json | 14 +------------- common/tsconfig.json | 17 +---------------- electron/tsconfig.json | 14 +------------- node/tsconfig.json | 15 +-------------- shared/tsconfig.json | 15 +++++++++++++++ 5 files changed, 19 insertions(+), 56 deletions(-) create mode 100644 shared/tsconfig.json diff --git a/angular/tsconfig.json b/angular/tsconfig.json index 36dffb93..07c6a21d 100644 --- a/angular/tsconfig.json +++ b/angular/tsconfig.json @@ -1,18 +1,6 @@ { + "extends": "../shared/tsconfig", "compilerOptions": { - "pretty": true, - "moduleResolution": "node", - "noImplicitAny": true, - "target": "ES6", - "module": "commonjs", - "lib": ["es5", "es6", "es7", "dom"], - "sourceMap": true, - "declaration": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declarationDir": "dist/types", - "outDir": "dist", "paths": { "jslib-common/*": ["../common/src/*"] } diff --git a/common/tsconfig.json b/common/tsconfig.json index 3366a0dd..2fbb1d8d 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -1,20 +1,5 @@ { - "compilerOptions": { - "pretty": true, - "moduleResolution": "node", - "noImplicitAny": true, - "target": "ES6", - "module": "commonjs", - "lib": ["es5", "es6", "es7", "dom"], - "sourceMap": true, - "declaration": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declarationDir": "dist/types", - "outDir": "dist", - "typeRoots": ["node_modules/@types"] - }, + "extends": "../shared/tsconfig", "include": ["src", "spec"], "exclude": ["node_modules", "dist"] } diff --git a/electron/tsconfig.json b/electron/tsconfig.json index 36dffb93..07c6a21d 100644 --- a/electron/tsconfig.json +++ b/electron/tsconfig.json @@ -1,18 +1,6 @@ { + "extends": "../shared/tsconfig", "compilerOptions": { - "pretty": true, - "moduleResolution": "node", - "noImplicitAny": true, - "target": "ES6", - "module": "commonjs", - "lib": ["es5", "es6", "es7", "dom"], - "sourceMap": true, - "declaration": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declarationDir": "dist/types", - "outDir": "dist", "paths": { "jslib-common/*": ["../common/src/*"] } diff --git a/node/tsconfig.json b/node/tsconfig.json index 9836d519..07c6a21d 100644 --- a/node/tsconfig.json +++ b/node/tsconfig.json @@ -1,19 +1,6 @@ { + "extends": "../shared/tsconfig", "compilerOptions": { - "pretty": true, - "moduleResolution": "node", - "noImplicitAny": true, - "target": "ES6", - "module": "commonjs", - "lib": ["es5", "es6", "es7", "dom"], - "sourceMap": true, - "declaration": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declarationDir": "dist/types", - "outDir": "dist", - "types": [], "paths": { "jslib-common/*": ["../common/src/*"] } diff --git a/shared/tsconfig.json b/shared/tsconfig.json new file mode 100644 index 00000000..3a70f6b9 --- /dev/null +++ b/shared/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "pretty": true, + "moduleResolution": "node", + "noImplicitAny": true, + "target": "ES6", + "module": "commonjs", + "lib": ["es5", "es6", "es7", "dom"], + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "outDir": "dist" + } +} From 8460629de482498d553080b253e7248367a03196 Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Mon, 17 Jan 2022 17:27:14 +0100 Subject: [PATCH 022/120] Bump electron from 16.0.2 to 16.0.7 (#613) --- electron/package-lock.json | 14 +++++++------- electron/package.json | 2 +- package-lock.json | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index 1c0ff8cf..9ba8c4e1 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@bitwarden/jslib-common": "file:../common", "@nodert-win10-rs4/windows.security.credentials.ui": "^0.4.4", - "electron": "16.0.2", + "electron": "16.0.7", "electron-log": "4.4.1", "electron-store": "8.0.1", "electron-updater": "4.6.1", @@ -546,9 +546,9 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "node_modules/electron": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.2.tgz", - "integrity": "sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", + "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -2276,9 +2276,9 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "electron": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.2.tgz", - "integrity": "sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", + "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", diff --git a/electron/package.json b/electron/package.json index 977261fe..88bedfb9 100644 --- a/electron/package.json +++ b/electron/package.json @@ -27,7 +27,7 @@ "dependencies": { "@bitwarden/jslib-common": "file:../common", "@nodert-win10-rs4/windows.security.credentials.ui": "^0.4.4", - "electron": "16.0.2", + "electron": "16.0.7", "electron-log": "4.4.1", "electron-store": "8.0.1", "electron-updater": "4.6.1", diff --git a/package-lock.json b/package-lock.json index 617e30de..b0416768 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,7 +113,7 @@ "dependencies": { "@bitwarden/jslib-common": "file:../common", "@nodert-win10-rs4/windows.security.credentials.ui": "^0.4.4", - "electron": "16.0.2", + "electron": "16.0.7", "electron-log": "4.4.1", "electron-store": "8.0.1", "electron-updater": "4.6.1", @@ -3034,9 +3034,9 @@ "dev": true }, "node_modules/electron": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.2.tgz", - "integrity": "sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", + "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", "hasInstallScript": true, "dependencies": { "@electron/get": "^1.13.0", @@ -10670,7 +10670,7 @@ "@bitwarden/jslib-common": "file:../common", "@nodert-win10-rs4/windows.security.credentials.ui": "^0.4.4", "@types/node": "^16.11.12", - "electron": "16.0.2", + "electron": "16.0.7", "electron-log": "4.4.1", "electron-store": "8.0.1", "electron-updater": "4.6.1", @@ -12855,9 +12855,9 @@ "dev": true }, "electron": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.2.tgz", - "integrity": "sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.7.tgz", + "integrity": "sha512-/IMwpBf2svhA1X/7Q58RV+Nn0fvUJsHniG4TizaO7q4iKFYSQ6hBvsLz+cylcZ8hRMKmVy5G1XaMNJID2ah23w==", "requires": { "@electron/get": "^1.13.0", "@types/node": "^14.6.2", From cc285e5ea729795812d8f1f66f622b67c11efb4a Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 18 Jan 2022 13:44:39 +1000 Subject: [PATCH 023/120] Always migrate envUrls (#614) --- common/src/services/stateMigration.service.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 5c5ee37f..9d422e70 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -177,9 +177,7 @@ export class StateMigrationService { v1Keys.enableBiometric, options ), - environmentUrls: - (await this.storageService.get(v1Keys.environmentUrls, options)) ?? - new EnvironmentUrls(), + environmentUrls: null, installedVersion: await this.storageService.get( v1Keys.installedVersion, options @@ -489,6 +487,10 @@ export class StateMigrationService { }, }; + initialState.globals.environmentUrls = + (await this.storageService.get(v1Keys.environmentUrls, options)) ?? + new EnvironmentUrls(); + await this.storageService.save("state", initialState, options); if (await this.secureStorageService.has(v1Keys.key, { keySuffix: "biometric" })) { From ccd715d7b84545bc1c8f41faf3120d337ce714c3 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Wed, 19 Jan 2022 10:51:10 -0500 Subject: [PATCH 024/120] [Bug] [Account Switching] Improve State Management Performance (#611) * [bug] Improve state management performance Large vaults see a clear degrade in performance using the state service, especially when multiple vaults are authed and unlocked at the same time. Some changes made to address this: 1. Clearing in memory decrypted data for non active accounts. This really should have been something we were doing anyway, but letting go of that memory burden has a noticable performance boost. 2. Not loading a bunch of unecsassary data from disk accounts into memory on application startup. This was being done to initilize in memory accounts, but brought a lot of extra baggage with it like storing encrypted data in memory, even though it is never referenced that way. 3. Breaking the on disk state object up into seperate keys for accounts instead of storing everything together under a "state" key. This ensures there is less information fetched from disk each time we call for an account. There were some restructuring changes needed to facilitate these items: 1. We need to be able to construct an account in the StateService, but typescript doesn't allow for new() constraints on generics so a factory needs to be created and passed into the StateService for this to work. 2. Since we can't reference an all-knowing "accounts" object for on disk state anymore we have to maintain a list of authenticated accounts, and this has been added. 3. The StateMigration service needed to be updated to break up the accounts object, so current dev and QA state will be broken and need to be reset. Some other general refactorings that were helpful gettings this working: 1. Added a constant for keys to the StateService and StateMigrationService. 2. Bundling everything needed to deauthenticate a user into a dedicated method. 3. Bundling all the disk storage clear methods (that should be refactored later into client specific state services) into one helper method. 4. Bundling everything needed to dynamically select a new active user into a dedicated method. * [bug] Set environmentUrls appropriatly on account add * [bug] Stop tracking activity without an active user * [bug] Remove lastActive from globalState and globalState migration * [style] Ran prettier --- angular/src/services/jslib-services.module.ts | 16 +- common/src/models/domain/account.ts | 12 + common/src/models/domain/globalState.ts | 1 - common/src/models/domain/state.ts | 1 + common/src/services/state.service.ts | 330 ++++++++++-------- common/src/services/stateMigration.service.ts | 39 ++- 6 files changed, 239 insertions(+), 160 deletions(-) diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 8523818a..0133c802 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -76,6 +76,8 @@ import { PasswordRepromptService } from "./passwordReprompt.service"; import { UnauthGuardService } from "./unauth-guard.service"; import { ValidationService } from "./validation.service"; +import { Account, AccountFactory } from "jslib-common/models/domain/account"; + @NgModule({ declarations: [], providers: [ @@ -325,7 +327,19 @@ import { ValidationService } from "./validation.service"; }, { provide: StateServiceAbstraction, - useClass: StateService, + useFactory: ( + storageService: StorageServiceAbstraction, + secureStorageService: StorageServiceAbstraction, + logService: LogService, + stateMigrationService: StateMigrationServiceAbstraction + ) => + new StateService( + storageService, + secureStorageService, + logService, + stateMigrationService, + new AccountFactory(Account) + ), deps: [ StorageServiceAbstraction, "SECURE_STORAGE", diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 565b86e6..9af9f053 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -183,3 +183,15 @@ export class Account { }); } } + +export class AccountFactory { + private accountConstructor: new (init: Partial) => T; + + constructor(accountConstructor: new (init: Partial) => T) { + this.accountConstructor = accountConstructor; + } + + create(args: Partial) { + return new this.accountConstructor(args); + } +} diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 24dc54ae..f14d48d3 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -4,7 +4,6 @@ import { EnvironmentUrls } from "./environmentUrls"; export class GlobalState { enableAlwaysOnTop?: boolean; installedVersion?: string; - lastActive?: number; locale?: string = "en"; openAtLogin?: boolean; organizationInvitation?: any; diff --git a/common/src/models/domain/state.ts b/common/src/models/domain/state.ts index d9087264..16edca2a 100644 --- a/common/src/models/domain/state.ts +++ b/common/src/models/domain/state.ts @@ -5,4 +5,5 @@ export class State { accounts: { [userId: string]: TAccount } = {}; globals: GlobalState = new GlobalState(); activeUserId: string; + authenticatedAccounts: string[] = []; } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 35dfca3f..841b1902 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1,12 +1,6 @@ import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; -import { - Account, - AccountData, - AccountKeys, - AccountProfile, - AccountTokens, -} from "../models/domain/account"; +import { Account, AccountData, AccountFactory } from "../models/domain/account"; import { LogService } from "../abstractions/log.service"; import { StorageService } from "../abstractions/storage.service"; @@ -43,6 +37,18 @@ import { BehaviorSubject } from "rxjs"; import { StateMigrationService } from "../abstractions/stateMigration.service"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; +const keys = { + global: "global", + authenticatedAccounts: "authenticatedAccounts", + activeUserId: "activeUserId", +}; + +const partialKeys = { + autoKey: "_masterkey_auto", + biometricKey: "_masterkey_biometric", + masterKey: "_masterkey", +}; + export class StateService implements StateServiceAbstraction { @@ -55,32 +61,47 @@ export class StateService protected storageService: StorageService, protected secureStorageService: StorageService, protected logService: LogService, - protected stateMigrationService: StateMigrationService + protected stateMigrationService: StateMigrationService, + protected accountFactory: AccountFactory ) {} async init(): Promise { if (await this.stateMigrationService.needsMigration()) { await this.stateMigrationService.migrate(); } - if (this.state.activeUserId == null) { - await this.loadStateFromDisk(); - } + + await this.initAccountState(); } - async loadStateFromDisk() { - if ((await this.getActiveUserIdFromStorage()) != null) { - const diskState = await this.storageService.get>( - "state", - await this.defaultOnDiskOptions() - ); - this.state = diskState; - await this.pruneInMemoryAccounts(); - await this.pushAccounts(); + async initAccountState() { + this.state.authenticatedAccounts = + (await this.storageService.get(keys.authenticatedAccounts)) ?? []; + for (const i in this.state.authenticatedAccounts) { + if (i != null) { + await this.syncAccountFromDisk(this.state.authenticatedAccounts[i]); + } } + const storedActiveUser = await this.storageService.get(keys.activeUserId); + if (storedActiveUser != null) { + this.state.activeUserId = storedActiveUser; + } + await this.pushAccounts(); + this.activeAccount.next(this.state.activeUserId); + } + + async syncAccountFromDisk(userId: string) { + if (userId == null) { + return; + } + this.state.accounts[userId] = this.createAccount(); + const diskAccount = await this.getAccountFromDisk({ userId: userId }); + this.state.accounts[userId].profile = diskAccount.profile; } async addAccount(account: TAccount) { - await this.setAccountEnvironmentUrls(account); + account = await this.setAccountEnvironmentUrls(account); + this.state.authenticatedAccounts.push(account.profile.userId); + this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); this.state.accounts[account.profile.userId] = account; await this.scaffoldNewAccountStorage(account); await this.setActiveUser(account.profile.userId); @@ -88,36 +109,21 @@ export class StateService } async setActiveUser(userId: string): Promise { + this.clearDecryptedDataForActiveUser(); this.state.activeUserId = userId; - const storedState = await this.storageService.get>( - "state", - await this.defaultOnDiskOptions() - ); - storedState.activeUserId = userId; - await this.saveStateToStorage(storedState, await this.defaultOnDiskOptions()); - await this.pushAccounts(); + await this.storageService.save(keys.activeUserId, userId); this.activeAccount.next(this.state.activeUserId); + await this.pushAccounts(); } async clean(options?: StorageOptions): Promise { - // Find and set the next active user if any exists - await this.setAccessToken(null, { userId: options?.userId }); - if (options?.userId == null || options.userId === (await this.getUserId())) { - for (const userId in this.state.accounts) { - if (userId == null) { - continue; - } - if (await this.getIsAuthenticated({ userId: userId })) { - await this.setActiveUser(userId); - break; - } - await this.setActiveUser(null); - } + options = this.reconcileOptions(options, this.defaultInMemoryOptions); + await this.deAuthenticateAccount(options.userId); + if (options.userId === this.state.activeUserId) { + await this.dynamicallySetActiveUser(); } - await this.removeAccountFromSessionStorage(options?.userId); - await this.removeAccountFromLocalStorage(options?.userId); - await this.removeAccountFromSecureStorage(options?.userId); + await this.removeAccountFromDisk(options?.userId); this.removeAccountFromMemory(options?.userId); await this.pushAccounts(); } @@ -425,7 +431,7 @@ export class StateService if (options?.userId == null) { return null; } - return await this.secureStorageService.get(`${options.userId}_masterkey_auto`, options); + return await this.secureStorageService.get(`${options.userId}${partialKeys.autoKey}`, options); } async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise { @@ -436,7 +442,7 @@ export class StateService if (options?.userId == null) { return; } - await this.secureStorageService.save(`${options.userId}_masterkey_auto`, value, options); + await this.secureStorageService.save(`${options.userId}${partialKeys.autoKey}`, value, options); } async getCryptoMasterKeyB64(options?: StorageOptions): Promise { @@ -444,7 +450,10 @@ export class StateService if (options?.userId == null) { return null; } - return await this.secureStorageService.get(`${options?.userId}_masterkey`, options); + return await this.secureStorageService.get( + `${options?.userId}${partialKeys.masterKey}`, + options + ); } async setCryptoMasterKeyB64(value: string, options?: StorageOptions): Promise { @@ -452,7 +461,11 @@ export class StateService if (options?.userId == null) { return; } - await this.secureStorageService.save(`${options.userId}_masterkey`, value, options); + await this.secureStorageService.save( + `${options.userId}${partialKeys.masterKey}`, + value, + options + ); } async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise { @@ -463,7 +476,10 @@ export class StateService if (options?.userId == null) { return null; } - return await this.secureStorageService.get(`${options.userId}_masterkey_biometric`, options); + return await this.secureStorageService.get( + `${options.userId}${partialKeys.biometricKey}`, + options + ); } async hasCryptoMasterKeyBiometric(options?: StorageOptions): Promise { @@ -474,7 +490,10 @@ export class StateService if (options?.userId == null) { return false; } - return await this.secureStorageService.has(`${options.userId}_masterkey_biometric`, options); + return await this.secureStorageService.has( + `${options.userId}${partialKeys.biometricKey}`, + options + ); } async setCryptoMasterKeyBiometric(value: string, options?: StorageOptions): Promise { @@ -485,7 +504,11 @@ export class StateService if (options?.userId == null) { return; } - await this.secureStorageService.save(`${options.userId}_masterkey_biometric`, value, options); + await this.secureStorageService.save( + `${options.userId}${partialKeys.biometricKey}`, + value, + options + ); } async getDecodedToken(options?: StorageOptions): Promise { @@ -866,20 +889,16 @@ export class StateService } async getEmail(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.profile?.email; + return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) + ?.profile?.email; } async setEmail(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) + this.reconcileOptions(options, this.defaultInMemoryOptions) ); account.profile.email = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); } async getEmailVerified(options?: StorageOptions): Promise { @@ -1526,14 +1545,9 @@ export class StateService } async getLastActive(options?: StorageOptions): Promise { - const lastActive = ( + return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) )?.profile?.lastActive; - return ( - lastActive ?? - (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.lastActive - ); } async setLastActive(value: number, options?: StorageOptions): Promise { @@ -1547,15 +1561,6 @@ export class StateService this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } - - const globals = await this.getGlobals( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); - globals.lastActive = value; - await this.saveGlobals( - globals, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); } async getLastSync(options?: StorageOptions): Promise { @@ -2091,7 +2096,7 @@ export class StateService } protected async getGlobalsFromDisk(options: StorageOptions): Promise { - return (await this.storageService.get>("state", options))?.globals; + return await this.storageService.get(keys.global, options); } protected saveGlobalsToMemory(globals: GlobalState): void { @@ -2100,15 +2105,9 @@ export class StateService protected async saveGlobalsToDisk(globals: GlobalState, options: StorageOptions): Promise { if (options.useSecureStorage) { - const state = - (await this.secureStorageService.get>("state", options)) ?? new State(); - state.globals = globals; - await this.secureStorageService.save("state", state, options); + await this.secureStorageService.save(keys.global, globals, options); } else { - const state = - (await this.storageService.get>("state", options)) ?? new State(); - state.globals = globals; - await this.saveStateToStorage(state, options); + await this.storageService.save(keys.global, globals, options); } } @@ -2147,15 +2146,15 @@ export class StateService return null; } - const state = options?.useSecureStorage - ? (await this.secureStorageService.get>("state", options)) ?? - (await this.storageService.get>( - "state", + const account = options?.useSecureStorage + ? (await this.secureStorageService.get(options.userId, options)) ?? + (await this.storageService.get( + options.userId, this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local }) )) - : await this.storageService.get>("state", options); + : await this.storageService.get(options.userId, options); - return state?.accounts[options?.userId ?? this.state.activeUserId]; + return account; } protected useMemory(storageLocation: StorageLocation) { @@ -2183,11 +2182,7 @@ export class StateService ? this.secureStorageService : this.storageService; - const state = - (await storageLocation.get>("state", options)) ?? new State(); - state.accounts[account.profile.userId] = account; - - await storageLocation.save("state", state, options); + await storageLocation.save(`${options.userId}`, account, options); } protected async saveAccountToMemory(account: TAccount): Promise { @@ -2203,47 +2198,57 @@ export class StateService await this.scaffoldNewAccountMemoryStorage(account); } + // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService. + // For now these methods exist with some redundancy to facilitate this special web requirement. protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise { - const storedState = - (await this.storageService.get>( - "state", - await this.defaultOnDiskLocalOptions() - )) ?? new State(); - const storedAccount = storedState.accounts[account.profile.userId]; - if (storedAccount != null) { + const storedAccount = await this.storageService.get( + account.profile.userId, + await this.defaultOnDiskLocalOptions() + ); + if (storedAccount?.settings != null) { + // EnvironmentUrls are set before authenticating and should override whatever is stored from last session + storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - storedState.accounts[account.profile.userId] = account; - await this.saveStateToStorage(storedState, await this.defaultOnDiskLocalOptions()); + await this.storageService.save( + account.profile.userId, + account, + await this.defaultOnDiskLocalOptions() + ); } protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise { - const storedState = - (await this.storageService.get>( - "state", - await this.defaultOnDiskMemoryOptions() - )) ?? new State(); - const storedAccount = storedState.accounts[account.profile.userId]; - if (storedAccount != null) { + const storedAccount = await this.storageService.get( + account.profile.userId, + await this.defaultOnDiskMemoryOptions() + ); + if (storedAccount?.settings != null) { + storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - storedState.accounts[account.profile.userId] = account; - await this.saveStateToStorage(storedState, await this.defaultOnDiskMemoryOptions()); + await this.storageService.save( + account.profile.userId, + account, + await this.defaultOnDiskMemoryOptions() + ); } protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise { - const storedState = - (await this.storageService.get>( - "state", - await this.defaultOnDiskOptions() - )) ?? new State(); - const storedAccount = storedState.accounts[account.profile.userId]; - if (storedAccount != null) { + const storedAccount = await this.storageService.get( + account.profile.userId, + await this.defaultOnDiskOptions() + ); + if (storedAccount?.settings != null) { + storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - storedState.accounts[account.profile.userId] = account; - await this.saveStateToStorage(storedState, await this.defaultOnDiskOptions()); + await this.storageService.save( + account.profile.userId, + account, + await this.defaultOnDiskOptions() + ); } + // protected async pushAccounts(): Promise { await this.pruneInMemoryAccounts(); @@ -2313,34 +2318,33 @@ export class StateService } protected async getActiveUserIdFromStorage(): Promise { - const state = await this.storageService.get>("state"); - return state?.activeUserId; + return await this.storageService.get(keys.activeUserId); } protected async removeAccountFromLocalStorage( userId: string = this.state.activeUserId ): Promise { - const state = await this.storageService.get>("state", { + const storedAccount = await this.storageService.get(userId, { htmlStorageLocation: HtmlStorageLocation.Local, }); - if (state?.accounts[userId] == null) { - return; - } - state.accounts[userId] = this.resetAccount(state.accounts[userId]); - await this.saveStateToStorage(state, await this.defaultOnDiskLocalOptions()); + await this.storageService.save( + userId, + this.resetAccount(storedAccount), + await this.defaultOnDiskLocalOptions() + ); } protected async removeAccountFromSessionStorage( userId: string = this.state.activeUserId ): Promise { - const state = await this.storageService.get>("state", { + const storedAccount = await this.storageService.get(userId, { htmlStorageLocation: HtmlStorageLocation.Session, }); - if (state?.accounts[userId] == null) { - return; - } - state.accounts[userId] = this.resetAccount(state.accounts[userId]); - await this.saveStateToStorage(state, await this.defaultOnDiskOptions()); + await this.storageService.save( + userId, + this.resetAccount(storedAccount), + await this.defaultOnDiskOptions() + ); } protected async removeAccountFromSecureStorage( @@ -2355,13 +2359,6 @@ export class StateService delete this.state.accounts[userId]; } - protected async saveStateToStorage( - state: State, - options: StorageOptions - ): Promise { - await this.storageService.save("state", state, options); - } - protected async pruneInMemoryAccounts() { // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state for (const userId in this.state.accounts) { @@ -2371,13 +2368,10 @@ export class StateService } } - // settings persist even on reset + // settings persist even on reset, and are not effected by this method protected resetAccount(account: TAccount) { - account.data = new AccountData(); - account.keys = new AccountKeys(); - account.profile = new AccountProfile(); - account.tokens = new AccountTokens(); - return account; + const persistentAccountInformation = { settings: account.settings }; + return Object.assign(this.createAccount(), persistentAccountInformation); } protected async setAccountEnvironmentUrls(account: TAccount): Promise { @@ -2389,4 +2383,44 @@ export class StateService options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls(); } + + protected clearDecryptedDataForActiveUser() { + const userId = this.state.activeUserId; + if (userId == null) { + return; + } + this.state.accounts[userId].data = new AccountData(); + } + + protected createAccount(init: Partial = null): TAccount { + return this.accountFactory.create(init); + } + + protected async deAuthenticateAccount(userId: string) { + await this.setAccessToken(null, { userId: userId }); + const index = this.state.authenticatedAccounts.indexOf(userId); + if (index > -1) { + this.state.authenticatedAccounts.splice(index, 1); + await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); + } + } + + protected async removeAccountFromDisk(userId: string) { + await this.removeAccountFromSessionStorage(userId); + await this.removeAccountFromLocalStorage(userId); + await this.removeAccountFromSecureStorage(userId); + } + + protected async dynamicallySetActiveUser() { + for (const userId in this.state.accounts) { + if (userId == null) { + continue; + } + if (await this.getIsAuthenticated({ userId: userId })) { + await this.setActiveUser(userId); + break; + } + await this.setActiveUser(null); + } + } } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 9d422e70..59db6072 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -113,6 +113,18 @@ const v1KeyPrefixes = { settings: "settings_", }; +const keys = { + global: "global", + authenticatedAccounts: "authenticatedAccounts", + activeUserId: "activeUserId", +}; + +const partialKeys = { + autoKey: "_masterkey_auto", + biometricKey: "_masterkey_biometric", + masterKey: "_masterkey", +}; + export class StateMigrationService { constructor( protected storageService: StorageService, @@ -121,17 +133,16 @@ export class StateMigrationService { async needsMigration(): Promise { const currentStateVersion = ( - await this.storageService.get>("state", { + await this.storageService.get(keys.global, { htmlStorageLocation: HtmlStorageLocation.Local, }) - )?.globals?.stateVersion; + )?.stateVersion; return currentStateVersion == null || currentStateVersion < StateVersion.Latest; } async migrate(): Promise { let currentStateVersion = - (await this.storageService.get>("state"))?.globals?.stateVersion ?? - StateVersion.One; + (await this.storageService.get(keys.global))?.stateVersion ?? StateVersion.One; while (currentStateVersion < StateVersion.Latest) { switch (currentStateVersion) { case StateVersion.One: @@ -152,8 +163,10 @@ export class StateMigrationService { globals: new GlobalState(), accounts: {}, activeUserId: null, + authenticatedAccounts: [], } : { + authenticatedAccounts: [userId], activeUserId: userId, globals: { biometricAwaitingAcceptance: await this.storageService.get( @@ -182,7 +195,6 @@ export class StateMigrationService { v1Keys.installedVersion, options ), - lastActive: await this.storageService.get(v1Keys.lastActive, options), locale: await this.storageService.get(v1Keys.locale, options), loginRedirect: null, mainWindowSize: null, @@ -490,12 +502,19 @@ export class StateMigrationService { initialState.globals.environmentUrls = (await this.storageService.get(v1Keys.environmentUrls, options)) ?? new EnvironmentUrls(); - - await this.storageService.save("state", initialState, options); + await this.storageService.save(keys.global, initialState.globals, options); + await this.storageService.save(keys.activeUserId, initialState.activeUserId, options); + if (initialState.activeUserId != null) { + await this.storageService.save( + initialState.activeUserId, + initialState.accounts[initialState.activeUserId] + ); + } + await this.storageService.save(keys.authenticatedAccounts, initialState.authenticatedAccounts); if (await this.secureStorageService.has(v1Keys.key, { keySuffix: "biometric" })) { await this.secureStorageService.save( - `${userId}_masterkey_biometric`, + `${userId}${partialKeys.biometricKey}`, await this.secureStorageService.get(v1Keys.key, { keySuffix: "biometric" }), { keySuffix: "biometric" } ); @@ -504,7 +523,7 @@ export class StateMigrationService { if (await this.secureStorageService.has(v1Keys.key, { keySuffix: "auto" })) { await this.secureStorageService.save( - `${userId}_masterkey_auto`, + `${userId}${partialKeys.autoKey}`, await this.secureStorageService.get(v1Keys.key, { keySuffix: "auto" }), { keySuffix: "auto" } ); @@ -513,7 +532,7 @@ export class StateMigrationService { if (await this.secureStorageService.has(v1Keys.key)) { await this.secureStorageService.save( - `${userId}_masterkey`, + `${userId}${partialKeys.masterKey}`, await this.secureStorageService.get(v1Keys.key) ); await this.secureStorageService.remove(v1Keys.key); From 9737c829f33138cdd492e5a14acd45c4a946449e Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 20 Jan 2022 19:28:48 +1000 Subject: [PATCH 025/120] Fix migration to Key Connector in cli commands (#616) * Move CLI Key Connector check out of base class * Add missing await * Move safe operation out of try/catch block * Move Key Connector migration check to unlock command * Set convertAccountRequired flag in syncService * Remove unneeded service --- common/src/services/keyConnector.service.ts | 4 +- common/src/services/sync.service.ts | 1 + node/src/cli/commands/login.command.ts | 77 +-------------------- 3 files changed, 4 insertions(+), 78 deletions(-) diff --git a/common/src/services/keyConnector.service.ts b/common/src/services/keyConnector.service.ts index a258a0e3..7296d9b1 100644 --- a/common/src/services/keyConnector.service.ts +++ b/common/src/services/keyConnector.service.ts @@ -33,7 +33,7 @@ export class KeyConnectorService implements KeyConnectorServiceAbstraction { } async userNeedsMigration() { - const loggedInUsingSso = this.tokenService.getIsExternal(); + const loggedInUsingSso = await this.tokenService.getIsExternal(); const requiredByOrganization = (await this.getManagingOrganization()) != null; const userIsNotUsingKeyConnector = !(await this.getUsesKeyConnector()); @@ -43,9 +43,9 @@ export class KeyConnectorService implements KeyConnectorServiceAbstraction { async migrateUser() { const organization = await this.getManagingOrganization(); const key = await this.cryptoService.getKey(); + const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64); try { - const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64); await this.apiService.postUserKeyToKeyConnector( organization.keyConnectorUrl, keyConnectorRequest diff --git a/common/src/services/sync.service.ts b/common/src/services/sync.service.ts index e3ef51d3..d32db18e 100644 --- a/common/src/services/sync.service.ts +++ b/common/src/services/sync.service.ts @@ -334,6 +334,7 @@ export class SyncService implements SyncServiceAbstraction { ]); if (await this.keyConnectorService.userNeedsMigration()) { + await this.keyConnectorService.setConvertAccountRequired(true); this.messagingService.send("convertAccountToKeyConnector"); } else { this.keyConnectorService.removeConvertAccountRequired(); diff --git a/node/src/cli/commands/login.command.ts b/node/src/cli/commands/login.command.ts index c1e7caeb..8dfac8ec 100644 --- a/node/src/cli/commands/login.command.ts +++ b/node/src/cli/commands/login.command.ts @@ -14,16 +14,13 @@ import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; -import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; -import { SyncService } from "jslib-common/abstractions/sync.service"; import { Response } from "../models/response"; -import { KeyConnectorUserKeyRequest } from "jslib-common/models/request/keyConnectorUserKeyRequest"; import { UpdateTempPasswordRequest } from "jslib-common/models/request/updateTempPasswordRequest"; import { MessageResponse } from "../models/response/messageResponse"; @@ -56,9 +53,7 @@ export class LoginCommand { protected stateService: StateService, protected cryptoService: CryptoService, protected policyService: PolicyService, - clientId: string, - private syncService: SyncService, - protected keyConnectorService: KeyConnectorService + clientId: string ) { this.clientId = clientId; } @@ -315,14 +310,6 @@ export class LoginCommand { ); } - // Full sync required for the reset password and key connector checks - await this.syncService.fullSync(true); - - // Handle converting to Key Connector if required - if (await this.keyConnectorService.userNeedsMigration()) { - return await this.migrateToKeyConnector(); - } - // Handle Updating Temp Password if NOT using an API Key for authentication if (response.forcePasswordReset && clientId == null && clientSecret == null) { return await this.updateTempPassword(); @@ -479,68 +466,6 @@ export class LoginCommand { return userInput; } - private async migrateToKeyConnector() { - // If no interaction available, alert user to use web vault - if (!this.canInteract) { - await this.logout(); - this.authService.logOut(() => { - /* Do nothing */ - }); - return Response.error( - new MessageResponse( - "An organization you are a member of is using Key Connector. " + - "In order to access the vault, you must opt-in to Key Connector now via the web vault. You have been logged out.", - null - ) - ); - } - - const organization = await this.keyConnectorService.getManagingOrganization(); - - const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({ - type: "list", - name: "convert", - message: - organization.name + - " is using a self-hosted key server. A master password is no longer required to log in for members of this organization. ", - choices: [ - { - name: "Remove master password and log in", - value: "remove", - }, - { - name: "Leave organization and log in", - value: "leave", - }, - { - name: "Exit", - value: "exit", - }, - ], - }); - - if (answer.convert === "remove") { - await this.keyConnectorService.migrateUser(); - - // Update environment URL - required for api key login - const urls = this.environmentService.getUrls(); - urls.keyConnector = organization.keyConnectorUrl; - await this.environmentService.setUrls(urls, true); - - return await this.handleSuccessResponse(); - } else if (answer.convert === "leave") { - await this.apiService.postLeaveOrganization(organization.id); - await this.syncService.fullSync(true); - return await this.handleSuccessResponse(); - } else { - await this.logout(); - this.authService.logOut(() => { - /* Do nothing */ - }); - return Response.error("You have been logged out."); - } - } - private async apiClientId(): Promise { let clientId: string = null; From 11e7133aefa4443e07febde9b3add25539ec2287 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 20 Jan 2022 19:32:44 +1000 Subject: [PATCH 026/120] Save usesKeyConnector using defaultOnDiskOptions (#617) --- common/src/services/state.service.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 841b1902..68cbe789 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1993,16 +1993,20 @@ export class StateService } async getUsesKeyConnector(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.profile?.usesKeyConnector; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) + )?.profile?.usesKeyConnector; } async setUsesKeyConnector(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); account.profile.usesKeyConnector = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); } async getVaultTimeout(options?: StorageOptions): Promise { From 57351d29a2810e3f73f85bb46bb4762381dc512a Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 20 Jan 2022 08:30:00 -0500 Subject: [PATCH 027/120] [bug] Migrate state even if there is not a user logged in (#615) Currently the StateMigrationService depends on a userId key for running migrations, but if there is not an authenticated user saved to storage that userId is not present. These changes allow for migrating state data even without an active user. For account specific settings like clearClipboard we now temporarily store those values together in disk state until an account is authed that they can be added to. Temp account state is then cleared. Some notes: * In order for this to work we need GlobalState.stateVersion to have a default value of StateVersion.One instead of StateVersion.Latest. Defaulting it to latest was causing migrations to not run on some clients (like desktop) that try to access storage before migrations have been run but save a version as if migrations did run. * I also noticed we aren't clearing old state items from before migrating, and added a case for this to the migrator. * I extracted a few bits of reused code into private methods in the stateMigration service. Things like get/set from storage, default options, etc. --- common/src/models/domain/globalState.ts | 2 +- common/src/services/state.service.ts | 4 + common/src/services/stateMigration.service.ts | 628 ++++++++---------- 3 files changed, 269 insertions(+), 365 deletions(-) diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index f14d48d3..7a1895d1 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -25,6 +25,6 @@ export class GlobalState { biometricText?: string; noAutoPromptBiometrics?: boolean; noAutoPromptBiometricsText?: string; - stateVersion: StateVersion = StateVersion.Latest; + stateVersion: StateVersion = StateVersion.One; environmentUrls: EnvironmentUrls = new EnvironmentUrls(); } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 68cbe789..60975d57 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -41,6 +41,7 @@ const keys = { global: "global", authenticatedAccounts: "authenticatedAccounts", activeUserId: "activeUserId", + tempAccountSettings: "tempAccountSettings", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication }; const partialKeys = { @@ -2213,6 +2214,9 @@ export class StateService // EnvironmentUrls are set before authenticating and should override whatever is stored from last session storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; + } else if (await this.storageService.has(keys.tempAccountSettings)) { + account.settings = await this.storageService.get(keys.tempAccountSettings); + await this.storageService.remove(keys.tempAccountSettings); } await this.storageService.save( account.profile.userId, diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 59db6072..36bf6864 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -1,9 +1,7 @@ import { StorageService } from "../abstractions/storage.service"; -import { Account } from "../models/domain/account"; import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; import { GlobalState } from "../models/domain/globalState"; -import { State } from "../models/domain/state"; import { StorageOptions } from "../models/domain/storageOptions"; import { CipherData } from "../models/data/cipherData"; @@ -18,11 +16,12 @@ import { SendData } from "../models/data/sendData"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StateVersion } from "../enums/stateVersion"; + import { EnvironmentUrls } from "../models/domain/environmentUrls"; // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. -const v1Keys = { +const v1Keys: { [key: string]: string } = { accessToken: "accessToken", alwaysShowDock: "alwaysShowDock", autoConfirmFingerprints: "autoConfirmFingerprints", @@ -100,7 +99,7 @@ const v1Keys = { rememberedEmail: "rememberedEmail", }; -const v1KeyPrefixes = { +const v1KeyPrefixes: { [key: string]: string } = { ciphers: "ciphers_", collections: "collections_", folders: "folders_", @@ -117,6 +116,7 @@ const keys = { global: "global", authenticatedAccounts: "authenticatedAccounts", activeUserId: "activeUserId", + tempAccountSettings: "tempAccountSettings", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication }; const partialKeys = { @@ -132,17 +132,12 @@ export class StateMigrationService { ) {} async needsMigration(): Promise { - const currentStateVersion = ( - await this.storageService.get(keys.global, { - htmlStorageLocation: HtmlStorageLocation.Local, - }) - )?.stateVersion; + const currentStateVersion = await this.getCurrentStateVersion(); return currentStateVersion == null || currentStateVersion < StateVersion.Latest; } async migrate(): Promise { - let currentStateVersion = - (await this.storageService.get(keys.global))?.stateVersion ?? StateVersion.One; + let currentStateVersion = await this.getCurrentStateVersion(); while (currentStateVersion < StateVersion.Latest) { switch (currentStateVersion) { case StateVersion.One: @@ -155,362 +150,244 @@ export class StateMigrationService { } protected async migrateStateFrom1To2(): Promise { - const options: StorageOptions = { htmlStorageLocation: HtmlStorageLocation.Local }; - const userId = await this.storageService.get("userId"); - const initialState: State = - userId == null - ? { - globals: new GlobalState(), - accounts: {}, - activeUserId: null, - authenticatedAccounts: [], + const clearV1Keys = async (clearingUserId?: string) => { + for (const key in v1Keys) { + if (key == null) { + continue; + } + await this.set(v1Keys[key], null); + } + if (clearingUserId != null) { + for (const keyPrefix in v1KeyPrefixes) { + if (keyPrefix == null) { + continue; } - : { - authenticatedAccounts: [userId], - activeUserId: userId, - globals: { - biometricAwaitingAcceptance: await this.storageService.get( - v1Keys.biometricAwaitingAcceptance, - options - ), - biometricFingerprintValidated: await this.storageService.get( - v1Keys.biometricFingerprintValidated, - options - ), - biometricText: await this.storageService.get(v1Keys.biometricText, options), - disableFavicon: await this.storageService.get( - v1Keys.disableFavicon, - options - ), - enableAlwaysOnTop: await this.storageService.get( - v1Keys.enableAlwaysOnTop, - options - ), - enableBiometrics: await this.storageService.get( - v1Keys.enableBiometric, - options - ), - environmentUrls: null, - installedVersion: await this.storageService.get( - v1Keys.installedVersion, - options - ), - locale: await this.storageService.get(v1Keys.locale, options), - loginRedirect: null, - mainWindowSize: null, - noAutoPromptBiometrics: await this.storageService.get( - v1Keys.disableAutoBiometricsPrompt, - options - ), - noAutoPromptBiometricsText: await this.storageService.get( - v1Keys.noAutoPromptBiometricsText, - options - ), - openAtLogin: await this.storageService.get(v1Keys.openAtLogin, options), - organizationInvitation: await this.storageService.get("", options), - ssoCodeVerifier: await this.storageService.get( - v1Keys.ssoCodeVerifier, - options - ), - ssoOrganizationIdentifier: await this.storageService.get( - v1Keys.ssoIdentifier, - options - ), - ssoState: null, - rememberedEmail: await this.storageService.get( - v1Keys.rememberedEmail, - options - ), - stateVersion: StateVersion.Two, - theme: await this.storageService.get(v1Keys.theme, options), - twoFactorToken: await this.storageService.get( - v1KeyPrefixes.twoFactorToken + userId, - options - ), - vaultTimeout: await this.storageService.get(v1Keys.vaultTimeout, options), - vaultTimeoutAction: await this.storageService.get( - v1Keys.vaultTimeoutAction, - options - ), - window: null, - }, - accounts: { - [userId]: new Account({ - data: { - addEditCipherInfo: null, - ciphers: { - decrypted: null, - encrypted: await this.storageService.get<{ [id: string]: CipherData }>( - v1KeyPrefixes.ciphers + userId, - options - ), - }, - collapsedGroupings: null, - collections: { - decrypted: null, - encrypted: await this.storageService.get<{ [id: string]: CollectionData }>( - v1KeyPrefixes.collections + userId, - options - ), - }, - eventCollection: await this.storageService.get( - v1Keys.eventCollection, - options - ), - folders: { - decrypted: null, - encrypted: await this.storageService.get<{ [id: string]: FolderData }>( - v1KeyPrefixes.folders + userId, - options - ), - }, - localData: null, - organizations: await this.storageService.get<{ [id: string]: OrganizationData }>( - v1KeyPrefixes.organizations + userId - ), - passwordGenerationHistory: { - decrypted: null, - encrypted: await this.storageService.get( - "TODO", - options - ), // TODO: Whats up here? - }, - policies: { - decrypted: null, - encrypted: await this.storageService.get<{ [id: string]: PolicyData }>( - v1KeyPrefixes.policies + userId, - options - ), - }, - providers: await this.storageService.get<{ [id: string]: ProviderData }>( - v1KeyPrefixes.providers + userId - ), - sends: { - decrypted: null, - encrypted: await this.storageService.get<{ [id: string]: SendData }>( - v1KeyPrefixes.sends, - options - ), - }, - }, - keys: { - apiKeyClientSecret: await this.storageService.get( - v1Keys.clientSecret, - options - ), - cryptoMasterKey: null, - cryptoMasterKeyAuto: null, - cryptoMasterKeyB64: null, - cryptoMasterKeyBiometric: null, - cryptoSymmetricKey: { - encrypted: await this.storageService.get(v1Keys.encKey, options), - decrypted: null, - }, - legacyEtmKey: null, - organizationKeys: { - decrypted: null, - encrypted: await this.storageService.get( - v1Keys.encOrgKeys + userId, - options - ), - }, - privateKey: { - decrypted: null, - encrypted: await this.storageService.get(v1Keys.encPrivate, options), - }, - providerKeys: { - decrypted: null, - encrypted: await this.storageService.get( - v1Keys.encProviderKeys + userId, - options - ), - }, - publicKey: null, - }, - profile: { - apiKeyClientId: await this.storageService.get(v1Keys.clientId, options), - authenticationStatus: null, - convertAccountToKeyConnector: await this.storageService.get( - v1Keys.convertAccountToKeyConnector, - options - ), - email: await this.storageService.get(v1Keys.userEmail, options), - emailVerified: await this.storageService.get( - v1Keys.emailVerified, - options - ), - entityId: null, - entityType: null, - everBeenUnlocked: null, - forcePasswordReset: null, - hasPremiumPersonally: null, - kdfIterations: await this.storageService.get( - v1Keys.kdfIterations, - options - ), - kdfType: await this.storageService.get(v1Keys.kdf, options), - keyHash: await this.storageService.get(v1Keys.keyHash, options), - lastActive: await this.storageService.get(v1Keys.lastActive, options), - lastSync: null, - userId: userId, - usesKeyConnector: null, - }, - settings: { - alwaysShowDock: await this.storageService.get( - v1Keys.alwaysShowDock, - options - ), - autoConfirmFingerPrints: await this.storageService.get( - v1Keys.autoConfirmFingerprints, - options - ), - autoFillOnPageLoadDefault: await this.storageService.get( - v1Keys.autoFillOnPageLoadDefault, - options - ), - biometricLocked: null, - biometricUnlock: await this.storageService.get( - v1Keys.biometricUnlock, - options - ), - clearClipboard: await this.storageService.get( - v1Keys.clearClipboard, - options - ), - defaultUriMatch: await this.storageService.get( - v1Keys.defaultUriMatch, - options - ), - disableAddLoginNotification: await this.storageService.get( - v1Keys.disableAddLoginNotification, - options - ), - disableAutoBiometricsPrompt: await this.storageService.get( - v1Keys.disableAutoBiometricsPrompt, - options - ), - disableAutoTotpCopy: await this.storageService.get( - v1Keys.disableAutoTotpCopy, - options - ), - disableBadgeCounter: await this.storageService.get( - v1Keys.disableBadgeCounter, - options - ), - disableChangedPasswordNotification: await this.storageService.get( - v1Keys.disableChangedPasswordNotification, - options - ), - disableContextMenuItem: await this.storageService.get( - v1Keys.disableContextMenuItem, - options - ), - disableGa: await this.storageService.get(v1Keys.disableGa, options), - dontShowCardsCurrentTab: await this.storageService.get( - v1Keys.dontShowCardsCurrentTab, - options - ), - dontShowIdentitiesCurrentTab: await this.storageService.get( - v1Keys.dontShowIdentitiesCurrentTab, - options - ), - enableAlwaysOnTop: await this.storageService.get( - v1Keys.enableAlwaysOnTop, - options - ), - enableAutoFillOnPageLoad: await this.storageService.get( - v1Keys.enableAutoFillOnPageLoad, - options - ), - enableBiometric: await this.storageService.get( - v1Keys.enableBiometric, - options - ), - enableBrowserIntegration: await this.storageService.get( - v1Keys.enableBrowserIntegration, - options - ), - enableBrowserIntegrationFingerprint: await this.storageService.get( - v1Keys.enableBrowserIntegrationFingerprint, - options - ), - enableCloseToTray: await this.storageService.get( - v1Keys.enableCloseToTray, - options - ), - enableFullWidth: await this.storageService.get( - v1Keys.enableFullWidth, - options - ), - enableGravitars: await this.storageService.get( - v1Keys.enableGravatars, - options - ), - enableMinimizeToTray: await this.storageService.get( - v1Keys.enableMinimizeToTray, - options - ), - enableStartToTray: await this.storageService.get( - v1Keys.enableStartToTray, - options - ), - enableTray: await this.storageService.get(v1Keys.enableTray, options), - environmentUrls: - (await this.storageService.get( - v1Keys.environmentUrls, - options - )) ?? new EnvironmentUrls(), - equivalentDomains: await this.storageService.get( - v1Keys.equivalentDomains, - options - ), - minimizeOnCopyToClipboard: await this.storageService.get( - v1Keys.minimizeOnCopyToClipboard, - options - ), - neverDomains: await this.storageService.get(v1Keys.neverDomains, options), - openAtLogin: await this.storageService.get(v1Keys.openAtLogin, options), - passwordGenerationOptions: await this.storageService.get( - v1Keys.passwordGenerationOptions, - options - ), - pinProtected: { - decrypted: null, - encrypted: await this.storageService.get(v1Keys.pinProtected, options), - }, - protectedPin: await this.storageService.get(v1Keys.protectedPin, options), - settings: await this.storageService.get( - v1KeyPrefixes.settings + userId, - options - ), - vaultTimeout: await this.storageService.get(v1Keys.vaultTimeout, options), - vaultTimeoutAction: await this.storageService.get( - v1Keys.vaultTimeoutAction, - options - ), - }, - tokens: { - accessToken: await this.storageService.get(v1Keys.accessToken, options), - decodedToken: null, - refreshToken: await this.storageService.get(v1Keys.refreshToken, options), - securityStamp: null, - }, - }), - }, - }; + await this.set(v1KeyPrefixes[keyPrefix] + userId, null); + } + } + }; - initialState.globals.environmentUrls = - (await this.storageService.get(v1Keys.environmentUrls, options)) ?? - new EnvironmentUrls(); - await this.storageService.save(keys.global, initialState.globals, options); - await this.storageService.save(keys.activeUserId, initialState.activeUserId, options); - if (initialState.activeUserId != null) { - await this.storageService.save( - initialState.activeUserId, - initialState.accounts[initialState.activeUserId] - ); + const globals: GlobalState = { + stateVersion: StateVersion.Two, + environmentUrls: + (await this.get(v1Keys.environmentUrls)) ?? new EnvironmentUrls(), + locale: await this.get(v1Keys.locale), + loginRedirect: null, + mainWindowSize: null, + noAutoPromptBiometrics: await this.get(v1Keys.disableAutoBiometricsPrompt), + noAutoPromptBiometricsText: await this.get(v1Keys.noAutoPromptBiometricsText), + openAtLogin: await this.get(v1Keys.openAtLogin), + organizationInvitation: null, + ssoCodeVerifier: await this.get(v1Keys.ssoCodeVerifier), + ssoOrganizationIdentifier: await this.get(v1Keys.ssoIdentifier), + ssoState: null, + rememberedEmail: await this.get(v1Keys.rememberedEmail), + theme: await this.get(v1Keys.theme), + vaultTimeout: await this.get(v1Keys.vaultTimeout), + vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), + window: null, + }; + + const userId = await this.get(v1Keys.userId); + + // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth + // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings + if (userId == null) { + await this.set(keys.tempAccountSettings, { + alwaysShowDock: await this.get(v1Keys.alwaysShowDock), + autoConfirmFingerPrints: await this.get(v1Keys.autoConfirmFingerprints), + autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), + biometricLocked: null, + biometricUnlock: await this.get(v1Keys.biometricUnlock), + clearClipboard: await this.get(v1Keys.clearClipboard), + defaultUriMatch: await this.get(v1Keys.defaultUriMatch), + disableAddLoginNotification: await this.get(v1Keys.disableAddLoginNotification), + disableAutoBiometricsPrompt: await this.get(v1Keys.disableAutoBiometricsPrompt), + disableAutoTotpCopy: await this.get(v1Keys.disableAutoTotpCopy), + disableBadgeCounter: await this.get(v1Keys.disableBadgeCounter), + disableChangedPasswordNotification: await this.get( + v1Keys.disableChangedPasswordNotification + ), + disableContextMenuItem: await this.get(v1Keys.disableContextMenuItem), + disableGa: await this.get(v1Keys.disableGa), + dontShowCardsCurrentTab: await this.get(v1Keys.dontShowCardsCurrentTab), + dontShowIdentitiesCurrentTab: await this.get(v1Keys.dontShowIdentitiesCurrentTab), + enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), + enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), + enableBiometric: await this.get(v1Keys.enableBiometric), + enableBrowserIntegration: await this.get(v1Keys.enableBrowserIntegration), + enableBrowserIntegrationFingerprint: await this.get( + v1Keys.enableBrowserIntegrationFingerprint + ), + enableCloseToTray: await this.get(v1Keys.enableCloseToTray), + enableFullWidth: await this.get(v1Keys.enableFullWidth), + enableGravitars: await this.get(v1Keys.enableGravatars), + enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), + enableStartToTray: await this.get(v1Keys.enableStartToTray), + enableTray: await this.get(v1Keys.enableTray), + environmentUrls: globals.environmentUrls, + equivalentDomains: await this.get(v1Keys.equivalentDomains), + minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), + neverDomains: await this.get(v1Keys.neverDomains), + openAtLogin: await this.get(v1Keys.openAtLogin), + passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), + pinProtected: { + decrypted: null, + encrypted: await this.get(v1Keys.pinProtected), + }, + protectedPin: await this.get(v1Keys.protectedPin), + settings: null, + vaultTimeout: await this.get(v1Keys.vaultTimeout), + vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), + }); + await this.set(keys.global, globals); + await this.set(keys.authenticatedAccounts, []); + await this.set(keys.activeUserId, null); + await clearV1Keys(); + return; } - await this.storageService.save(keys.authenticatedAccounts, initialState.authenticatedAccounts); + + globals.twoFactorToken = await this.get(v1KeyPrefixes.twoFactorToken + userId); + await this.set(keys.global, globals); + await this.set(userId, { + data: { + addEditCipherInfo: null, + ciphers: { + decrypted: null, + encrypted: await this.get<{ [id: string]: CipherData }>(v1KeyPrefixes.ciphers + userId), + }, + collapsedGroupings: null, + collections: { + decrypted: null, + encrypted: await this.get<{ [id: string]: CollectionData }>( + v1KeyPrefixes.collections + userId + ), + }, + eventCollection: await this.get(v1Keys.eventCollection), + folders: { + decrypted: null, + encrypted: await this.get<{ [id: string]: FolderData }>(v1KeyPrefixes.folders + userId), + }, + localData: null, + organizations: await this.get<{ [id: string]: OrganizationData }>( + v1KeyPrefixes.organizations + userId + ), + passwordGenerationHistory: { + decrypted: null, + encrypted: await this.get(v1Keys.history), + }, + policies: { + decrypted: null, + encrypted: await this.get<{ [id: string]: PolicyData }>(v1KeyPrefixes.policies + userId), + }, + providers: await this.get<{ [id: string]: ProviderData }>(v1KeyPrefixes.providers + userId), + sends: { + decrypted: null, + encrypted: await this.get<{ [id: string]: SendData }>(v1KeyPrefixes.sends + userId), + }, + }, + keys: { + apiKeyClientSecret: await this.get(v1Keys.clientSecret), + cryptoMasterKey: null, + cryptoMasterKeyAuto: null, + cryptoMasterKeyB64: null, + cryptoMasterKeyBiometric: null, + cryptoSymmetricKey: { + encrypted: await this.get(v1Keys.encKey), + decrypted: null, + }, + legacyEtmKey: null, + organizationKeys: { + decrypted: null, + encrypted: await this.get(v1Keys.encOrgKeys + userId), + }, + privateKey: { + decrypted: null, + encrypted: await this.get(v1Keys.encPrivate), + }, + providerKeys: { + decrypted: null, + encrypted: await this.get(v1Keys.encProviderKeys + userId), + }, + publicKey: null, + }, + profile: { + apiKeyClientId: await this.get(v1Keys.clientId), + authenticationStatus: null, + convertAccountToKeyConnector: await this.get(v1Keys.convertAccountToKeyConnector), + email: await this.get(v1Keys.userEmail), + emailVerified: await this.get(v1Keys.emailVerified), + entityId: null, + entityType: null, + everBeenUnlocked: null, + forcePasswordReset: null, + hasPremiumPersonally: null, + kdfIterations: await this.get(v1Keys.kdfIterations), + kdfType: await this.get(v1Keys.kdf), + keyHash: await this.get(v1Keys.keyHash), + lastActive: await this.get(v1Keys.lastActive), + lastSync: null, + userId: userId, + usesKeyConnector: null, + }, + settings: { + alwaysShowDock: await this.get(v1Keys.alwaysShowDock), + autoConfirmFingerPrints: await this.get(v1Keys.autoConfirmFingerprints), + autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), + biometricLocked: null, + biometricUnlock: await this.get(v1Keys.biometricUnlock), + clearClipboard: await this.get(v1Keys.clearClipboard), + defaultUriMatch: await this.get(v1Keys.defaultUriMatch), + disableAddLoginNotification: await this.get(v1Keys.disableAddLoginNotification), + disableAutoBiometricsPrompt: await this.get(v1Keys.disableAutoBiometricsPrompt), + disableAutoTotpCopy: await this.get(v1Keys.disableAutoTotpCopy), + disableBadgeCounter: await this.get(v1Keys.disableBadgeCounter), + disableChangedPasswordNotification: await this.get( + v1Keys.disableChangedPasswordNotification + ), + disableContextMenuItem: await this.get(v1Keys.disableContextMenuItem), + disableGa: await this.get(v1Keys.disableGa), + dontShowCardsCurrentTab: await this.get(v1Keys.dontShowCardsCurrentTab), + dontShowIdentitiesCurrentTab: await this.get(v1Keys.dontShowIdentitiesCurrentTab), + enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), + enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), + enableBiometric: await this.get(v1Keys.enableBiometric), + enableBrowserIntegration: await this.get(v1Keys.enableBrowserIntegration), + enableBrowserIntegrationFingerprint: await this.get( + v1Keys.enableBrowserIntegrationFingerprint + ), + enableCloseToTray: await this.get(v1Keys.enableCloseToTray), + enableFullWidth: await this.get(v1Keys.enableFullWidth), + enableGravitars: await this.get(v1Keys.enableGravatars), + enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), + enableStartToTray: await this.get(v1Keys.enableStartToTray), + enableTray: await this.get(v1Keys.enableTray), + environmentUrls: globals.environmentUrls, + equivalentDomains: await this.get(v1Keys.equivalentDomains), + minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), + neverDomains: await this.get(v1Keys.neverDomains), + openAtLogin: await this.get(v1Keys.openAtLogin), + passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), + pinProtected: { + decrypted: null, + encrypted: await this.get(v1Keys.pinProtected), + }, + protectedPin: await this.get(v1Keys.protectedPin), + settings: await this.get(v1KeyPrefixes.settings + userId), + vaultTimeout: await this.get(v1Keys.vaultTimeout), + vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), + }, + tokens: { + accessToken: await this.get(v1Keys.accessToken), + decodedToken: null, + refreshToken: await this.get(v1Keys.refreshToken), + securityStamp: null, + }, + }); + + await this.set(keys.authenticatedAccounts, [userId]); + await this.set(keys.activeUserId, userId); + await clearV1Keys(userId); if (await this.secureStorageService.has(v1Keys.key, { keySuffix: "biometric" })) { await this.secureStorageService.save( @@ -538,4 +415,27 @@ export class StateMigrationService { await this.secureStorageService.remove(v1Keys.key); } } + + private get options(): StorageOptions { + return { htmlStorageLocation: HtmlStorageLocation.Local }; + } + + private get(key: string): Promise { + return this.storageService.get(key, this.options); + } + + private set(key: string, value: any): Promise { + if (value == null) { + return this.storageService.remove(key, this.options); + } + return this.storageService.save(key, value, this.options); + } + + private async getGlobals(): Promise { + return await this.get(keys.global); + } + + private async getCurrentStateVersion(): Promise { + return (await this.getGlobals())?.stateVersion; + } } From 54c6a4b3c3d34fe6adbbeba5d35a416a3fbc487d Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 20 Jan 2022 09:03:31 -0500 Subject: [PATCH 028/120] [bug] Correct scope for several data points (#618) The following data points are currently scoped to an account but are made global with this commit: * Enable Menu Bar Icon * Minimize To Menu Bar * Close To Menu Bar * Start To Menu Bar Note: these are all electron specific fields --- common/src/models/domain/account.ts | 6 -- common/src/models/domain/globalState.ts | 7 ++- common/src/services/state.service.ts | 60 +++++++++---------- common/src/services/stateMigration.service.ts | 19 ++---- 4 files changed, 42 insertions(+), 50 deletions(-) diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 9af9f053..bfad62ac 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -104,7 +104,6 @@ export class AccountProfile { } export class AccountSettings { - alwaysShowDock?: boolean; autoConfirmFingerPrints?: boolean; autoFillOnPageLoadDefault?: boolean; biometricLocked?: boolean; @@ -125,17 +124,12 @@ export class AccountSettings { enableBiometric?: boolean; enableBrowserIntegration?: boolean; enableBrowserIntegrationFingerprint?: boolean; - enableCloseToTray?: boolean; enableFullWidth?: boolean; enableGravitars?: boolean; - enableMinimizeToTray?: boolean; - enableStartToTray?: boolean; - enableTray?: boolean; environmentUrls: EnvironmentUrls = new EnvironmentUrls(); equivalentDomains?: any; minimizeOnCopyToClipboard?: boolean; neverDomains?: { [id: string]: any }; - openAtLogin?: boolean; passwordGenerationOptions?: any; pinProtected?: EncryptionPair = new EncryptionPair(); protectedPin?: string; diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 7a1895d1..e7036fa2 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -5,7 +5,6 @@ export class GlobalState { enableAlwaysOnTop?: boolean; installedVersion?: string; locale?: string = "en"; - openAtLogin?: boolean; organizationInvitation?: any; ssoCodeVerifier?: string; ssoOrganizationIdentifier?: string; @@ -27,4 +26,10 @@ export class GlobalState { noAutoPromptBiometricsText?: string; stateVersion: StateVersion = StateVersion.One; environmentUrls: EnvironmentUrls = new EnvironmentUrls(); + enableTray?: boolean; + enableMinimizeToTray?: boolean; + enableCloseToTray?: boolean; + enableStartToTray?: boolean; + openAtLogin?: boolean; + alwaysShowDock?: boolean; } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 60975d57..6e4da55d 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -161,18 +161,18 @@ export class StateService async getAlwaysShowDock(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.alwaysShowDock ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.alwaysShowDock ?? false ); } async setAlwaysShowDock(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.alwaysShowDock = value; - await this.saveAccount( - account, + globals.alwaysShowDock = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } @@ -1027,18 +1027,18 @@ export class StateService async getEnableCloseToTray(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.enableCloseToTray ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableCloseToTray ?? false ); } async setEnableCloseToTray(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableCloseToTray = value; - await this.saveAccount( - account, + globals.enableCloseToTray = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } @@ -1087,54 +1087,54 @@ export class StateService async getEnableMinimizeToTray(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.enableMinimizeToTray ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableMinimizeToTray ?? false ); } async setEnableMinimizeToTray(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableMinimizeToTray = value; - await this.saveAccount( - account, + globals.enableMinimizeToTray = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } async getEnableStartToTray(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings.enableStartToTray ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableStartToTray ?? false ); } async setEnableStartToTray(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableStartToTray = value; - await this.saveAccount( - account, + globals.enableStartToTray = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } async getEnableTray(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.enableTray ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableTray ?? false ); } async setEnableTray(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableTray = value; - await this.saveAccount( - account, + globals.enableTray = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 36bf6864..511c8dc4 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -176,7 +176,6 @@ export class StateMigrationService { mainWindowSize: null, noAutoPromptBiometrics: await this.get(v1Keys.disableAutoBiometricsPrompt), noAutoPromptBiometricsText: await this.get(v1Keys.noAutoPromptBiometricsText), - openAtLogin: await this.get(v1Keys.openAtLogin), organizationInvitation: null, ssoCodeVerifier: await this.get(v1Keys.ssoCodeVerifier), ssoOrganizationIdentifier: await this.get(v1Keys.ssoIdentifier), @@ -186,6 +185,12 @@ export class StateMigrationService { vaultTimeout: await this.get(v1Keys.vaultTimeout), vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), window: null, + enableTray: await this.get(v1Keys.enableTray), + enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), + enableCloseToTray: await this.get(v1Keys.enableCloseToTray), + enableStartToTray: await this.get(v1Keys.enableStartToTray), + openAtLogin: await this.get(v1Keys.openAtLogin), + alwaysShowDock: await this.get(v1Keys.alwaysShowDock), }; const userId = await this.get(v1Keys.userId); @@ -194,7 +199,6 @@ export class StateMigrationService { // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings if (userId == null) { await this.set(keys.tempAccountSettings, { - alwaysShowDock: await this.get(v1Keys.alwaysShowDock), autoConfirmFingerPrints: await this.get(v1Keys.autoConfirmFingerprints), autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), biometricLocked: null, @@ -219,17 +223,12 @@ export class StateMigrationService { enableBrowserIntegrationFingerprint: await this.get( v1Keys.enableBrowserIntegrationFingerprint ), - enableCloseToTray: await this.get(v1Keys.enableCloseToTray), enableFullWidth: await this.get(v1Keys.enableFullWidth), enableGravitars: await this.get(v1Keys.enableGravatars), - enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), - enableStartToTray: await this.get(v1Keys.enableStartToTray), - enableTray: await this.get(v1Keys.enableTray), environmentUrls: globals.environmentUrls, equivalentDomains: await this.get(v1Keys.equivalentDomains), minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), neverDomains: await this.get(v1Keys.neverDomains), - openAtLogin: await this.get(v1Keys.openAtLogin), passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), pinProtected: { decrypted: null, @@ -331,7 +330,6 @@ export class StateMigrationService { usesKeyConnector: null, }, settings: { - alwaysShowDock: await this.get(v1Keys.alwaysShowDock), autoConfirmFingerPrints: await this.get(v1Keys.autoConfirmFingerprints), autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), biometricLocked: null, @@ -356,17 +354,12 @@ export class StateMigrationService { enableBrowserIntegrationFingerprint: await this.get( v1Keys.enableBrowserIntegrationFingerprint ), - enableCloseToTray: await this.get(v1Keys.enableCloseToTray), enableFullWidth: await this.get(v1Keys.enableFullWidth), enableGravitars: await this.get(v1Keys.enableGravatars), - enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), - enableStartToTray: await this.get(v1Keys.enableStartToTray), - enableTray: await this.get(v1Keys.enableTray), environmentUrls: globals.environmentUrls, equivalentDomains: await this.get(v1Keys.equivalentDomains), minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), neverDomains: await this.get(v1Keys.neverDomains), - openAtLogin: await this.get(v1Keys.openAtLogin), passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), pinProtected: { decrypted: null, From 7300db703c7b8c9a98ac5e25c74a27e78bd90487 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 20 Jan 2022 10:30:01 -0500 Subject: [PATCH 029/120] [Bug] Change method scope for internal StateMigrationService methods (#619) A couple of helper methods were recently added to the StateMigrationService, but they were set to private and can't be used in children. Some clients, like the Directory Connector, extend the StateMigrationService and need access to these methods. --- common/src/services/stateMigration.service.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 511c8dc4..ab19af05 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -409,26 +409,26 @@ export class StateMigrationService { } } - private get options(): StorageOptions { + protected get options(): StorageOptions { return { htmlStorageLocation: HtmlStorageLocation.Local }; } - private get(key: string): Promise { + protected get(key: string): Promise { return this.storageService.get(key, this.options); } - private set(key: string, value: any): Promise { + protected set(key: string, value: any): Promise { if (value == null) { return this.storageService.remove(key, this.options); } return this.storageService.save(key, value, this.options); } - private async getGlobals(): Promise { + protected async getGlobals(): Promise { return await this.get(keys.global); } - private async getCurrentStateVersion(): Promise { + protected async getCurrentStateVersion(): Promise { return (await this.getGlobals())?.stateVersion; } } From cf1e483c7fa4c3ea16d1981eb833e286f034806d Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 20 Jan 2022 14:00:58 -0500 Subject: [PATCH 030/120] [bug] Account for entityId as a userId alternative during state migration (#622) Some clients, like Directory Connector, use different key for their user identifier: entityId We currently only check for userId in the migration service, but need to account for both. --- common/src/services/stateMigration.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index ab19af05..ddc191ae 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -193,7 +193,8 @@ export class StateMigrationService { alwaysShowDock: await this.get(v1Keys.alwaysShowDock), }; - const userId = await this.get(v1Keys.userId); + const userId = + (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId)); // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings From 19bf7c75a369c59328ee602f37570cf1f50f05b6 Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Thu, 20 Jan 2022 15:07:13 -0500 Subject: [PATCH 031/120] Use node-ts and jasmine-ts to run tests (#621) * Use node-ts and jasmine-ts to run tests * prettier * Add tsconf-paths module --- package-lock.json | 255 ++++++++++++++++++++++++++++++++------ package.json | 7 +- spec/support/jasmine.json | 6 +- 3 files changed, 222 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0416768..2ca4e006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "husky": "^7.0.4", "jasmine": "^3.7.0", "jasmine-core": "^3.7.1", + "jasmine-ts": "^0.4.0", "jasmine-ts-console-reporter": "^3.1.1", "jsdom": "^16.5.3", "karma": "^6.3.2", @@ -41,6 +42,8 @@ "rimraf": "^3.0.2", "rxjs": "^7.4.0", "ts-loader": "^8.1.0", + "ts-node": "^10.4.0", + "tsconfig-paths": "^3.12.0", "tslint": "^6.1.3", "ttypescript": "^1.5.12", "typemoq": "^2.1.0", @@ -461,7 +464,6 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "dev": true, - "peer": true, "engines": { "node": ">= 12" } @@ -471,7 +473,6 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, - "peer": true, "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" }, @@ -591,29 +592,25 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/component-emitter": { "version": "1.2.11", @@ -673,6 +670,12 @@ "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", "dev": true }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "node_modules/@types/lodash": { "version": "4.14.178", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", @@ -1242,8 +1245,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/argparse": { "version": "1.0.10", @@ -2627,8 +2629,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -5075,6 +5076,23 @@ "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", "dev": true }, + "node_modules/jasmine-ts": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", + "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", + "dev": true, + "dependencies": { + "yargs": "^17.0.1" + }, + "bin": { + "jasmine-ts": "lib/index.js" + }, + "peerDependencies": { + "jasmine": ">=3.4", + "ts-node": ">=3.2.0 <=11", + "typescript": ">=3.5.2" + } + }, "node_modules/jasmine-ts-console-reporter": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/jasmine-ts-console-reporter/-/jasmine-ts-console-reporter-3.1.1.tgz", @@ -5087,6 +5105,71 @@ "source-map-resolve": "^0.5.0" } }, + "node_modules/jasmine-ts/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/jasmine-ts/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/jasmine-ts/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/jasmine-ts/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/jasmine-ts/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/jasmine-ts/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" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5821,8 +5904,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/map-cache": { "version": "0.2.2", @@ -8169,6 +8251,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -8712,7 +8803,6 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, - "peer": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", @@ -8754,11 +8844,22 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "peer": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "node_modules/tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", @@ -10379,7 +10480,6 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "peer": true, "engines": { "node": ">=6" } @@ -10703,15 +10803,13 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "peer": true + "dev": true }, "@cspotcode/source-map-support": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, - "peer": true, "requires": { "@cspotcode/source-map-consumer": "0.8.0" } @@ -10807,29 +10905,25 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true, - "peer": true + "dev": true }, "@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true, - "peer": true + "dev": true }, "@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true, - "peer": true + "dev": true }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true, - "peer": true + "dev": true }, "@types/component-emitter": { "version": "1.2.11", @@ -10888,6 +10982,12 @@ "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/lodash": { "version": "4.14.178", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", @@ -11388,8 +11488,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true + "dev": true }, "argparse": { "version": "1.0.10", @@ -12530,8 +12629,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "peer": true + "dev": true }, "cross-spawn": { "version": "7.0.3", @@ -14438,6 +14536,67 @@ "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", "dev": true }, + "jasmine-ts": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz", + "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==", + "dev": true, + "requires": { + "yargs": "^17.0.1" + }, + "dependencies": { + "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.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" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "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.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "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 + } + } + }, "jasmine-ts-console-reporter": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/jasmine-ts-console-reporter/-/jasmine-ts-console-reporter-3.1.1.tgz", @@ -15029,8 +15188,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true + "dev": true }, "map-cache": { "version": "0.2.2", @@ -16930,6 +17088,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -17345,7 +17509,6 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, - "peer": true, "requires": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", @@ -17365,11 +17528,22 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "peer": true + "dev": true } } }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", @@ -18671,8 +18845,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true + "dev": true }, "zone.js": { "version": "0.11.4", diff --git a/package.json b/package.json index ce1d2a8f..d1a5a112 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "prettier": "prettier --write .", "test": "karma start ./spec/support/karma.conf.js --single-run", "test:watch": "karma start ./spec/support/karma.conf.js", - "test:node": "npm run build && jasmine", - "test:node:watch": "concurrently -k -n TSC,Node -c yellow,cyan \"npm run build:watch\" \"nodemon -w ./dist --delay 500ms --exec jasmine\"", + "test:node": "jasmine-ts -r tsconfig-paths/register", + "test:node:watch": "nodemon -w ./dist --delay 500ms --exec jasmine-ts -r tsconfig-paths/register", "prepare": "husky install" }, "devDependencies": { @@ -35,6 +35,7 @@ "husky": "^7.0.4", "jasmine": "^3.7.0", "jasmine-core": "^3.7.1", + "jasmine-ts": "^0.4.0", "jasmine-ts-console-reporter": "^3.1.1", "jsdom": "^16.5.3", "karma": "^6.3.2", @@ -52,6 +53,8 @@ "rimraf": "^3.0.2", "rxjs": "^7.4.0", "ts-loader": "^8.1.0", + "ts-node": "^10.4.0", + "tsconfig-paths": "^3.12.0", "tslint": "^6.1.3", "ttypescript": "^1.5.12", "typemoq": "^2.1.0", diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json index 16cf8e93..9a91e2f0 100644 --- a/spec/support/jasmine.json +++ b/spec/support/jasmine.json @@ -1,7 +1,7 @@ { - "spec_dir": "dist/spec", - "spec_files": ["common/**/*[sS]pec.js", "node/**/*[sS]pec.js", "electron/**/*[sS]pec.js"], - "helpers": ["helpers.js"], + "spec_dir": "spec", + "spec_files": ["common/**/*[sS]pec.ts", "node/**/*[sS]pec.ts", "electron/**/*[sS]pec.ts"], + "helpers": ["helpers.ts"], "stopSpecOnExpectationFailure": false, "random": true } From 025a4a5e3878bcc3f5126074f154e3d51aa9c091 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 20 Jan 2022 16:25:04 -0500 Subject: [PATCH 032/120] [bug] Index search service when setting decrypted ciphers (#620) With the move to a central StateService we erroniously cut out search indexing from the process of setting decrypted ciphers to memory. This commit calls the method responsible for setting decrypted ciphers and indexing when decrypting, instead of setting decrypted ciphers directly. --- common/src/services/cipher.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/cipher.service.ts b/common/src/services/cipher.service.ts index 00f94c91..e9002146 100644 --- a/common/src/services/cipher.service.ts +++ b/common/src/services/cipher.service.ts @@ -355,7 +355,7 @@ export class CipherService implements CipherServiceAbstraction { await Promise.all(promises); decCiphers.sort(this.getLocaleSortingFunction()); - await this.stateService.setDecryptedCiphers(decCiphers); + await this.setDecryptedCipherCache(decCiphers); return decCiphers; } From e1bdd2a95caf7dd09a2502ece50acfb08c290455 Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Fri, 21 Jan 2022 11:11:00 -0500 Subject: [PATCH 033/120] watch `ts` files and source directly (#623) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1a5a112..ef9d5ccd 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "test": "karma start ./spec/support/karma.conf.js --single-run", "test:watch": "karma start ./spec/support/karma.conf.js", "test:node": "jasmine-ts -r tsconfig-paths/register", - "test:node:watch": "nodemon -w ./dist --delay 500ms --exec jasmine-ts -r tsconfig-paths/register", + "test:node:watch": "nodemon -w ./angular -w ./common -w ./electron -w ./node -w ./shared -w ./spec --ext \"ts,js,mjs,json\" --exec jasmine-ts -r tsconfig-paths/register", "prepare": "husky install" }, "devDependencies": { From 69fe7b83398c61774f638bfef764279900107b14 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 21 Jan 2022 11:14:34 -0500 Subject: [PATCH 034/120] [bug] Always set environementUrls from client when scaffolding an account (#624) There is a use case that overrides locally set environmentUrls: an initial boot of a logged out application. We override environmentUrls with whatever the tempory settings store has, even if different urls are added before authenticating. This commit ensures we always use input environmentUrls. --- common/src/services/state.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 6e4da55d..49d5ab11 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2210,14 +2210,15 @@ export class StateService account.profile.userId, await this.defaultOnDiskLocalOptions() ); + // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session + const environmentUrls = account.settings.environmentUrls; if (storedAccount?.settings != null) { - // EnvironmentUrls are set before authenticating and should override whatever is stored from last session - storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } else if (await this.storageService.has(keys.tempAccountSettings)) { account.settings = await this.storageService.get(keys.tempAccountSettings); await this.storageService.remove(keys.tempAccountSettings); } + account.settings.environmentUrls = environmentUrls; await this.storageService.save( account.profile.userId, account, From 9b0e5ae4563d1680d117e414e8bae1a977639ef1 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 21 Jan 2022 12:41:15 -0500 Subject: [PATCH 035/120] [bug] Address existing data & defaults when migrating from an unauthenticated state (#626) --- common/src/services/state.service.ts | 1 + common/src/services/stateMigration.service.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 49d5ab11..446b9fde 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2219,6 +2219,7 @@ export class StateService await this.storageService.remove(keys.tempAccountSettings); } account.settings.environmentUrls = environmentUrls; + Object.assign(account.settings, this.createAccount().settings); await this.storageService.save( account.profile.userId, account, diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index ddc191ae..ec2a0986 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -193,6 +193,12 @@ export class StateMigrationService { alwaysShowDock: await this.get(v1Keys.alwaysShowDock), }; + // Some processes, like biometrics, may have already defined a value before migrations are run + const existingGlobals = await this.get(keys.global); + if (existingGlobals != null) { + Object.assign(globals, existingGlobals); + } + const userId = (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId)); From 074f1ee7b7b1c866fdb22184505cef1fad005e0c Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 21 Jan 2022 13:35:14 -0500 Subject: [PATCH 036/120] [bug] Set envUrls after assigning defaults during scaffolding (#627) --- common/src/services/state.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 446b9fde..a703fe6b 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2218,8 +2218,8 @@ export class StateService account.settings = await this.storageService.get(keys.tempAccountSettings); await this.storageService.remove(keys.tempAccountSettings); } - account.settings.environmentUrls = environmentUrls; Object.assign(account.settings, this.createAccount().settings); + account.settings.environmentUrls = environmentUrls; await this.storageService.save( account.profile.userId, account, From 1747f4d9e7bdaf5418011ecff5d36240a85d6e6e Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 24 Jan 2022 07:28:51 -0500 Subject: [PATCH 037/120] [bug] Set all urls when setting urls from storage (#628) --- common/src/services/environment.service.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index cf59d389..f1842fe9 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -116,11 +116,7 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { const urls: any = await this.stateService.getEnvironmentUrls(); const envUrls = new EnvironmentUrls(); - if (urls.base) { - this.baseUrl = envUrls.base = urls.base; - return; - } - + this.baseUrl = envUrls.base = urls.base; this.webVaultUrl = urls.webVault; this.apiUrl = envUrls.api = urls.api; this.identityUrl = envUrls.identity = urls.identity; From 4436e5fb609f7991cc168f5eaca776349dcc5531 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 24 Jan 2022 08:22:21 -0500 Subject: [PATCH 038/120] [bug] Ensure globals set before migration is run are not lost (#629) * [bug] Ensure globals set before migration is run are not lost Some fields, like biometrics, are set before we can run the state migration For some use cases, like initial install, this can lead to migration clearing those fields when it doesn't find them in storage. This commit sets up an order of checks for migrating globals that considers fields that may already have been set. * [style] Ran prettier --- common/src/services/stateMigration.service.ts | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index ec2a0986..d9038b3a 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -167,37 +167,45 @@ export class StateMigrationService { } }; - const globals: GlobalState = { - stateVersion: StateVersion.Two, - environmentUrls: - (await this.get(v1Keys.environmentUrls)) ?? new EnvironmentUrls(), - locale: await this.get(v1Keys.locale), - loginRedirect: null, - mainWindowSize: null, - noAutoPromptBiometrics: await this.get(v1Keys.disableAutoBiometricsPrompt), - noAutoPromptBiometricsText: await this.get(v1Keys.noAutoPromptBiometricsText), - organizationInvitation: null, - ssoCodeVerifier: await this.get(v1Keys.ssoCodeVerifier), - ssoOrganizationIdentifier: await this.get(v1Keys.ssoIdentifier), - ssoState: null, - rememberedEmail: await this.get(v1Keys.rememberedEmail), - theme: await this.get(v1Keys.theme), - vaultTimeout: await this.get(v1Keys.vaultTimeout), - vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), - window: null, - enableTray: await this.get(v1Keys.enableTray), - enableMinimizeToTray: await this.get(v1Keys.enableMinimizeToTray), - enableCloseToTray: await this.get(v1Keys.enableCloseToTray), - enableStartToTray: await this.get(v1Keys.enableStartToTray), - openAtLogin: await this.get(v1Keys.openAtLogin), - alwaysShowDock: await this.get(v1Keys.alwaysShowDock), - }; - - // Some processes, like biometrics, may have already defined a value before migrations are run - const existingGlobals = await this.get(keys.global); - if (existingGlobals != null) { - Object.assign(globals, existingGlobals); - } + // Some processes, like biometrics, may have already defined a value before migrations are run. + // We don't want to null out those values if they don't exist in the old storage scheme (like for new installs) + // So, the OOO for migration is that we: + // 1. Check for an existing storage value from the old storage structure OR + // 2. Check for a value already set by processes that run before migration OR + // 3. Assign the default value + const globals = (await this.get(keys.global)) ?? new GlobalState(); + globals.stateVersion = StateVersion.Two; + globals.environmentUrls = + (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls; + globals.locale = (await this.get(v1Keys.locale)) ?? globals.locale; + globals.noAutoPromptBiometrics = + (await this.get(v1Keys.disableAutoBiometricsPrompt)) ?? + globals.noAutoPromptBiometrics; + globals.noAutoPromptBiometricsText = + (await this.get(v1Keys.noAutoPromptBiometricsText)) ?? + globals.noAutoPromptBiometricsText; + globals.ssoCodeVerifier = + (await this.get(v1Keys.ssoCodeVerifier)) ?? globals.ssoCodeVerifier; + globals.ssoOrganizationIdentifier = + (await this.get(v1Keys.ssoIdentifier)) ?? globals.ssoOrganizationIdentifier; + globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState; + globals.rememberedEmail = + (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail; + globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme; + globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout; + globals.vaultTimeoutAction = + (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction; + globals.window = (await this.get(v1Keys.mainWindowSize)) ?? globals.window; + globals.enableTray = (await this.get(v1Keys.enableTray)) ?? globals.enableTray; + globals.enableMinimizeToTray = + (await this.get(v1Keys.enableMinimizeToTray)) ?? globals.enableMinimizeToTray; + globals.enableCloseToTray = + (await this.get(v1Keys.enableCloseToTray)) ?? globals.enableCloseToTray; + globals.enableStartToTray = + (await this.get(v1Keys.enableStartToTray)) ?? globals.enableStartToTray; + globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin; + globals.alwaysShowDock = + (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock; const userId = (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId)); From e5cc3de46d4bd628279977a3073efda895f3d2dd Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 24 Jan 2022 10:47:41 -0500 Subject: [PATCH 039/120] [bug] Move enableBrowserIntegration to global state (#630) --- common/src/models/domain/account.ts | 2 -- common/src/models/domain/globalState.ts | 2 ++ common/src/services/state.service.ts | 24 +++++++++---------- common/src/services/stateMigration.service.ts | 14 +++++------ 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index bfad62ac..2ca63686 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -122,8 +122,6 @@ export class AccountSettings { enableAlwaysOnTop?: boolean; enableAutoFillOnPageLoad?: boolean; enableBiometric?: boolean; - enableBrowserIntegration?: boolean; - enableBrowserIntegrationFingerprint?: boolean; enableFullWidth?: boolean; enableGravitars?: boolean; environmentUrls: EnvironmentUrls = new EnvironmentUrls(); diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index e7036fa2..90d53d7f 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -32,4 +32,6 @@ export class GlobalState { enableStartToTray?: boolean; openAtLogin?: boolean; alwaysShowDock?: boolean; + enableBrowserIntegration?: boolean; + enableBrowserIntegrationFingerprint?: boolean; } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index a703fe6b..f97c36f1 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -988,26 +988,26 @@ export class StateService async getEnableBrowserIntegration(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.enableBrowserIntegration ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableBrowserIntegration ?? false ); } async setEnableBrowserIntegration(value: boolean, options?: StorageOptions): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableBrowserIntegration = value; - await this.saveAccount( - account, + globals.enableBrowserIntegration = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } async getEnableBrowserIntegrationFingerprint(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.enableBrowserIntegrationFingerprint ?? false + (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) + ?.enableBrowserIntegrationFingerprint ?? false ); } @@ -1015,12 +1015,12 @@ export class StateService value: boolean, options?: StorageOptions ): Promise { - const account = await this.getAccount( + const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); - account.settings.enableBrowserIntegrationFingerprint = value; - await this.saveAccount( - account, + globals.enableBrowserIntegrationFingerprint = value; + await this.saveGlobals( + globals, this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index d9038b3a..f6c0882f 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -206,6 +206,12 @@ export class StateMigrationService { globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin; globals.alwaysShowDock = (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock; + globals.enableBrowserIntegration = + (await this.get(v1Keys.enableBrowserIntegration)) ?? + globals.enableBrowserIntegration; + globals.enableBrowserIntegrationFingerprint = + (await this.get(v1Keys.enableBrowserIntegrationFingerprint)) ?? + globals.enableBrowserIntegrationFingerprint; const userId = (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId)); @@ -234,10 +240,6 @@ export class StateMigrationService { enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), enableBiometric: await this.get(v1Keys.enableBiometric), - enableBrowserIntegration: await this.get(v1Keys.enableBrowserIntegration), - enableBrowserIntegrationFingerprint: await this.get( - v1Keys.enableBrowserIntegrationFingerprint - ), enableFullWidth: await this.get(v1Keys.enableFullWidth), enableGravitars: await this.get(v1Keys.enableGravatars), environmentUrls: globals.environmentUrls, @@ -365,10 +367,6 @@ export class StateMigrationService { enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), enableBiometric: await this.get(v1Keys.enableBiometric), - enableBrowserIntegration: await this.get(v1Keys.enableBrowserIntegration), - enableBrowserIntegrationFingerprint: await this.get( - v1Keys.enableBrowserIntegrationFingerprint - ), enableFullWidth: await this.get(v1Keys.enableFullWidth), enableGravitars: await this.get(v1Keys.enableGravatars), environmentUrls: globals.environmentUrls, From af7da0e94275f0f2899c3889fdd7aa4533bffe11 Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Mon, 24 Jan 2022 20:37:52 +0100 Subject: [PATCH 040/120] Ensure that initialization and migration only run once (#631) --- common/src/services/state.service.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index f97c36f1..a0178fd3 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -58,6 +58,8 @@ export class StateService protected state: State = new State(); + private hasBeenInited: boolean = false; + constructor( protected storageService: StorageService, protected secureStorageService: StorageService, @@ -67,11 +69,16 @@ export class StateService ) {} async init(): Promise { + if (this.hasBeenInited) { + return; + } + if (await this.stateMigrationService.needsMigration()) { await this.stateMigrationService.migrate(); } await this.initAccountState(); + this.hasBeenInited = true; } async initAccountState() { From a985621bb989e548391f74679694b39f76295e60 Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Mon, 24 Jan 2022 15:40:04 -0600 Subject: [PATCH 041/120] [Icons] Update font sheet (#582) * Initial commit for icon update * Updated lg to reflect current usage * Created BitwardenIconsService * Prettier updates * More prettier updates * Updated font * Prettier * Added new icons to service map * Removed variables and converted css to use scss maps and exported list * Updated font sheet (130) * Removed base class and replaced bolt icon * Added 3x icon size * Added sm text size helper * Added rotate 270 helper * Prettier * Updated font sheet * Requested Changes * Removed BitwardenIcons Util - obsolete --- angular/src/components/callout.component.html | 2 +- angular/src/components/callout.component.ts | 6 +- angular/src/components/icon.component.html | 2 +- angular/src/components/icon.component.ts | 25 +- .../verify-master-password.component.html | 2 +- angular/src/scss/bwicons/fonts/bwi-font.svg | 169 +++++++++++ angular/src/scss/bwicons/fonts/bwi-font.ttf | Bin 0 -> 67428 bytes angular/src/scss/bwicons/fonts/bwi-font.woff | Bin 0 -> 67504 bytes angular/src/scss/bwicons/fonts/bwi-font.woff2 | Bin 0 -> 29368 bytes angular/src/scss/bwicons/styles/style.scss | 267 ++++++++++++++++++ 10 files changed, 448 insertions(+), 25 deletions(-) create mode 100644 angular/src/scss/bwicons/fonts/bwi-font.svg create mode 100644 angular/src/scss/bwicons/fonts/bwi-font.ttf create mode 100644 angular/src/scss/bwicons/fonts/bwi-font.woff create mode 100644 angular/src/scss/bwicons/fonts/bwi-font.woff2 create mode 100644 angular/src/scss/bwicons/styles/style.scss diff --git a/angular/src/components/callout.component.html b/angular/src/components/callout.component.html index dbd19df8..0fadc19a 100644 --- a/angular/src/components/callout.component.html +++ b/angular/src/components/callout.component.html @@ -5,7 +5,7 @@ [attr.role]="useAlertRole ? 'alert' : null" >

- + {{ title }}

diff --git a/angular/src/components/callout.component.ts b/angular/src/components/callout.component.ts index 98105e82..b9685f0e 100644 --- a/angular/src/components/callout.component.ts +++ b/angular/src/components/callout.component.ts @@ -36,7 +36,7 @@ export class CalloutComponent implements OnInit { this.title = this.i18nService.t("warning"); } if (this.icon === undefined) { - this.icon = "fa-warning"; + this.icon = "bwi-exclamation-triangle"; } } else if (this.type === "error") { this.calloutStyle = "danger"; @@ -44,7 +44,7 @@ export class CalloutComponent implements OnInit { this.title = this.i18nService.t("error"); } if (this.icon === undefined) { - this.icon = "fa-bolt"; + this.icon = "bwi-error"; } } else if (this.type === "tip") { this.calloutStyle = "success"; @@ -52,7 +52,7 @@ export class CalloutComponent implements OnInit { this.title = this.i18nService.t("tip"); } if (this.icon === undefined) { - this.icon = "fa-lightbulb-o"; + this.icon = "bwi-lightbulb"; } } } diff --git a/angular/src/components/icon.component.html b/angular/src/components/icon.component.html index 878a0ee9..fdfb3a58 100644 --- a/angular/src/components/icon.component.html +++ b/angular/src/components/icon.component.html @@ -1,4 +1,4 @@ diff --git a/angular/src/components/icon.component.ts b/angular/src/components/icon.component.ts index d30ce20e..ca1f2555 100644 --- a/angular/src/components/icon.component.ts +++ b/angular/src/components/icon.component.ts @@ -9,15 +9,6 @@ import { StateService } from "jslib-common/abstractions/state.service"; import { Utils } from "jslib-common/misc/utils"; -const IconMap: any = { - "fa-globe": String.fromCharCode(0xf0ac), - "fa-sticky-note-o": String.fromCharCode(0xf24a), - "fa-id-card-o": String.fromCharCode(0xf2c3), - "fa-credit-card": String.fromCharCode(0xf09d), - "fa-android": String.fromCharCode(0xf17b), - "fa-apple": String.fromCharCode(0xf179), -}; - /** * Provides a mapping from supported card brands to * the filenames of icon that should be present in images/cards folder of clients. @@ -59,25 +50,21 @@ export class IconComponent implements OnChanges { this.load(); } - get iconCode(): string { - return IconMap[this.icon]; - } - protected load() { switch (this.cipher.type) { case CipherType.Login: - this.icon = "fa-globe"; + this.icon = "bwi-globe"; this.setLoginIcon(); break; case CipherType.SecureNote: - this.icon = "fa-sticky-note-o"; + this.icon = "bwi-sticky-note"; break; case CipherType.Card: - this.icon = "fa-credit-card"; + this.icon = "bwi-credit-card"; this.setCardIcon(); break; case CipherType.Identity: - this.icon = "fa-id-card-o"; + this.icon = "bwi-id-card"; break; default: break; @@ -90,10 +77,10 @@ export class IconComponent implements OnChanges { let isWebsite = false; if (hostnameUri.indexOf("androidapp://") === 0) { - this.icon = "fa-android"; + this.icon = "bwi-android"; this.image = null; } else if (hostnameUri.indexOf("iosapp://") === 0) { - this.icon = "fa-apple"; + this.icon = "bwi-apple"; this.image = null; } else if ( this.imageEnabled && diff --git a/angular/src/components/verify-master-password.component.html b/angular/src/components/verify-master-password.component.html index 19330ff6..71793ad6 100644 --- a/angular/src/components/verify-master-password.component.html +++ b/angular/src/components/verify-master-password.component.html @@ -24,7 +24,7 @@ {{ "sendCode" | i18n }} - + {{ "codeSent" | i18n }}
diff --git a/angular/src/scss/bwicons/fonts/bwi-font.svg b/angular/src/scss/bwicons/fonts/bwi-font.svg new file mode 100644 index 00000000..4584939d --- /dev/null +++ b/angular/src/scss/bwicons/fonts/bwi-font.svg @@ -0,0 +1,169 @@ + + + + + + +{ + "fontFamily": "bwi-font", + "designer": "Bitwarden, Inc.", + "designerURL": "", + "description": "Font generated by IcoMoon.", + "copyright": "Bitwarden, Inc.", + "majorVersion": 1, + "minorVersion": 0, + "version": "Version 1.0", + "fontId": "bwi-font", + "psName": "bwi-font", + "subFamily": "Regular", + "fullName": "bwi-font" +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/angular/src/scss/bwicons/fonts/bwi-font.ttf b/angular/src/scss/bwicons/fonts/bwi-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2e12584762577a1800f3b4ab127f0864674289a9 GIT binary patch literal 67428 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 PAE8%%rON2ZSN;57=v$2n literal 0 HcmV?d00001 diff --git a/angular/src/scss/bwicons/fonts/bwi-font.woff b/angular/src/scss/bwicons/fonts/bwi-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..b05f9b99409571f57db6bfb6d797ea9f10330076 GIT binary patch literal 67504 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

o literal 0 HcmV?d00001 diff --git a/angular/src/scss/bwicons/fonts/bwi-font.woff2 b/angular/src/scss/bwicons/fonts/bwi-font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d4e4703a8aa2b342e509345c40cd741066152f11 GIT binary patch literal 29368 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 li { + position: relative; + } +} + +.bwi-li { + position: absolute; + left: -(30em / 14); + width: (30em / 14); + top: (2em / 14); + text-align: center; + &.bwi-lg { + left: -(30em / 14) + (4em / 14); + } +} + +// Rotation +.bwi-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} + +// For new icons - add their glyph name and value to the map below +$icomoon-font-family: "bwi-font" !default; +$icomoon-font-path: "fonts" !default; + +$icons: ( + "save-changes": "\e988", + "browser": "\e985", + "mobile": "\e986", + "cli": "\e987", + "providers": "\e983", + "vault": "\e984", + "folder-closed-f": "\e982", + "rocket": "\e9ee", + "ellipsis-h": "\e9ef", + "ellipsis-v": "\e9f0", + "safari": "\e974", + "opera": "\e975", + "firefox": "\e976", + "edge": "\e977", + "chrome": "\e978", + "star-f": "\e979", + "arrow-circle-up": "\e97a", + "arrow-circle-right": "\e97b", + "arrow-circle-left": "\e97c", + "arrow-circle-down": "\e97d", + "undo": "\e97e", + "bolt": "\e97f", + "puzzle": "\e980", + "rss": "\e973", + "dbl-angle-left": "\e970", + "dbl-angle-right": "\e971", + "hamburger": "\e972", + "bw-folder-open-f": "\e93e", + "desktop": "\e96a", + "angle-left": "\e96b", + "user": "\e900", + "user-f": "\e901", + "key": "\e902", + "share-square": "\e903", + "hashtag": "\e904", + "clone": "\e905", + "list-alt": "\e906", + "id-card": "\e907", + "credit-card": "\e908", + "globe": "\e909", + "sticky-note": "\e90a", + "folder": "\e90b", + "lock": "\e90c", + "lock-f": "\e90d", + "generate": "\e90e", + "generate-f": "\e90f", + "cog": "\e910", + "cog-f": "\e911", + "check-circle": "\e912", + "eye-2": "\e913", + "pencil-square": "\e914", + "bookmark": "\e915", + "files": "\e916", + "trash": "\e917", + "plus": "\e918", + "star": "\e919", + "list": "\e91a", + "angle-right": "\e91b", + "external-link": "\e91c", + "refresh": "\e91d", + "search": "\e91f", + "filter": "\e920", + "plus-circle": "\e921", + "user-circle": "\e922", + "question-circle": "\e923", + "cogs": "\e924", + "minus-circle": "\e925", + "send": "\e926", + "send-f": "\e927", + "download": "\e928", + "pencil": "\e929", + "sign-out": "\e92a", + "share": "\e92b", + "clock": "\e92c", + "angle-down": "\e92d", + "caret-down": "\e92e", + "square": "\e92f", + "collection": "\e930", + "bank": "\e931", + "shield": "\e932", + "stop": "\e933", + "plus-square": "\e934", + "save": "\e935", + "sign-in": "\e936", + "spinner": "\e937", + "dollar": "\e939", + "check": "\e93a", + "check-square": "\e93b", + "minus-square": "\e93c", + "close": "\e93d", + "share-arrow": "\e96c", + "paperclip": "\e93f", + "bitcoin": "\e940", + "cut": "\e941", + "frown": "\e942", + "folder-open": "\e943", + "bug": "\e946", + "chain-broken": "\e947", + "dashboard": "\e948", + "envelope": "\e949", + "exclamation-circle": "\e94a", + "exclamation-triangle": "\e94b", + "caret-right": "\e94c", + "file-pdf": "\e94e", + "file-text": "\e94f", + "info-circle": "\e952", + "lightbulb": "\e953", + "link": "\e954", + "linux": "\e956", + "long-arrow-right": "\e957", + "money": "\e958", + "play": "\e959", + "reddit": "\e95a", + "refresh-tab": "\e95b", + "sitemap": "\e95c", + "sliders": "\e95d", + "tag": "\e95e", + "thumb-tack": "\e95f", + "thumbs-up": "\e960", + "unlock": "\e962", + "users": "\e963", + "wrench": "\e965", + "ban": "\e967", + "camera": "\e968", + "chevron-up": "\e969", + "eye-slash-2": "\e96d", + "file": "\e96e", + "paste": "\e96f", + "github": "\e950", + "facebook": "\e94d", + "paypal": "\e938", + "google": "\e951", + "linkedin": "\e955", + "discourse": "\e91e", + "twitter": "\e961", + "youtube": "\e966", + "windows": "\e964", + "apple": "\e945", + "android": "\e944", + "error": "\e981", +); + +@each $name, $glyph in $icons { + .bwi-#{$name}:before { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "#{$icomoon-font-family}" !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: $glyph; + } +} + +:export { + @each $name, $glyph in $icons { + #{$name}: $glyph; + } +} From e1d4c4c90370585d28e12c1ec451e8f55851bb88 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 25 Jan 2022 15:45:02 +0100 Subject: [PATCH 042/120] Expose getKeyFromStorage with userId (#633) --- common/src/abstractions/crypto.service.ts | 2 +- electron/src/services/electronCrypto.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/abstractions/crypto.service.ts b/common/src/abstractions/crypto.service.ts index 4e861952..3397d0d5 100644 --- a/common/src/abstractions/crypto.service.ts +++ b/common/src/abstractions/crypto.service.ts @@ -21,7 +21,7 @@ export abstract class CryptoService { ) => Promise; setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise; getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise; - getKeyFromStorage: (keySuffix: KeySuffixOptions) => Promise; + getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise; getKeyHash: () => Promise; compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise; getEncKey: (key?: SymmetricCryptoKey) => Promise; diff --git a/electron/src/services/electronCrypto.service.ts b/electron/src/services/electronCrypto.service.ts index a98ad0d4..7eb01e49 100644 --- a/electron/src/services/electronCrypto.service.ts +++ b/electron/src/services/electronCrypto.service.ts @@ -38,9 +38,9 @@ export class ElectronCryptoService extends CryptoService { } } - protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions) { + protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string) { await this.upgradeSecurelyStoredKey(); - return super.retrieveKeyFromStorage(keySuffix); + return super.retrieveKeyFromStorage(keySuffix, userId); } /** From 946fc20674e400e9aa6add97b8e9dbd573cbc966 Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Tue, 25 Jan 2022 09:58:53 -0600 Subject: [PATCH 043/120] [Icons] Global variable update (#632) * [Icons] Global variable update * Reverted to base class in order to reduce redundant css * Adjusted comment --- angular/src/scss/bwicons/styles/style.scss | 35 ++++++++++++---------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/angular/src/scss/bwicons/styles/style.scss b/angular/src/scss/bwicons/styles/style.scss index 5aaf823b..ef0862cb 100644 --- a/angular/src/scss/bwicons/styles/style.scss +++ b/angular/src/scss/bwicons/styles/style.scss @@ -1,3 +1,6 @@ +$icomoon-font-family: "bwi-font" !default; +$icomoon-font-path: "fonts" !default; + // New font sheet? Update the font-face information below @font-face { font-family: "#{$icomoon-font-family}"; @@ -8,6 +11,22 @@ font-display: block; } +// Base Class +.bwi { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "#{$icomoon-font-family}" !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + // Fixed Width Icons .bwi-fw { width: (18em / 14); @@ -95,9 +114,6 @@ } // For new icons - add their glyph name and value to the map below -$icomoon-font-family: "bwi-font" !default; -$icomoon-font-path: "fonts" !default; - $icons: ( "save-changes": "\e988", "browser": "\e985", @@ -243,19 +259,6 @@ $icons: ( @each $name, $glyph in $icons { .bwi-#{$name}:before { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: "#{$icomoon-font-family}" !important; - speak: never; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - display: inline-block; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; content: $glyph; } } From 4722a287ec7212b8e67d02ec7ea1a9be0990ee6e Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Tue, 25 Jan 2022 12:34:11 -0500 Subject: [PATCH 044/120] [bug] Ensure clients that always remember emails have an avenue to do so (#635) --- angular/src/components/login.component.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/angular/src/components/login.component.ts b/angular/src/components/login.component.ts index 5cfd6a6d..e860ca9c 100644 --- a/angular/src/components/login.component.ts +++ b/angular/src/components/login.component.ts @@ -35,6 +35,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit protected twoFactorRoute = "2fa"; protected successRoute = "vault"; protected forcePasswordResetRoute = "update-temp-password"; + protected alwaysRememberEmail: boolean = false; constructor( protected authService: AuthService, @@ -58,7 +59,9 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit this.email = ""; } } - this.rememberEmail = (await this.stateService.getRememberedEmail()) != null; + if (!this.alwaysRememberEmail) { + this.rememberEmail = (await this.stateService.getRememberedEmail()) != null; + } if (Utils.isBrowser && !Utils.isNode) { this.focusInput(); } @@ -95,7 +98,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit try { this.formPromise = this.authService.logIn(this.email, this.masterPassword, this.captchaToken); const response = await this.formPromise; - if (this.rememberEmail) { + if (this.rememberEmail || this.alwaysRememberEmail) { await this.stateService.setRememberedEmail(this.email); } else { await this.stateService.setRememberedEmail(null); From 5353cf03b5ad8d1b7666d93341ac8b0c302377ce Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Wed, 26 Jan 2022 23:04:55 +0100 Subject: [PATCH 045/120] BEEEP: Add importer for Keeper in json format (#608) * Add testdata, create types for keeperjson import * Create keeperjson importer and tests * Register, Create instance of keeperjson importer * Move keeperCsvImporter to keeperImporters folder * Fixed import of BaseImporter * Removed unnecessary check for key * Move instantiation of importer into beforeEach * Fixed the second import with a wrong path * Adjust types based on new test export * Add test case for empty notes and custom fields * Implement logic for failed test case * Removed test expectation --- .../keeperCsvImporter.ts | 8 +- .../keeperImporters/keeperJsonImporter.ts | 70 +++++++++++ .../keeperImporters/types/keeperJsonTypes.ts | 41 +++++++ common/src/services/import.service.ts | 6 +- .../importers/keeperJsonImporter.spec.ts | 109 ++++++++++++++++++ .../importers/testData/keeperJson/testData.ts | 90 +++++++++++++++ 6 files changed, 319 insertions(+), 5 deletions(-) rename common/src/importers/{ => keeperImporters}/keeperCsvImporter.ts (85%) create mode 100644 common/src/importers/keeperImporters/keeperJsonImporter.ts create mode 100644 common/src/importers/keeperImporters/types/keeperJsonTypes.ts create mode 100644 spec/common/importers/keeperJsonImporter.spec.ts create mode 100644 spec/common/importers/testData/keeperJson/testData.ts diff --git a/common/src/importers/keeperCsvImporter.ts b/common/src/importers/keeperImporters/keeperCsvImporter.ts similarity index 85% rename from common/src/importers/keeperCsvImporter.ts rename to common/src/importers/keeperImporters/keeperCsvImporter.ts index 88ed061e..56861b79 100644 --- a/common/src/importers/keeperCsvImporter.ts +++ b/common/src/importers/keeperImporters/keeperCsvImporter.ts @@ -1,9 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; -import { ImportResult } from "../models/domain/importResult"; +import { ImportResult } from "../../models/domain/importResult"; -import { FolderView } from "../models/view/folderView"; +import { FolderView } from "../../models/view/folderView"; export class KeeperCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/keeperImporters/keeperJsonImporter.ts b/common/src/importers/keeperImporters/keeperJsonImporter.ts new file mode 100644 index 00000000..47e41114 --- /dev/null +++ b/common/src/importers/keeperImporters/keeperJsonImporter.ts @@ -0,0 +1,70 @@ +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; + +import { ImportResult } from "../../models/domain/importResult"; + +import { KeeperJsonExport, RecordsEntity } from "./types/keeperJsonTypes"; + +export class KeeperJsonImporter extends BaseImporter implements Importer { + parse(data: string): Promise { + const result = new ImportResult(); + const keeperExport: KeeperJsonExport = JSON.parse(data); + if (keeperExport == null || keeperExport.records == null || keeperExport.records.length === 0) { + result.success = false; + return Promise.resolve(result); + } + + keeperExport.records.forEach((record) => { + this.parseFolders(result, record); + + const cipher = this.initLoginCipher(); + cipher.name = record.title; + cipher.login.username = record.login; + cipher.login.password = record.password; + + cipher.login.uris = this.makeUriArray(record.login_url); + cipher.notes = record.notes; + + if (record.custom_fields != null) { + let customfieldKeys = Object.keys(record.custom_fields); + if (record.custom_fields["TFC:Keeper"] != null) { + customfieldKeys = customfieldKeys.filter((item) => item !== "TFC:Keeper"); + cipher.login.totp = record.custom_fields["TFC:Keeper"]; + } + + customfieldKeys.forEach((key) => { + this.processKvp(cipher, key, record.custom_fields[key]); + }); + } + + this.convertToNoteIfNeeded(cipher); + this.cleanupCipher(cipher); + result.ciphers.push(cipher); + }); + + if (this.organization) { + this.moveFoldersToCollections(result); + } + + result.success = true; + return Promise.resolve(result); + } + + private parseFolders(result: ImportResult, record: RecordsEntity) { + if (record.folders == null || record.folders.length === 0) { + return; + } + + record.folders.forEach((item) => { + if (item.folder != null) { + this.processFolder(result, item.folder); + return; + } + + if (item.shared_folder != null) { + this.processFolder(result, item.shared_folder); + return; + } + }); + } +} diff --git a/common/src/importers/keeperImporters/types/keeperJsonTypes.ts b/common/src/importers/keeperImporters/types/keeperJsonTypes.ts new file mode 100644 index 00000000..1f6d2ea4 --- /dev/null +++ b/common/src/importers/keeperImporters/types/keeperJsonTypes.ts @@ -0,0 +1,41 @@ +export interface KeeperJsonExport { + shared_folders?: SharedFoldersEntity[] | null; + records?: RecordsEntity[] | null; +} + +export interface SharedFoldersEntity { + path: string; + manage_users: boolean; + manage_records: boolean; + can_edit: boolean; + can_share: boolean; + permissions?: PermissionsEntity[] | null; +} + +export interface PermissionsEntity { + uid?: string | null; + manage_users: boolean; + manage_records: boolean; + name?: string | null; +} + +export interface RecordsEntity { + title: string; + login: string; + password: string; + login_url: string; + notes?: string; + custom_fields?: CustomFields; + folders?: FoldersEntity[] | null; +} + +export type CustomFields = { + [key: string]: string | null; +}; + +export interface FoldersEntity { + folder?: string | null; + shared_folder?: string | null; + can_edit?: boolean | null; + can_share?: boolean | null; +} diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 7d8cfa92..adf014bf 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -49,7 +49,8 @@ import { Importer } from "../importers/importer"; import { KasperskyTxtImporter } from "../importers/kasperskyTxtImporter"; import { KeePass2XmlImporter } from "../importers/keepass2XmlImporter"; import { KeePassXCsvImporter } from "../importers/keepassxCsvImporter"; -import { KeeperCsvImporter } from "../importers/keeperCsvImporter"; +import { KeeperCsvImporter } from "../importers/keeperImporters/keeperCsvImporter"; +import { KeeperJsonImporter } from "../importers/keeperImporters/keeperJsonImporter"; import { LastPassCsvImporter } from "../importers/lastpassCsvImporter"; import { LogMeOnceCsvImporter } from "../importers/logMeOnceCsvImporter"; import { MeldiumCsvImporter } from "../importers/meldiumCsvImporter"; @@ -100,6 +101,7 @@ export class ImportService implements ImportServiceAbstraction { { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, { id: "roboformcsv", name: "RoboForm (csv)" }, { id: "keepercsv", name: "Keeper (csv)" }, + { id: "keeperjson", name: "Keeper (json)" }, { id: "enpasscsv", name: "Enpass (csv)" }, { id: "enpassjson", name: "Enpass (json)" }, { id: "safeincloudxml", name: "SafeInCloud (xml)" }, @@ -251,6 +253,8 @@ export class ImportService implements ImportServiceAbstraction { return new OnePasswordMacCsvImporter(); case "keepercsv": return new KeeperCsvImporter(); + case "keeperjson": + return new KeeperJsonImporter(); case "passworddragonxml": return new PasswordDragonXmlImporter(); case "enpasscsv": diff --git a/spec/common/importers/keeperJsonImporter.spec.ts b/spec/common/importers/keeperJsonImporter.spec.ts new file mode 100644 index 00000000..3a4f34c2 --- /dev/null +++ b/spec/common/importers/keeperJsonImporter.spec.ts @@ -0,0 +1,109 @@ +import { Utils } from "jslib-common/misc/utils"; + +import { KeeperJsonImporter as Importer } from "jslib-common/importers/keeperImporters/keeperJsonImporter"; + +import { testData as TestData } from "./testData/keeperJson/testData"; + +describe("Keeper Json Importer", () => { + const testDataJson = JSON.stringify(TestData); + + let importer: Importer; + beforeEach(() => { + importer = new Importer(); + }); + + it("should parse login data", async () => { + const result = await importer.parse(testDataJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("Bank Account 1"); + expect(cipher.login.username).toEqual("customer1234"); + expect(cipher.login.password).toEqual("4813fJDHF4239fdk"); + expect(cipher.login.uris.length).toEqual(1); + const uriView = cipher.login.uris.shift(); + expect(uriView.uri).toEqual("https://chase.com"); + expect(cipher.notes).toEqual("These are some notes."); + + const cipher2 = result.ciphers.shift(); + expect(cipher2.name).toEqual("Bank Account 2"); + expect(cipher2.login.username).toEqual("mybankusername"); + expect(cipher2.login.password).toEqual("w4k4k193f$^&@#*%2"); + expect(cipher2.login.uris.length).toEqual(1); + const uriView2 = cipher2.login.uris.shift(); + expect(uriView2.uri).toEqual("https://amex.com"); + expect(cipher2.notes).toEqual("Some great information here."); + + const cipher3 = result.ciphers.shift(); + expect(cipher3.name).toEqual("Some Account"); + expect(cipher3.login.username).toEqual("someUserName"); + expect(cipher3.login.password).toEqual("w4k4k1wergf$^&@#*%2"); + expect(cipher3.notes).toBeNull(); + expect(cipher3.fields).toBeNull(); + expect(cipher3.login.uris.length).toEqual(1); + const uriView3 = cipher3.login.uris.shift(); + expect(uriView3.uri).toEqual("https://example.com"); + }); + + it("should import TOTP when present", async () => { + const result = await importer.parse(testDataJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.login.totp).toBeNull(); + + // 2nd Cipher + const cipher2 = result.ciphers.shift(); + expect(cipher2.login.totp).toEqual( + "otpauth://totp/Amazon:me@company.com?secret=JBSWY3DPEHPK3PXP&issuer=Amazon&algorithm=SHA1&digits=6&period=30" + ); + }); + + it("should parse custom fields", async () => { + const result = await importer.parse(testDataJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.fields.length).toBe(1); + expect(cipher.fields[0].name).toEqual("Account Number"); + expect(cipher.fields[0].value).toEqual("123-456-789"); + + // 2nd Cipher + const cipher2 = result.ciphers.shift(); + expect(cipher2.fields.length).toBe(2); + expect(cipher2.fields[0].name).toEqual("Security Group"); + expect(cipher2.fields[0].value).toEqual("Public"); + + expect(cipher2.fields[1].name).toEqual("IP Address"); + expect(cipher2.fields[1].value).toEqual("12.45.67.8"); + }); + + it("should create folders and assigned ciphers to them", async () => { + const result = await importer.parse(testDataJson); + expect(result != null).toBe(true); + + const folders = result.folders; + expect(folders.length).toBe(2); + expect(folders[0].name).toBe("Optional Private Folder 1"); + expect(folders[1].name).toBe("My Customer 1"); + + expect(result.folderRelationships[0]).toEqual([0, 0]); + expect(result.folderRelationships[1]).toEqual([1, 0]); + expect(result.folderRelationships[2]).toEqual([1, 1]); + }); + + it("should create collections if part of an organization", async () => { + importer.organizationId = Utils.newGuid(); + const result = await importer.parse(testDataJson); + expect(result != null).toBe(true); + + const collections = result.collections; + expect(collections.length).toBe(2); + expect(collections[0].name).toBe("Optional Private Folder 1"); + expect(collections[1].name).toBe("My Customer 1"); + + expect(result.collectionRelationships[0]).toEqual([0, 0]); + expect(result.collectionRelationships[1]).toEqual([1, 0]); + expect(result.collectionRelationships[2]).toEqual([1, 1]); + }); +}); diff --git a/spec/common/importers/testData/keeperJson/testData.ts b/spec/common/importers/testData/keeperJson/testData.ts new file mode 100644 index 00000000..fee8f54c --- /dev/null +++ b/spec/common/importers/testData/keeperJson/testData.ts @@ -0,0 +1,90 @@ +import { KeeperJsonExport } from "jslib-common/importers/keeperImporters/types/keeperJsonTypes"; + +export const testData: KeeperJsonExport = { + shared_folders: [ + { + path: "My Customer 1", + manage_users: true, + manage_records: true, + can_edit: true, + can_share: true, + permissions: [ + { + uid: "kVM96KGEoGxhskZoSTd_jw", + manage_users: true, + manage_records: true, + }, + { + name: "user@mycompany.com", + manage_users: true, + manage_records: true, + }, + ], + }, + { + path: "Testing\\My Customer 2", + manage_users: true, + manage_records: true, + can_edit: true, + can_share: true, + permissions: [ + { + uid: "ih1CggiQ-3ENXcn4G0sl-g", + manage_users: true, + manage_records: true, + }, + { + name: "user@mycompany.com", + manage_users: true, + manage_records: true, + }, + ], + }, + ], + records: [ + { + title: "Bank Account 1", + login: "customer1234", + password: "4813fJDHF4239fdk", + login_url: "https://chase.com", + notes: "These are some notes.", + custom_fields: { + "Account Number": "123-456-789", + }, + folders: [ + { + folder: "Optional Private Folder 1", + }, + ], + }, + { + title: "Bank Account 2", + login: "mybankusername", + password: "w4k4k193f$^&@#*%2", + login_url: "https://amex.com", + notes: "Some great information here.", + custom_fields: { + "Security Group": "Public", + "IP Address": "12.45.67.8", + "TFC:Keeper": + "otpauth://totp/Amazon:me@company.com?secret=JBSWY3DPEHPK3PXP&issuer=Amazon&algorithm=SHA1&digits=6&period=30", + }, + folders: [ + { + folder: "Optional Private Folder 1", + }, + { + shared_folder: "My Customer 1", + can_edit: true, + can_share: true, + }, + ], + }, + { + title: "Some Account", + login: "someUserName", + password: "w4k4k1wergf$^&@#*%2", + login_url: "https://example.com", + }, + ], +}; From 0a2ebf6e50d4fbb8e62592f735fd2f19b87daca3 Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Thu, 27 Jan 2022 04:21:32 -0600 Subject: [PATCH 046/120] [Icons] Fix source paths (#636) Co-authored-by: Hinton --- angular/src/components/icon.component.html | 2 +- angular/src/scss/bwicons/styles/style.scss | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/angular/src/components/icon.component.html b/angular/src/components/icon.component.html index fdfb3a58..a8e4ac9f 100644 --- a/angular/src/components/icon.component.html +++ b/angular/src/components/icon.component.html @@ -1,4 +1,4 @@

diff --git a/angular/src/scss/bwicons/styles/style.scss b/angular/src/scss/bwicons/styles/style.scss index ef0862cb..3c07ac4a 100644 --- a/angular/src/scss/bwicons/styles/style.scss +++ b/angular/src/scss/bwicons/styles/style.scss @@ -1,11 +1,13 @@ $icomoon-font-family: "bwi-font" !default; -$icomoon-font-path: "fonts" !default; +$icomoon-font-path: "~@bitwarden/jslib-angular/src/scss/bwicons/fonts/" !default; // New font sheet? Update the font-face information below @font-face { font-family: "#{$icomoon-font-family}"; - src: url("data:application/x-font-ttf;charset=utf-8;base64,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") - format("truetype"); + src: url($icomoon-font-path + "bwi-font.svg") format("svg"), + url($icomoon-font-path + "bwi-font.ttf") format("truetype"), + url($icomoon-font-path + "bwi-font.woff") format("woff"), + url($icomoon-font-path + "bwi-font.woff2") format("woff2"); font-weight: normal; font-style: normal; font-display: block; From 0186610ca47e2c5567389a0bf094c32806a6db2f Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Thu, 27 Jan 2022 15:31:13 +0100 Subject: [PATCH 047/120] Change the icon baseline to 14% (#637) --- angular/src/scss/bwicons/fonts/bwi-font.svg | 282 +++++++++--------- angular/src/scss/bwicons/fonts/bwi-font.ttf | Bin 67428 -> 67428 bytes angular/src/scss/bwicons/fonts/bwi-font.woff | Bin 67504 -> 67504 bytes angular/src/scss/bwicons/fonts/bwi-font.woff2 | Bin 29368 -> 29376 bytes angular/src/scss/bwicons/styles/style.scss | 21 +- 5 files changed, 143 insertions(+), 160 deletions(-) diff --git a/angular/src/scss/bwicons/fonts/bwi-font.svg b/angular/src/scss/bwicons/fonts/bwi-font.svg index 4584939d..6084f2e3 100644 --- a/angular/src/scss/bwicons/fonts/bwi-font.svg +++ b/angular/src/scss/bwicons/fonts/bwi-font.svg @@ -23,147 +23,147 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/angular/src/scss/bwicons/fonts/bwi-font.ttf b/angular/src/scss/bwicons/fonts/bwi-font.ttf index 2e12584762577a1800f3b4ab127f0864674289a9..900da5ca181746494004c3d344b414fac9844b65 100644 GIT binary patch delta 2815 zcmXw5dtA-g7T;^{^E)UMcHNv=F{T}6iSobn#;44u5?F%=F%=T~G*m&8&AgXD1$ zdF;UlGaQdRx`aGyNDR$zeUQhDM{|C6{m%J0{n2Ny-`d~xUEjU-TKjRj>2bQL4gv^ebLGKrjX>W7@^3lVT<|`r#${!dK+oX(|~^Kb!tqJ#kaD zI4z#75^-!5y1`K;NtB8dc^;|*2)x0QloWAWB;g2=3{~*12v?F#s!+EzF>z>$KIYeo zs;_0eDpdexV3Vp#$iT?3vuYqfKfF;b-SC*~CV=ysINjZ<_?j3mljZIKz~MD|)<`xi zSvCFuScEo@QctG~Ys5OU5iEhy!1Paz@O#gE&dYFct(iuYGqu(U7%ijfUH}hO*oDe` zS%3B|`8UO&8DC(}`X@m}?ls=5*@;$|jPWX~%-Q|(6aDXIyAHKr~nA2l6QLNW9lq!XZg>ppC)&LVQr573$y?ZBe zh?bdstAo2>o@|Aj7N zKMWrjN9t(8CXWoPP(YQthTZ2bH%uFOoA6>rO{Fr{2&-@uu}wtJsIAT|Djtc-fnGRz z%pkK?LD4)gZ_EccfxEt0;KD@zv2S4B5!(h~~xLkur3B<(kDysNcN7`nHqKJyuy_>*}hR zNQ_DDZ?v34$=v`lup(uJky^@k4K*^kcKKqu z+Z2gI_b$UcU6HAB{AbaM5YXzuW?;eD?VHE8z~+$DiXcc2Glan zI)DvgvCOIqHe~HX66~LuRCj_=1KyLlfc*Wk!d*czHY<|WhqHX?yPZgsWYyp>5Z7-U zi@n#cHH@X}69HD?=#ATzbfP*N`HzyS=7|(BHd&wfL++}r{!ji;s{@P<|hY$8=gLLPYE*tx67QPI{~I* z#4#!oCws@SzIp}pIkClQSR|jF=%KgrHos&m+2mo7MZY8fWMc1Axdtl!c?#hqrrG<} zRP`3j0@+q}PN((2P8a_&Mx8n8#;P#T%7lYRc%NO&ITXwF`Fe7Msp9$b?R`~<@8THF z*#O6Y){f&{Ky}O?0Jog!sG?FYq6;f^YTGa7E1Xnw;H*m)&fnv;OaC%p+zK+NA~qI8 ze4azk3ffRn*|EXpManMmo?CFkvZ$~tLA*lGYikKrycNN6&ow`Q$$0g83MFi(gzGau7NVDAbkPQbileB4 zrp~JymKs{Q=q9{bI9tNl7r5nSUGyrfjZ1IdrZ8h}B@++*yL@y@0kh51r@A8-Ew}1o z*d0IgztfYtV-}B=v+mFx48?tSXPdRxB3;x(|6=6)C7vkmq3jlS#7N0Y+H#U7=w79A zkPHK`!+kp}!8iA#Tn_kk=>^Kv`@s|?*STTY1DdT@zrv0vf)4Iq*J1>rkAlD{cmzul*c6|E832QZLAH`W= zmRZkel8nWx|66a?N=19o9%nrt4vp~KbH5szCa&@~)b-yGNBQn~DNu4ZUp#c_FOR>Z zcfmY-`ijP|ooXx$6Dw}e5FhwD+VD8^dY_(!epT>0>mPENQSUs^d{P@2j2LB9&tW+@#AV^%eYT(sTmHfq%kZ? zsI&_!Z$V$&{`Xkrd-118lx9Z`z;fKJT~tCvIo!##LL`J{o(8JO7d%ol%`AsLoR_X6 z{>?%@u6uDQ+N0|`=5Av8uheT;ozMR(FKJ08)f`Xjs`@o?{^+GE=(&1yIlw*T|2JCc AWdHyG delta 2819 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 Cx9v&* diff --git a/angular/src/scss/bwicons/fonts/bwi-font.woff b/angular/src/scss/bwicons/fonts/bwi-font.woff index b05f9b99409571f57db6bfb6d797ea9f10330076..8cde2bacfec29175cda8911a3888b6b8c92173b6 100644 GIT binary patch delta 2867 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 Date: Thu, 27 Jan 2022 10:44:09 -0500 Subject: [PATCH 048/120] [bug] Properly define stored window state (#638) --- common/src/abstractions/state.service.ts | 5 +++-- common/src/models/domain/globalState.ts | 3 ++- common/src/models/domain/windowState.ts | 10 ++++++++++ common/src/services/state.service.ts | 7 ++++--- electron/src/window.main.ts | 18 ++++++------------ 5 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 common/src/models/domain/windowState.ts diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index 693feb7e..bf00d744 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -19,6 +19,7 @@ import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHist import { Policy } from "../models/domain/policy"; import { StorageOptions } from "../models/domain/storageOptions"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { WindowState } from "../models/domain/windowState"; import { CipherView } from "../models/view/cipherView"; import { CollectionView } from "../models/view/collectionView"; @@ -299,6 +300,6 @@ export abstract class StateService { setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise; getStateVersion: () => Promise; setStateVersion: (value: number) => Promise; - getWindow: () => Promise>; - setWindow: (value: Map) => Promise; + getWindow: () => Promise; + setWindow: (value: WindowState) => Promise; } diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 90d53d7f..4fb14335 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -1,5 +1,6 @@ import { StateVersion } from "../../enums/stateVersion"; import { EnvironmentUrls } from "./environmentUrls"; +import { WindowState } from "./windowState"; export class GlobalState { enableAlwaysOnTop?: boolean; @@ -11,7 +12,7 @@ export class GlobalState { ssoState?: string; rememberedEmail?: string; theme?: string = "light"; - window?: Map = new Map(); + window?: WindowState = new WindowState(); twoFactorToken?: string; disableFavicon?: boolean; biometricAwaitingAcceptance?: boolean; diff --git a/common/src/models/domain/windowState.ts b/common/src/models/domain/windowState.ts new file mode 100644 index 00000000..cb260d8b --- /dev/null +++ b/common/src/models/domain/windowState.ts @@ -0,0 +1,10 @@ +export class WindowState { + width?: number; + height?: number; + isMaximized?: boolean; + // TODO: displayBounds is an Electron.Rectangle. + // We need to establish some kind of client-specific global state, similiar to the way we already extend a base Account. + displayBounds: any; + x?: number; + y?: number; +} diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index a0178fd3..0bacc5e8 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -36,6 +36,7 @@ import { BehaviorSubject } from "rxjs"; import { StateMigrationService } from "../abstractions/stateMigration.service"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; +import { WindowState } from "../models/domain/windowState"; const keys = { global: "global", @@ -2066,14 +2067,14 @@ export class StateService await this.saveGlobals(globals, await this.defaultOnDiskOptions()); } - async getWindow(): Promise> { + async getWindow(): Promise { const globals = await this.getGlobals(await this.defaultOnDiskOptions()); return globals?.window != null && Object.keys(globals.window).length > 0 ? globals.window - : new Map(); + : new WindowState(); } - async setWindow(value: Map, options?: StorageOptions): Promise { + async setWindow(value: WindowState, options?: StorageOptions): Promise { const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); diff --git a/electron/src/window.main.ts b/electron/src/window.main.ts index e3355863..2dc1709e 100644 --- a/electron/src/window.main.ts +++ b/electron/src/window.main.ts @@ -99,7 +99,6 @@ export class WindowMain { async createWindow(): Promise { this.windowStates[mainWindowSizeKey] = await this.getWindowState( - mainWindowSizeKey, this.defaultWidth, this.defaultHeight ); @@ -214,7 +213,7 @@ export class WindowMain { const bounds = win.getBounds(); if (this.windowStates[configKey] == null) { - this.windowStates[configKey] = (await this.stateService.getWindow()).get(configKey); + this.windowStates[configKey] = await this.stateService.getWindow(); if (this.windowStates[configKey] == null) { this.windowStates[configKey] = {}; } @@ -230,25 +229,20 @@ export class WindowMain { this.windowStates[configKey].height = bounds.height; } - const cachedWindow = (await this.stateService.getWindow()) ?? new Map(); - cachedWindow.set(configKey, this.windowStates[configKey]); - await this.stateService.setWindow(cachedWindow); + await this.stateService.setWindow(this.windowStates[configKey]); } catch (e) { this.logService.error(e); } } - private async getWindowState(configKey: string, defaultWidth: number, defaultHeight: number) { - const windowState = (await this.stateService.getWindow()) ?? new Map(); - let state = windowState.has(configKey) ? windowState.get(configKey) : null; + private async getWindowState(defaultWidth: number, defaultHeight: number) { + const state = await this.stateService.getWindow(); const isValid = state != null && (this.stateHasBounds(state) || state.isMaximized); let displayBounds: Electron.Rectangle = null; if (!isValid) { - state = { - width: defaultWidth, - height: defaultHeight, - }; + state.width = defaultWidth; + state.height = defaultHeight; displayBounds = screen.getPrimaryDisplay().bounds; } else if (this.stateHasBounds(state) && state.displayBounds) { From 5249e5552241d061495f8594b3321f3dd8a9501f Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Thu, 27 Jan 2022 16:48:50 +0100 Subject: [PATCH 049/120] Update the fallback icon name (#639) --- angular/src/components/icon.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular/src/components/icon.component.ts b/angular/src/components/icon.component.ts index ca1f2555..c5704f27 100644 --- a/angular/src/components/icon.component.ts +++ b/angular/src/components/icon.component.ts @@ -96,7 +96,7 @@ export class IconComponent implements OnChanges { if (this.imageEnabled && isWebsite) { try { this.image = this.iconsUrl + "/" + Utils.getHostname(hostnameUri) + "/icon.png"; - this.fallbackImage = "images/fa-globe.png"; + this.fallbackImage = "images/bwi-globe.png"; } catch (e) { // Ignore error since the fallback icon will be shown if image is null. } From 6b4ed5fcce58c21a9977d94ebb65f954d6766548 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Thu, 27 Jan 2022 17:40:58 +0100 Subject: [PATCH 050/120] Icon fixes for callouts and verify mp (#640) --- angular/src/components/callout.component.html | 2 +- angular/src/components/verify-master-password.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/angular/src/components/callout.component.html b/angular/src/components/callout.component.html index 0fadc19a..a049d5cb 100644 --- a/angular/src/components/callout.component.html +++ b/angular/src/components/callout.component.html @@ -5,7 +5,7 @@ [attr.role]="useAlertRole ? 'alert' : null" >

- + {{ title }}

diff --git a/angular/src/components/verify-master-password.component.html b/angular/src/components/verify-master-password.component.html index 71793ad6..b90c6074 100644 --- a/angular/src/components/verify-master-password.component.html +++ b/angular/src/components/verify-master-password.component.html @@ -24,7 +24,7 @@ {{ "sendCode" | i18n }} - + {{ "codeSent" | i18n }}
From ca5b057b43ddf1ad671385b589395a91acd808b6 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 28 Jan 2022 05:28:36 -0500 Subject: [PATCH 051/120] [refactor] Use ThemeType enum instead of string (#642) --- common/src/abstractions/state.service.ts | 5 +++-- common/src/models/domain/globalState.ts | 4 +++- common/src/services/state.service.ts | 5 +++-- common/src/services/stateMigration.service.ts | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index bf00d744..e4c38025 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -1,6 +1,7 @@ import { BehaviorSubject } from "rxjs"; import { KdfType } from "../enums/kdfType"; +import { ThemeType } from "../enums/themeType"; import { UriMatchType } from "../enums/uriMatchType"; import { CipherData } from "../models/data/cipherData"; @@ -287,8 +288,8 @@ export abstract class StateService { setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise; getSsoState: (options?: StorageOptions) => Promise; setSsoState: (value: string, options?: StorageOptions) => Promise; - getTheme: (options?: StorageOptions) => Promise; - setTheme: (value: string, options?: StorageOptions) => Promise; + getTheme: (options?: StorageOptions) => Promise; + setTheme: (value: ThemeType, options?: StorageOptions) => Promise; getTwoFactorToken: (options?: StorageOptions) => Promise; setTwoFactorToken: (value: string, options?: StorageOptions) => Promise; getUserId: (options?: StorageOptions) => Promise; diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 4fb14335..322f6d64 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -1,4 +1,6 @@ import { StateVersion } from "../../enums/stateVersion"; +import { ThemeType } from "../../enums/themeType"; + import { EnvironmentUrls } from "./environmentUrls"; import { WindowState } from "./windowState"; @@ -11,7 +13,7 @@ export class GlobalState { ssoOrganizationIdentifier?: string; ssoState?: string; rememberedEmail?: string; - theme?: string = "light"; + theme?: ThemeType = ThemeType.Light; window?: WindowState = new WindowState(); twoFactorToken?: string; disableFavicon?: boolean; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 0bacc5e8..e3a3c535 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -8,6 +8,7 @@ import { StorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StorageLocation } from "../enums/storageLocation"; +import { ThemeType } from "../enums/themeType"; import { UriMatchType } from "../enums/uriMatchType"; import { CipherView } from "../models/view/cipherView"; @@ -1961,13 +1962,13 @@ export class StateService ); } - async getTheme(options?: StorageOptions): Promise { + async getTheme(options?: StorageOptions): Promise { return ( await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) )?.theme; } - async setTheme(value: string, options?: StorageOptions): Promise { + async setTheme(value: ThemeType, options?: StorageOptions): Promise { const globals = await this.getGlobals( this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index f6c0882f..95059da3 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -16,6 +16,7 @@ import { SendData } from "../models/data/sendData"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StateVersion } from "../enums/stateVersion"; +import { ThemeType } from "../enums/themeType"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; @@ -191,7 +192,7 @@ export class StateMigrationService { globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState; globals.rememberedEmail = (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail; - globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme; + globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme; globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout; globals.vaultTimeoutAction = (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction; From 6c61f53d8b4ad05d4a3ecb96df6ae2def592868c Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 28 Jan 2022 08:15:02 -0500 Subject: [PATCH 052/120] [bug] Always save environmentUrls passed to setUrls (#641) * [bug] Always save environmentUrls passed to setUrls * [bug] Remove parameter from abstraction as well * [bug] Correct type in abstraction --- .../src/abstractions/environment.service.ts | 2 +- common/src/services/environment.service.ts | 24 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/common/src/abstractions/environment.service.ts b/common/src/abstractions/environment.service.ts index 97daeba2..8398b4c6 100644 --- a/common/src/abstractions/environment.service.ts +++ b/common/src/abstractions/environment.service.ts @@ -29,6 +29,6 @@ export abstract class EnvironmentService { getEventsUrl: () => string; getKeyConnectorUrl: () => string; setUrlsFromStorage: () => Promise; - setUrls: (urls: any, saveSettings?: boolean) => Promise; + setUrls: (urls: Urls) => Promise; getUrls: () => Urls; } diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index f1842fe9..a4f0a213 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -126,7 +126,7 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { this.keyConnectorUrl = urls.keyConnector; } - async setUrls(urls: Urls, saveSettings: boolean = true): Promise { + async setUrls(urls: Urls): Promise { urls.base = this.formatUrl(urls.base); urls.webVault = this.formatUrl(urls.webVault); urls.api = this.formatUrl(urls.api); @@ -136,18 +136,16 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { urls.events = this.formatUrl(urls.events); urls.keyConnector = this.formatUrl(urls.keyConnector); - if (saveSettings) { - await this.stateService.setEnvironmentUrls({ - base: urls.base, - api: urls.api, - identity: urls.identity, - webVault: urls.webVault, - icons: urls.icons, - notifications: urls.notifications, - events: urls.events, - keyConnector: urls.keyConnector, - }); - } + await this.stateService.setEnvironmentUrls({ + base: urls.base, + api: urls.api, + identity: urls.identity, + webVault: urls.webVault, + icons: urls.icons, + notifications: urls.notifications, + events: urls.events, + keyConnector: urls.keyConnector, + }); this.baseUrl = urls.base; this.webVaultUrl = urls.webVault; From e372bf242b24f55c1142e33693ad2c801ab74c93 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 28 Jan 2022 08:18:39 -0500 Subject: [PATCH 053/120] [cleanup] Adjust type to match abstraction (#643) --- common/src/services/environment.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index a4f0a213..28caaf47 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -126,7 +126,7 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { this.keyConnectorUrl = urls.keyConnector; } - async setUrls(urls: Urls): Promise { + async setUrls(urls: Urls): Promise { urls.base = this.formatUrl(urls.base); urls.webVault = this.formatUrl(urls.webVault); urls.api = this.formatUrl(urls.api); From 92a65b7b368a8dbf55350657674c90169b04c30b Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 31 Jan 2022 14:33:31 -0500 Subject: [PATCH 054/120] [bug] Allow for GlobalState to be extended and modified in clients (#646) Some clients have unique global setting defaults (and unique global settings) For example: the web vault defaults to light theme, but most clients with theme support default to system theme. The current way we handle GlobalState is buried in jslib and not easily extendible in clients. To fix this, we need to treat GlobalState as a generic in the StateService and StateMigration service and allow for its extension in those methods and anywhere GlobalState is inited. --- angular/src/services/jslib-services.module.ts | 18 +++++++-- common/src/factories/accountFactory.ts | 13 ++++++ common/src/factories/globalStateFactory.ts | 13 ++++++ common/src/factories/stateFactory.ts | 25 ++++++++++++ common/src/models/domain/account.ts | 12 ------ common/src/models/domain/globalState.ts | 2 +- common/src/models/domain/state.ts | 11 ++++- common/src/services/state.service.ts | 40 ++++++++++++------- common/src/services/stateMigration.service.ts | 13 +++--- 9 files changed, 109 insertions(+), 38 deletions(-) create mode 100644 common/src/factories/accountFactory.ts create mode 100644 common/src/factories/globalStateFactory.ts create mode 100644 common/src/factories/stateFactory.ts diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 0133c802..a08bce24 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -76,7 +76,11 @@ import { PasswordRepromptService } from "./passwordReprompt.service"; import { UnauthGuardService } from "./unauth-guard.service"; import { ValidationService } from "./validation.service"; -import { Account, AccountFactory } from "jslib-common/models/domain/account"; +import { Account } from "jslib-common/models/domain/account"; +import { GlobalState } from "jslib-common/models/domain/globalState"; + +import { GlobalStateFactory } from "jslib-common/factories/globalStateFactory"; +import { StateFactory } from "jslib-common/factories/stateFactory"; @NgModule({ declarations: [], @@ -338,7 +342,7 @@ import { Account, AccountFactory } from "jslib-common/models/domain/account"; secureStorageService, logService, stateMigrationService, - new AccountFactory(Account) + new StateFactory(GlobalState, Account) ), deps: [ StorageServiceAbstraction, @@ -349,7 +353,15 @@ import { Account, AccountFactory } from "jslib-common/models/domain/account"; }, { provide: StateMigrationServiceAbstraction, - useClass: StateMigrationService, + useFactory: ( + storageService: StorageServiceAbstraction, + secureStorageService: StorageServiceAbstraction + ) => + new StateMigrationService( + storageService, + secureStorageService, + new GlobalStateFactory(GlobalState) + ), deps: [StorageServiceAbstraction, "SECURE_STORAGE"], }, { diff --git a/common/src/factories/accountFactory.ts b/common/src/factories/accountFactory.ts new file mode 100644 index 00000000..1fe5aee3 --- /dev/null +++ b/common/src/factories/accountFactory.ts @@ -0,0 +1,13 @@ +import { Account } from "../models/domain/account"; + +export class AccountFactory { + private accountConstructor: new (init: Partial) => T; + + constructor(accountConstructor: new (init: Partial) => T) { + this.accountConstructor = accountConstructor; + } + + create(args: Partial) { + return new this.accountConstructor(args); + } +} diff --git a/common/src/factories/globalStateFactory.ts b/common/src/factories/globalStateFactory.ts new file mode 100644 index 00000000..a2c25c46 --- /dev/null +++ b/common/src/factories/globalStateFactory.ts @@ -0,0 +1,13 @@ +import { GlobalState } from "../models/domain/globalState"; + +export class GlobalStateFactory { + private globalStateConstructor: new (init: Partial) => T; + + constructor(globalStateConstructor: new (init: Partial) => T) { + this.globalStateConstructor = globalStateConstructor; + } + + create(args?: Partial) { + return new this.globalStateConstructor(args); + } +} diff --git a/common/src/factories/stateFactory.ts b/common/src/factories/stateFactory.ts new file mode 100644 index 00000000..5df194af --- /dev/null +++ b/common/src/factories/stateFactory.ts @@ -0,0 +1,25 @@ +import { Account } from "../models/domain/account"; +import { GlobalState } from "../models/domain/globalState"; +import { AccountFactory } from "./accountFactory"; +import { GlobalStateFactory } from "./globalStateFactory"; + +export class StateFactory { + private globalStateFactory: GlobalStateFactory; + private accountFactory: AccountFactory; + + constructor( + globalStateConstructor: new (init: Partial) => TGlobal, + accountConstructor: new (init: Partial) => TAccount + ) { + this.globalStateFactory = new GlobalStateFactory(globalStateConstructor); + this.accountFactory = new AccountFactory(accountConstructor); + } + + createGlobal(args: Partial): TGlobal { + return this.globalStateFactory.create(args); + } + + createAccount(args: Partial): TAccount { + return this.accountFactory.create(args); + } +} diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 2ca63686..51be98be 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -175,15 +175,3 @@ export class Account { }); } } - -export class AccountFactory { - private accountConstructor: new (init: Partial) => T; - - constructor(accountConstructor: new (init: Partial) => T) { - this.accountConstructor = accountConstructor; - } - - create(args: Partial) { - return new this.accountConstructor(args); - } -} diff --git a/common/src/models/domain/globalState.ts b/common/src/models/domain/globalState.ts index 322f6d64..326ba11b 100644 --- a/common/src/models/domain/globalState.ts +++ b/common/src/models/domain/globalState.ts @@ -13,7 +13,7 @@ export class GlobalState { ssoOrganizationIdentifier?: string; ssoState?: string; rememberedEmail?: string; - theme?: ThemeType = ThemeType.Light; + theme?: ThemeType = ThemeType.System; window?: WindowState = new WindowState(); twoFactorToken?: string; disableFavicon?: boolean; diff --git a/common/src/models/domain/state.ts b/common/src/models/domain/state.ts index 16edca2a..c87ff6e8 100644 --- a/common/src/models/domain/state.ts +++ b/common/src/models/domain/state.ts @@ -1,9 +1,16 @@ import { Account } from "./account"; import { GlobalState } from "./globalState"; -export class State { +export class State< + TAccount extends Account = Account, + TGlobalState extends GlobalState = GlobalState +> { accounts: { [userId: string]: TAccount } = {}; - globals: GlobalState = new GlobalState(); + globals: TGlobalState; activeUserId: string; authenticatedAccounts: string[] = []; + + constructor(globals: TGlobalState) { + this.globals = globals; + } } diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index e3a3c535..8ce399e9 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1,6 +1,6 @@ import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; -import { Account, AccountData, AccountFactory } from "../models/domain/account"; +import { Account, AccountData } from "../models/domain/account"; import { LogService } from "../abstractions/log.service"; import { StorageService } from "../abstractions/storage.service"; @@ -39,6 +39,8 @@ import { StateMigrationService } from "../abstractions/stateMigration.service"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; import { WindowState } from "../models/domain/windowState"; +import { StateFactory } from "../factories/stateFactory"; + const keys = { global: "global", authenticatedAccounts: "authenticatedAccounts", @@ -52,13 +54,17 @@ const partialKeys = { masterKey: "_masterkey", }; -export class StateService - implements StateServiceAbstraction +export class StateService< + TAccount extends Account = Account, + TGlobalState extends GlobalState = GlobalState +> implements StateServiceAbstraction { accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({}); activeAccount = new BehaviorSubject(null); - protected state: State = new State(); + protected state: State = new State( + this.createGlobals() + ); private hasBeenInited: boolean = false; @@ -67,7 +73,7 @@ export class StateService protected secureStorageService: StorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, - protected accountFactory: AccountFactory + protected stateFactory: StateFactory ) {} async init(): Promise { @@ -2086,8 +2092,8 @@ export class StateService ); } - protected async getGlobals(options: StorageOptions): Promise { - let globals: GlobalState; + protected async getGlobals(options: StorageOptions): Promise { + let globals: TGlobalState; if (this.useMemory(options.storageLocation)) { globals = this.getGlobalsFromMemory(); } @@ -2096,28 +2102,28 @@ export class StateService globals = await this.getGlobalsFromDisk(options); } - return globals ?? new GlobalState(); + return globals ?? this.createGlobals(); } - protected async saveGlobals(globals: GlobalState, options: StorageOptions) { + protected async saveGlobals(globals: TGlobalState, options: StorageOptions) { return this.useMemory(options.storageLocation) ? this.saveGlobalsToMemory(globals) : await this.saveGlobalsToDisk(globals, options); } - protected getGlobalsFromMemory(): GlobalState { + protected getGlobalsFromMemory(): TGlobalState { return this.state.globals; } - protected async getGlobalsFromDisk(options: StorageOptions): Promise { - return await this.storageService.get(keys.global, options); + protected async getGlobalsFromDisk(options: StorageOptions): Promise { + return await this.storageService.get(keys.global, options); } - protected saveGlobalsToMemory(globals: GlobalState): void { + protected saveGlobalsToMemory(globals: TGlobalState): void { this.state.globals = globals; } - protected async saveGlobalsToDisk(globals: GlobalState, options: StorageOptions): Promise { + protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise { if (options.useSecureStorage) { await this.secureStorageService.save(keys.global, globals, options); } else { @@ -2412,7 +2418,11 @@ export class StateService } protected createAccount(init: Partial = null): TAccount { - return this.accountFactory.create(init); + return this.stateFactory.createAccount(init); + } + + protected createGlobals(init: Partial = null): TGlobalState { + return this.stateFactory.createGlobal(init); } protected async deAuthenticateAccount(userId: string) { diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 95059da3..c1bf03a7 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -20,6 +20,8 @@ import { ThemeType } from "../enums/themeType"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; +import { GlobalStateFactory } from "../factories/globalStateFactory"; + // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. const v1Keys: { [key: string]: string } = { @@ -126,10 +128,11 @@ const partialKeys = { masterKey: "_masterkey", }; -export class StateMigrationService { +export class StateMigrationService { constructor( protected storageService: StorageService, - protected secureStorageService: StorageService + protected secureStorageService: StorageService, + protected globalStateFactory: GlobalStateFactory ) {} async needsMigration(): Promise { @@ -174,7 +177,7 @@ export class StateMigrationService { // 1. Check for an existing storage value from the old storage structure OR // 2. Check for a value already set by processes that run before migration OR // 3. Assign the default value - const globals = (await this.get(keys.global)) ?? new GlobalState(); + const globals = (await this.get(keys.global)) ?? this.globalStateFactory.create(); globals.stateVersion = StateVersion.Two; globals.environmentUrls = (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls; @@ -438,8 +441,8 @@ export class StateMigrationService { return this.storageService.save(key, value, this.options); } - protected async getGlobals(): Promise { - return await this.get(keys.global); + protected async getGlobals(): Promise { + return await this.get(keys.global); } protected async getCurrentStateVersion(): Promise { From aa2bdd00be0bd0a79dba5e9f2d8f09c9f4085fc9 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 1 Feb 2022 09:51:32 +1000 Subject: [PATCH 055/120] [Tech debt] Refactor authService and remove LogInHelper (#588) * Use different strategy classes for different types of login * General refactor and cleanup of auth logic * Create subclasses for different types of login credentials * Create subclasses for different types of tokenRequests * Create TwoFactorService, move code out of authService * refactor base CLI commands to use new interface --- angular/src/components/login.component.ts | 11 +- angular/src/components/sso.component.ts | 6 +- .../two-factor-options.component.ts | 5 +- .../src/components/two-factor.component.ts | 28 +- angular/src/services/jslib-services.module.ts | 12 +- common/src/abstractions/api.service.ts | 7 +- common/src/abstractions/auth.service.ts | 61 +- .../src/abstractions/keyConnector.service.ts | 6 + common/src/abstractions/token.service.ts | 8 +- common/src/abstractions/twoFactor.service.ts | 24 + .../misc/logInStrategies/apiLogin.strategy.ts | 73 ++ .../misc/logInStrategies/logIn.strategy.ts | 177 +++++ .../logInStrategies/passwordLogin.strategy.ts | 88 +++ .../misc/logInStrategies/ssoLogin.strategy.ts | 73 ++ common/src/models/domain/authResult.ts | 11 +- common/src/models/domain/logInCredentials.ts | 24 + .../request/identityToken/apiTokenRequest.ts | 24 + .../identityToken/passwordTokenRequest.ts | 36 + .../request/identityToken/ssoTokenRequest.ts | 26 + .../request/identityToken/tokenRequest.ts | 48 ++ common/src/models/request/tokenRequest.ts | 91 --- common/src/services/api.service.ts | 18 +- common/src/services/auth.service.ts | 700 +++--------------- common/src/services/keyConnector.service.ts | 43 +- common/src/services/token.service.ts | 6 +- common/src/services/twoFactor.service.ts | 188 +++++ node/src/cli/commands/login.command.ts | 272 ++++--- .../logInStrategies/apiLogIn.strategy.spec.ts | 116 +++ .../logInStrategies/logIn.strategy.spec.ts | 293 ++++++++ .../passwordLogIn.strategy.spec.ts | 113 +++ .../logInStrategies/ssoLogIn.strategy.spec.ts | 130 ++++ 31 files changed, 1798 insertions(+), 920 deletions(-) create mode 100644 common/src/abstractions/twoFactor.service.ts create mode 100644 common/src/misc/logInStrategies/apiLogin.strategy.ts create mode 100644 common/src/misc/logInStrategies/logIn.strategy.ts create mode 100644 common/src/misc/logInStrategies/passwordLogin.strategy.ts create mode 100644 common/src/misc/logInStrategies/ssoLogin.strategy.ts create mode 100644 common/src/models/domain/logInCredentials.ts create mode 100644 common/src/models/request/identityToken/apiTokenRequest.ts create mode 100644 common/src/models/request/identityToken/passwordTokenRequest.ts create mode 100644 common/src/models/request/identityToken/ssoTokenRequest.ts create mode 100644 common/src/models/request/identityToken/tokenRequest.ts delete mode 100644 common/src/models/request/tokenRequest.ts create mode 100644 common/src/services/twoFactor.service.ts create mode 100644 spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts create mode 100644 spec/common/misc/logInStrategies/logIn.strategy.spec.ts create mode 100644 spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts create mode 100644 spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts diff --git a/angular/src/components/login.component.ts b/angular/src/components/login.component.ts index e860ca9c..f7192671 100644 --- a/angular/src/components/login.component.ts +++ b/angular/src/components/login.component.ts @@ -5,6 +5,7 @@ import { Router } from "@angular/router"; import { take } from "rxjs/operators"; import { AuthResult } from "jslib-common/models/domain/authResult"; +import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; import { AuthService } from "jslib-common/abstractions/auth.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; @@ -96,7 +97,13 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit } try { - this.formPromise = this.authService.logIn(this.email, this.masterPassword, this.captchaToken); + const credentials = new PasswordLogInCredentials( + this.email, + this.masterPassword, + this.captchaToken, + null + ); + this.formPromise = this.authService.logIn(credentials); const response = await this.formPromise; if (this.rememberEmail || this.alwaysRememberEmail) { await this.stateService.setRememberedEmail(this.email); @@ -105,7 +112,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit } if (this.handleCaptchaRequired(response)) { return; - } else if (response.twoFactor) { + } else if (response.requiresTwoFactor) { if (this.onSuccessfulLoginTwoFactorNavigate != null) { this.onSuccessfulLoginTwoFactorNavigate(); } else { diff --git a/angular/src/components/sso.component.ts b/angular/src/components/sso.component.ts index 649f298c..06d0d037 100644 --- a/angular/src/components/sso.component.ts +++ b/angular/src/components/sso.component.ts @@ -16,6 +16,7 @@ import { StateService } from "jslib-common/abstractions/state.service"; import { Utils } from "jslib-common/misc/utils"; import { AuthResult } from "jslib-common/models/domain/authResult"; +import { SsoLogInCredentials } from "jslib-common/models/domain/logInCredentials"; @Directive() export class SsoComponent { @@ -171,14 +172,15 @@ export class SsoComponent { private async logIn(code: string, codeVerifier: string, orgIdFromState: string) { this.loggingIn = true; try { - this.formPromise = this.authService.logInSso( + const credentials = new SsoLogInCredentials( code, codeVerifier, this.redirectUri, orgIdFromState ); + this.formPromise = this.authService.logIn(credentials); const response = await this.formPromise; - if (response.twoFactor) { + if (response.requiresTwoFactor) { if (this.onSuccessfulLoginTwoFactorNavigate != null) { this.onSuccessfulLoginTwoFactorNavigate(); } else { diff --git a/angular/src/components/two-factor-options.component.ts b/angular/src/components/two-factor-options.component.ts index 4909757f..ddf3d2f3 100644 --- a/angular/src/components/two-factor-options.component.ts +++ b/angular/src/components/two-factor-options.component.ts @@ -6,6 +6,7 @@ import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType" import { AuthService } from "jslib-common/abstractions/auth.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; @Directive() export class TwoFactorOptionsComponent implements OnInit { @@ -15,7 +16,7 @@ export class TwoFactorOptionsComponent implements OnInit { providers: any[] = []; constructor( - protected authService: AuthService, + protected twoFactorService: TwoFactorService, protected router: Router, protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, @@ -23,7 +24,7 @@ export class TwoFactorOptionsComponent implements OnInit { ) {} ngOnInit() { - this.providers = this.authService.getSupportedTwoFactorProviders(this.win); + this.providers = this.twoFactorService.getSupportedProviders(this.win); } choose(p: any) { diff --git a/angular/src/components/two-factor.component.ts b/angular/src/components/two-factor.component.ts index f3813a96..16a5873a 100644 --- a/angular/src/components/two-factor.component.ts +++ b/angular/src/components/two-factor.component.ts @@ -18,9 +18,10 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; -import { TwoFactorProviders } from "jslib-common/services/auth.service"; +import { TwoFactorProviders } from "jslib-common/services/twoFactor.service"; import * as DuoWebSDK from "duo_web_sdk"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; import { WebAuthnIFrame } from "jslib-common/misc/webauthn_iframe"; @Directive() @@ -59,13 +60,14 @@ export class TwoFactorComponent implements OnInit, OnDestroy { protected environmentService: EnvironmentService, protected stateService: StateService, protected route: ActivatedRoute, - protected logService: LogService + protected logService: LogService, + protected twoFactorService: TwoFactorService ) { this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win); } async ngOnInit() { - if (!this.authing || this.authService.twoFactorProvidersData == null) { + if (!this.authing || this.twoFactorService.getProviders() == null) { this.router.navigate([this.loginRoute]); return; } @@ -103,9 +105,7 @@ export class TwoFactorComponent implements OnInit, OnDestroy { ); } - this.selectedProviderType = this.authService.getDefaultTwoFactorProvider( - this.webAuthnSupported - ); + this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported); await this.init(); } @@ -122,7 +122,7 @@ export class TwoFactorComponent implements OnInit, OnDestroy { this.cleanupWebAuthn(); this.title = (TwoFactorProviders as any)[this.selectedProviderType].name; - const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType); + const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType); switch (this.selectedProviderType) { case TwoFactorProviderType.WebAuthn: if (!this.webAuthnNewTab) { @@ -150,7 +150,7 @@ export class TwoFactorComponent implements OnInit, OnDestroy { break; case TwoFactorProviderType.Email: this.twoFactorEmail = providerData.Email; - if (this.authService.twoFactorProvidersData.size > 1) { + if (this.twoFactorService.getProviders().size > 1) { await this.sendEmail(false); } break; @@ -192,11 +192,11 @@ export class TwoFactorComponent implements OnInit, OnDestroy { } async doSubmit() { - this.formPromise = this.authService.logInTwoFactor( - this.selectedProviderType, - this.token, - this.remember - ); + this.formPromise = this.authService.logInTwoFactor({ + provider: this.selectedProviderType, + token: this.token, + remember: this.remember, + }); const response: AuthResult = await this.formPromise; const disableFavicon = await this.stateService.getDisableFavicon(); await this.stateService.setDisableFavicon(!!disableFavicon); @@ -250,7 +250,7 @@ export class TwoFactorComponent implements OnInit, OnDestroy { } authWebAuthn() { - const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType); + const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType); if (!this.webAuthnSupported || this.webAuthn == null) { return; diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index a08bce24..ec6261cf 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -27,6 +27,7 @@ import { StateMigrationService } from "jslib-common/services/stateMigration.serv import { SyncService } from "jslib-common/services/sync.service"; import { TokenService } from "jslib-common/services/token.service"; import { TotpService } from "jslib-common/services/totp.service"; +import { TwoFactorService } from "jslib-common/services/twoFactor.service"; import { UserVerificationService } from "jslib-common/services/userVerification.service"; import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service"; import { WebCryptoFunctionService } from "jslib-common/services/webCryptoFunction.service"; @@ -65,6 +66,7 @@ import { StorageService as StorageServiceAbstraction } from "jslib-common/abstra import { SyncService as SyncServiceAbstraction } from "jslib-common/abstractions/sync.service"; import { TokenService as TokenServiceAbstraction } from "jslib-common/abstractions/token.service"; import { TotpService as TotpServiceAbstraction } from "jslib-common/abstractions/totp.service"; +import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service"; import { UserVerificationService as UserVerificationServiceAbstraction } from "jslib-common/abstractions/userVerification.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service"; @@ -114,15 +116,13 @@ import { StateFactory } from "jslib-common/factories/stateFactory"; ApiServiceAbstraction, TokenServiceAbstraction, AppIdServiceAbstraction, - I18nServiceAbstraction, PlatformUtilsServiceAbstraction, MessagingServiceAbstraction, - VaultTimeoutServiceAbstraction, LogService, - CryptoFunctionServiceAbstraction, KeyConnectorServiceAbstraction, EnvironmentServiceAbstraction, StateServiceAbstraction, + TwoFactorServiceAbstraction, ], }, { @@ -455,6 +455,7 @@ import { StateFactory } from "jslib-common/factories/stateFactory"; TokenServiceAbstraction, LogService, OrganizationServiceAbstraction, + CryptoFunctionServiceAbstraction, ], }, { @@ -473,6 +474,11 @@ import { StateFactory } from "jslib-common/factories/stateFactory"; useClass: ProviderService, deps: [StateServiceAbstraction], }, + { + provide: TwoFactorServiceAbstraction, + useClass: TwoFactorService, + deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction], + }, ], }) export class JslibServicesModule {} diff --git a/common/src/abstractions/api.service.ts b/common/src/abstractions/api.service.ts index 4ef3c1a9..a23b311b 100644 --- a/common/src/abstractions/api.service.ts +++ b/common/src/abstractions/api.service.ts @@ -75,7 +75,6 @@ import { SendRequest } from "../models/request/sendRequest"; import { SetPasswordRequest } from "../models/request/setPasswordRequest"; import { StorageRequest } from "../models/request/storageRequest"; import { TaxInfoUpdateRequest } from "../models/request/taxInfoUpdateRequest"; -import { TokenRequest } from "../models/request/tokenRequest"; import { TwoFactorEmailRequest } from "../models/request/twoFactorEmailRequest"; import { TwoFactorProviderRequest } from "../models/request/twoFactorProviderRequest"; import { TwoFactorRecoveryRequest } from "../models/request/twoFactorRecoveryRequest"; @@ -93,6 +92,10 @@ import { VerifyBankRequest } from "../models/request/verifyBankRequest"; import { VerifyDeleteRecoverRequest } from "../models/request/verifyDeleteRecoverRequest"; import { VerifyEmailRequest } from "../models/request/verifyEmailRequest"; +import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; +import { PasswordTokenRequest } from "../models/request/identityToken/passwordTokenRequest"; +import { SsoTokenRequest } from "../models/request/identityToken/ssoTokenRequest"; + import { ApiKeyResponse } from "../models/response/apiKeyResponse"; import { AttachmentResponse } from "../models/response/attachmentResponse"; import { AttachmentUploadDataResponse } from "../models/response/attachmentUploadDataResponse"; @@ -171,7 +174,7 @@ import { SendAccessView } from "../models/view/sendAccessView"; export abstract class ApiService { postIdentityToken: ( - request: TokenRequest + request: PasswordTokenRequest | SsoTokenRequest | ApiTokenRequest ) => Promise; refreshIdentityToken: () => Promise; diff --git a/common/src/abstractions/auth.service.ts b/common/src/abstractions/auth.service.ts index 10dff3a8..ec36acc8 100644 --- a/common/src/abstractions/auth.service.ts +++ b/common/src/abstractions/auth.service.ts @@ -1,58 +1,21 @@ -import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; - import { AuthResult } from "../models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "../models/domain/logInCredentials"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -export abstract class AuthService { - email: string; - masterPasswordHash: string; - code: string; - codeVerifier: string; - ssoRedirectUrl: string; - clientId: string; - clientSecret: string; - twoFactorProvidersData: Map; - selectedTwoFactorProviderType: TwoFactorProviderType; +import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; - logIn: (email: string, masterPassword: string, captchaToken?: string) => Promise; - logInSso: ( - code: string, - codeVerifier: string, - redirectUrl: string, - orgId: string - ) => Promise; - logInApiKey: (clientId: string, clientSecret: string) => Promise; - logInTwoFactor: ( - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean - ) => Promise; - logInComplete: ( - email: string, - masterPassword: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean, - captchaToken?: string - ) => Promise; - logInSsoComplete: ( - code: string, - codeVerifier: string, - redirectUrl: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean - ) => Promise; - logInApiKeyComplete: ( - clientId: string, - clientSecret: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean +export abstract class AuthService { + masterPasswordHash: string; + email: string; + logIn: ( + credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials ) => Promise; + logInTwoFactor: (twoFactor: TokenRequestTwoFactor) => Promise; logOut: (callback: Function) => void; - getSupportedTwoFactorProviders: (win: Window) => any[]; - getDefaultTwoFactorProvider: (webAuthnSupported: boolean) => TwoFactorProviderType; makePreloginKey: (masterPassword: string, email: string) => Promise; authingWithApiKey: () => boolean; authingWithSso: () => boolean; diff --git a/common/src/abstractions/keyConnector.service.ts b/common/src/abstractions/keyConnector.service.ts index ca57bbf6..5b1ca3a3 100644 --- a/common/src/abstractions/keyConnector.service.ts +++ b/common/src/abstractions/keyConnector.service.ts @@ -1,11 +1,17 @@ import { Organization } from "../models/domain/organization"; +import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; + export abstract class KeyConnectorService { getAndSetKey: (url?: string) => Promise; getManagingOrganization: () => Promise; getUsesKeyConnector: () => Promise; migrateUser: () => Promise; userNeedsMigration: () => Promise; + convertNewSsoUserToKeyConnector: ( + tokenResponse: IdentityTokenResponse, + orgId: string + ) => Promise; setUsesKeyConnector: (enabled: boolean) => Promise; setConvertAccountRequired: (status: boolean) => Promise; getConvertAccountRequired: () => Promise; diff --git a/common/src/abstractions/token.service.ts b/common/src/abstractions/token.service.ts index 6006ba10..89aec536 100644 --- a/common/src/abstractions/token.service.ts +++ b/common/src/abstractions/token.service.ts @@ -1,3 +1,5 @@ +import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; + export abstract class TokenService { setTokens: ( accessToken: string, @@ -13,9 +15,9 @@ export abstract class TokenService { setClientSecret: (clientSecret: string) => Promise; getClientSecret: () => Promise; toggleTokens: () => Promise; - setTwoFactorToken: (token: string, email: string) => Promise; - getTwoFactorToken: (email: string) => Promise; - clearTwoFactorToken: (email: string) => Promise; + setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise; + getTwoFactorToken: () => Promise; + clearTwoFactorToken: () => Promise; clearToken: (userId?: string) => Promise; decodeToken: (token?: string) => any; getTokenExpirationDate: () => Promise; diff --git a/common/src/abstractions/twoFactor.service.ts b/common/src/abstractions/twoFactor.service.ts new file mode 100644 index 00000000..071f6e7e --- /dev/null +++ b/common/src/abstractions/twoFactor.service.ts @@ -0,0 +1,24 @@ +import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; + +import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; + +export interface TwoFactorProviderDetails { + type: TwoFactorProviderType; + name: string; + description: string; + priority: number; + sort: number; + premium: boolean; +} + +export abstract class TwoFactorService { + init: () => void; + getSupportedProviders: (win: Window) => TwoFactorProviderDetails[]; + getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType; + setSelectedProvider: (type: TwoFactorProviderType) => void; + clearSelectedProvider: () => void; + + setProviders: (response: IdentityTwoFactorResponse) => void; + clearProviders: () => void; + getProviders: () => Map; +} diff --git a/common/src/misc/logInStrategies/apiLogin.strategy.ts b/common/src/misc/logInStrategies/apiLogin.strategy.ts new file mode 100644 index 00000000..65463cc0 --- /dev/null +++ b/common/src/misc/logInStrategies/apiLogin.strategy.ts @@ -0,0 +1,73 @@ +import { LogInStrategy } from "./logIn.strategy"; + +import { ApiService } from "../../abstractions/api.service"; +import { AppIdService } from "../../abstractions/appId.service"; +import { CryptoService } from "../../abstractions/crypto.service"; +import { EnvironmentService } from "../../abstractions/environment.service"; +import { KeyConnectorService } from "../../abstractions/keyConnector.service"; +import { LogService } from "../../abstractions/log.service"; +import { MessagingService } from "../../abstractions/messaging.service"; +import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; +import { StateService } from "../../abstractions/state.service"; +import { TokenService } from "../../abstractions/token.service"; +import { TwoFactorService } from "../../abstractions/twoFactor.service"; + +import { ApiTokenRequest } from "../../models/request/identityToken/apiTokenRequest"; + +import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; + +import { ApiLogInCredentials } from "../../models/domain/logInCredentials"; + +export class ApiLogInStrategy extends LogInStrategy { + tokenRequest: ApiTokenRequest; + + constructor( + cryptoService: CryptoService, + apiService: ApiService, + tokenService: TokenService, + appIdService: AppIdService, + platformUtilsService: PlatformUtilsService, + messagingService: MessagingService, + logService: LogService, + stateService: StateService, + twoFactorService: TwoFactorService, + private environmentService: EnvironmentService, + private keyConnectorService: KeyConnectorService + ) { + super( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService + ); + } + + async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) { + if (tokenResponse.apiUseKeyConnector) { + const keyConnectorUrl = this.environmentService.getKeyConnectorUrl(); + await this.keyConnectorService.getAndSetKey(keyConnectorUrl); + } + } + + async logIn(credentials: ApiLogInCredentials) { + this.tokenRequest = new ApiTokenRequest( + credentials.clientId, + credentials.clientSecret, + await this.buildTwoFactor(), + await this.buildDeviceRequest() + ); + + return this.startLogIn(); + } + + protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) { + await super.saveAccountInformation(tokenResponse); + await this.stateService.setApiKeyClientId(this.tokenRequest.clientId); + await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret); + } +} diff --git a/common/src/misc/logInStrategies/logIn.strategy.ts b/common/src/misc/logInStrategies/logIn.strategy.ts new file mode 100644 index 00000000..9cb18aac --- /dev/null +++ b/common/src/misc/logInStrategies/logIn.strategy.ts @@ -0,0 +1,177 @@ +import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; + +import { Account, AccountProfile, AccountTokens } from "../../models/domain/account"; +import { AuthResult } from "../../models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "../../models/domain/logInCredentials"; + +import { DeviceRequest } from "../../models/request/deviceRequest"; +import { ApiTokenRequest } from "../../models/request/identityToken/apiTokenRequest"; +import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; +import { SsoTokenRequest } from "../../models/request/identityToken/ssoTokenRequest"; +import { TokenRequestTwoFactor } from "../../models/request/identityToken/tokenRequest"; +import { KeysRequest } from "../../models/request/keysRequest"; + +import { IdentityCaptchaResponse } from "../../models/response/identityCaptchaResponse"; +import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; +import { IdentityTwoFactorResponse } from "../../models/response/identityTwoFactorResponse"; + +import { ApiService } from "../../abstractions/api.service"; +import { AppIdService } from "../../abstractions/appId.service"; +import { CryptoService } from "../../abstractions/crypto.service"; +import { LogService } from "../../abstractions/log.service"; +import { MessagingService } from "../../abstractions/messaging.service"; +import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; +import { StateService } from "../../abstractions/state.service"; +import { TokenService } from "../../abstractions/token.service"; +import { TwoFactorService } from "../../abstractions/twoFactor.service"; + +export abstract class LogInStrategy { + protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest; + + constructor( + protected cryptoService: CryptoService, + protected apiService: ApiService, + protected tokenService: TokenService, + protected appIdService: AppIdService, + protected platformUtilsService: PlatformUtilsService, + protected messagingService: MessagingService, + protected logService: LogService, + protected stateService: StateService, + protected twoFactorService: TwoFactorService + ) {} + + abstract logIn( + credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials + ): Promise; + + async logInTwoFactor(twoFactor: TokenRequestTwoFactor): Promise { + this.tokenRequest.setTwoFactor(twoFactor); + return this.startLogIn(); + } + + protected async startLogIn(): Promise { + this.twoFactorService.clearSelectedProvider(); + + const response = await this.apiService.postIdentityToken(this.tokenRequest); + + if (response instanceof IdentityTwoFactorResponse) { + return this.processTwoFactorResponse(response); + } else if (response instanceof IdentityCaptchaResponse) { + return this.processCaptchaResponse(response); + } else if (response instanceof IdentityTokenResponse) { + return this.processTokenResponse(response); + } + + throw new Error("Invalid response object."); + } + + protected onSuccessfulLogin(response: IdentityTokenResponse): Promise { + // Implemented in subclass if required + return null; + } + + protected async buildDeviceRequest() { + const appId = await this.appIdService.getAppId(); + return new DeviceRequest(appId, this.platformUtilsService); + } + + protected async buildTwoFactor(userProvidedTwoFactor?: TokenRequestTwoFactor) { + if (userProvidedTwoFactor != null) { + return userProvidedTwoFactor; + } + + const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(); + if (storedTwoFactorToken != null) { + return { + token: storedTwoFactorToken, + provider: TwoFactorProviderType.Remember, + remember: false, + }; + } + + return { + token: null, + provider: null, + remember: false, + }; + } + + protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) { + const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken); + await this.stateService.addAccount( + new Account({ + profile: { + ...new AccountProfile(), + ...{ + userId: accountInformation.sub, + email: accountInformation.email, + hasPremiumPersonally: accountInformation.premium, + kdfIterations: tokenResponse.kdfIterations, + kdfType: tokenResponse.kdf, + }, + }, + tokens: { + ...new AccountTokens(), + ...{ + accessToken: tokenResponse.accessToken, + refreshToken: tokenResponse.refreshToken, + }, + }, + }) + ); + } + + protected async processTokenResponse(response: IdentityTokenResponse): Promise { + const result = new AuthResult(); + result.resetMasterPassword = response.resetMasterPassword; + result.forcePasswordReset = response.forcePasswordReset; + + await this.saveAccountInformation(response); + + if (response.twoFactorToken != null) { + await this.tokenService.setTwoFactorToken(response); + } + + const newSsoUser = response.key == null; + if (!newSsoUser) { + await this.cryptoService.setEncKey(response.key); + await this.cryptoService.setEncPrivateKey( + response.privateKey ?? (await this.createKeyPairForOldAccount()) + ); + } + + await this.onSuccessfulLogin(response); + + await this.stateService.setBiometricLocked(false); + this.messagingService.send("loggedIn"); + + return result; + } + + private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise { + const result = new AuthResult(); + result.twoFactorProviders = response.twoFactorProviders2; + this.twoFactorService.setProviders(response); + return result; + } + + private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise { + const result = new AuthResult(); + result.captchaSiteKey = response.siteKey; + return result; + } + + private async createKeyPairForOldAccount() { + try { + const [publicKey, privateKey] = await this.cryptoService.makeKeyPair(); + await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString)); + return privateKey.encryptedString; + } catch (e) { + this.logService.error(e); + } + } +} diff --git a/common/src/misc/logInStrategies/passwordLogin.strategy.ts b/common/src/misc/logInStrategies/passwordLogin.strategy.ts new file mode 100644 index 00000000..cdbe3bdc --- /dev/null +++ b/common/src/misc/logInStrategies/passwordLogin.strategy.ts @@ -0,0 +1,88 @@ +import { LogInStrategy } from "./logIn.strategy"; + +import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; + +import { ApiService } from "../../abstractions/api.service"; +import { AppIdService } from "../../abstractions/appId.service"; +import { AuthService } from "../../abstractions/auth.service"; +import { CryptoService } from "../../abstractions/crypto.service"; +import { LogService } from "../../abstractions/log.service"; +import { MessagingService } from "../../abstractions/messaging.service"; +import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; +import { StateService } from "../../abstractions/state.service"; +import { TokenService } from "../../abstractions/token.service"; +import { TwoFactorService } from "../../abstractions/twoFactor.service"; + +import { PasswordLogInCredentials } from "../../models/domain/logInCredentials"; +import { SymmetricCryptoKey } from "../../models/domain/symmetricCryptoKey"; + +import { HashPurpose } from "../../enums/hashPurpose"; + +export class PasswordLogInStrategy extends LogInStrategy { + get email() { + return this.tokenRequest.email; + } + + get masterPasswordHash() { + return this.tokenRequest.masterPasswordHash; + } + + tokenRequest: PasswordTokenRequest; + + private localHashedPassword: string; + private key: SymmetricCryptoKey; + + constructor( + cryptoService: CryptoService, + apiService: ApiService, + tokenService: TokenService, + appIdService: AppIdService, + platformUtilsService: PlatformUtilsService, + messagingService: MessagingService, + logService: LogService, + stateService: StateService, + twoFactorService: TwoFactorService, + private authService: AuthService + ) { + super( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService + ); + } + + async onSuccessfulLogin() { + await this.cryptoService.setKey(this.key); + await this.cryptoService.setKeyHash(this.localHashedPassword); + } + + async logIn(credentials: PasswordLogInCredentials) { + const { email, masterPassword, captchaToken, twoFactor } = credentials; + + this.key = await this.authService.makePreloginKey(masterPassword, email); + + // Hash the password early (before authentication) so we don't persist it in memory in plaintext + this.localHashedPassword = await this.cryptoService.hashPassword( + masterPassword, + this.key, + HashPurpose.LocalAuthorization + ); + const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key); + + this.tokenRequest = new PasswordTokenRequest( + email, + hashedPassword, + captchaToken, + await this.buildTwoFactor(twoFactor), + await this.buildDeviceRequest() + ); + + return this.startLogIn(); + } +} diff --git a/common/src/misc/logInStrategies/ssoLogin.strategy.ts b/common/src/misc/logInStrategies/ssoLogin.strategy.ts new file mode 100644 index 00000000..d946764d --- /dev/null +++ b/common/src/misc/logInStrategies/ssoLogin.strategy.ts @@ -0,0 +1,73 @@ +import { LogInStrategy } from "./logIn.strategy"; + +import { ApiService } from "../../abstractions/api.service"; +import { AppIdService } from "../../abstractions/appId.service"; +import { CryptoService } from "../../abstractions/crypto.service"; +import { KeyConnectorService } from "../../abstractions/keyConnector.service"; +import { LogService } from "../../abstractions/log.service"; +import { MessagingService } from "../../abstractions/messaging.service"; +import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; +import { StateService } from "../../abstractions/state.service"; +import { TokenService } from "../../abstractions/token.service"; +import { TwoFactorService } from "../../abstractions/twoFactor.service"; + +import { SsoLogInCredentials } from "../../models/domain/logInCredentials"; + +import { SsoTokenRequest } from "../../models/request/identityToken/ssoTokenRequest"; + +import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; + +export class SsoLogInStrategy extends LogInStrategy { + tokenRequest: SsoTokenRequest; + orgId: string; + + constructor( + cryptoService: CryptoService, + apiService: ApiService, + tokenService: TokenService, + appIdService: AppIdService, + platformUtilsService: PlatformUtilsService, + messagingService: MessagingService, + logService: LogService, + stateService: StateService, + twoFactorService: TwoFactorService, + private keyConnectorService: KeyConnectorService + ) { + super( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService + ); + } + + async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) { + const newSsoUser = tokenResponse.key == null; + + if (tokenResponse.keyConnectorUrl != null) { + if (!newSsoUser) { + await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl); + } else { + await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId); + } + } + } + + async logIn(credentials: SsoLogInCredentials) { + this.orgId = credentials.orgId; + this.tokenRequest = new SsoTokenRequest( + credentials.code, + credentials.codeVerifier, + credentials.redirectUrl, + await this.buildTwoFactor(credentials.twoFactor), + await this.buildDeviceRequest() + ); + + return this.startLogIn(); + } +} diff --git a/common/src/models/domain/authResult.ts b/common/src/models/domain/authResult.ts index eadad50f..bba3f7f3 100644 --- a/common/src/models/domain/authResult.ts +++ b/common/src/models/domain/authResult.ts @@ -1,9 +1,18 @@ import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; +import { Utils } from "../../misc/utils"; + export class AuthResult { - twoFactor: boolean = false; captchaSiteKey: string = ""; resetMasterPassword: boolean = false; forcePasswordReset: boolean = false; twoFactorProviders: Map = null; + + get requiresCaptcha() { + return !Utils.isNullOrWhitespace(this.captchaSiteKey); + } + + get requiresTwoFactor() { + return this.twoFactorProviders != null; + } } diff --git a/common/src/models/domain/logInCredentials.ts b/common/src/models/domain/logInCredentials.ts new file mode 100644 index 00000000..d53da02e --- /dev/null +++ b/common/src/models/domain/logInCredentials.ts @@ -0,0 +1,24 @@ +import { TokenRequestTwoFactor } from "../request/identityToken/tokenRequest"; + +export class PasswordLogInCredentials { + constructor( + public email: string, + public masterPassword: string, + public captchaToken?: string, + public twoFactor?: TokenRequestTwoFactor + ) {} +} + +export class SsoLogInCredentials { + constructor( + public code: string, + public codeVerifier: string, + public redirectUrl: string, + public orgId: string, + public twoFactor?: TokenRequestTwoFactor + ) {} +} + +export class ApiLogInCredentials { + constructor(public clientId: string, public clientSecret: string) {} +} diff --git a/common/src/models/request/identityToken/apiTokenRequest.ts b/common/src/models/request/identityToken/apiTokenRequest.ts new file mode 100644 index 00000000..b8f2c21f --- /dev/null +++ b/common/src/models/request/identityToken/apiTokenRequest.ts @@ -0,0 +1,24 @@ +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; + +import { DeviceRequest } from "../deviceRequest"; + +export class ApiTokenRequest extends TokenRequest { + constructor( + public clientId: string, + public clientSecret: string, + protected twoFactor: TokenRequestTwoFactor, + device?: DeviceRequest + ) { + super(twoFactor, device); + } + + toIdentityToken() { + const obj = super.toIdentityToken(this.clientId); + + obj.scope = this.clientId.startsWith("organization") ? "api.organization" : "api"; + obj.grant_type = "client_credentials"; + obj.client_secret = this.clientSecret; + + return obj; + } +} diff --git a/common/src/models/request/identityToken/passwordTokenRequest.ts b/common/src/models/request/identityToken/passwordTokenRequest.ts new file mode 100644 index 00000000..a1d8466b --- /dev/null +++ b/common/src/models/request/identityToken/passwordTokenRequest.ts @@ -0,0 +1,36 @@ +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; + +import { CaptchaProtectedRequest } from "../captchaProtectedRequest"; +import { DeviceRequest } from "../deviceRequest"; + +import { Utils } from "../../../misc/utils"; + +export class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest { + constructor( + public email: string, + public masterPasswordHash: string, + public captchaResponse: string, + protected twoFactor: TokenRequestTwoFactor, + device?: DeviceRequest + ) { + super(twoFactor, device); + } + + toIdentityToken(clientId: string) { + const obj = super.toIdentityToken(clientId); + + obj.grant_type = "password"; + obj.username = this.email; + obj.password = this.masterPasswordHash; + + if (this.captchaResponse != null) { + obj.captchaResponse = this.captchaResponse; + } + + return obj; + } + + alterIdentityTokenHeaders(headers: Headers) { + headers.set("Auth-Email", Utils.fromUtf8ToUrlB64(this.email)); + } +} diff --git a/common/src/models/request/identityToken/ssoTokenRequest.ts b/common/src/models/request/identityToken/ssoTokenRequest.ts new file mode 100644 index 00000000..009b8cf8 --- /dev/null +++ b/common/src/models/request/identityToken/ssoTokenRequest.ts @@ -0,0 +1,26 @@ +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; + +import { DeviceRequest } from "../deviceRequest"; + +export class SsoTokenRequest extends TokenRequest { + constructor( + public code: string, + public codeVerifier: string, + public redirectUri: string, + protected twoFactor: TokenRequestTwoFactor, + device?: DeviceRequest + ) { + super(twoFactor, device); + } + + toIdentityToken(clientId: string) { + const obj = super.toIdentityToken(clientId); + + obj.grant_type = "authorization_code"; + obj.code = this.code; + obj.code_verifier = this.codeVerifier; + obj.redirect_uri = this.redirectUri; + + return obj; + } +} diff --git a/common/src/models/request/identityToken/tokenRequest.ts b/common/src/models/request/identityToken/tokenRequest.ts new file mode 100644 index 00000000..4e193cc0 --- /dev/null +++ b/common/src/models/request/identityToken/tokenRequest.ts @@ -0,0 +1,48 @@ +import { TwoFactorProviderType } from "../../../enums/twoFactorProviderType"; + +import { DeviceRequest } from "../deviceRequest"; + +export interface TokenRequestTwoFactor { + provider: TwoFactorProviderType; + token: string; + remember: boolean; +} + +export abstract class TokenRequest { + protected device?: DeviceRequest; + + constructor(protected twoFactor: TokenRequestTwoFactor, device?: DeviceRequest) { + this.device = device != null ? device : null; + } + + alterIdentityTokenHeaders(headers: Headers) { + // Implemented in subclass if required + } + + setTwoFactor(twoFactor: TokenRequestTwoFactor) { + this.twoFactor = twoFactor; + } + + protected toIdentityToken(clientId: string) { + const obj: any = { + scope: "api offline_access", + client_id: clientId, + }; + + if (this.device) { + obj.deviceType = this.device.type; + obj.deviceIdentifier = this.device.identifier; + obj.deviceName = this.device.name; + // no push tokens for browser apps yet + // obj.devicePushToken = this.device.pushToken; + } + + if (this.twoFactor.token && this.twoFactor.provider != null) { + obj.twoFactorToken = this.twoFactor.token; + obj.twoFactorProvider = this.twoFactor.provider; + obj.twoFactorRemember = this.twoFactor.remember ? "1" : "0"; + } + + return obj; + } +} diff --git a/common/src/models/request/tokenRequest.ts b/common/src/models/request/tokenRequest.ts deleted file mode 100644 index 43e344ae..00000000 --- a/common/src/models/request/tokenRequest.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; - -import { CaptchaProtectedRequest } from "./captchaProtectedRequest"; -import { DeviceRequest } from "./deviceRequest"; - -import { Utils } from "../../misc/utils"; - -export class TokenRequest implements CaptchaProtectedRequest { - email: string; - masterPasswordHash: string; - code: string; - codeVerifier: string; - redirectUri: string; - clientId: string; - clientSecret: string; - device?: DeviceRequest; - - constructor( - credentials: string[], - codes: string[], - clientIdClientSecret: string[], - public provider: TwoFactorProviderType, - public token: string, - public remember: boolean, - public captchaResponse: string, - device?: DeviceRequest - ) { - if (credentials != null && credentials.length > 1) { - this.email = credentials[0]; - this.masterPasswordHash = credentials[1]; - } else if (codes != null && codes.length > 2) { - this.code = codes[0]; - this.codeVerifier = codes[1]; - this.redirectUri = codes[2]; - } else if (clientIdClientSecret != null && clientIdClientSecret.length > 1) { - this.clientId = clientIdClientSecret[0]; - this.clientSecret = clientIdClientSecret[1]; - } - this.device = device != null ? device : null; - } - - toIdentityToken(clientId: string) { - const obj: any = { - scope: "api offline_access", - client_id: clientId, - }; - - if (this.clientSecret != null) { - obj.scope = clientId.startsWith("organization") ? "api.organization" : "api"; - obj.grant_type = "client_credentials"; - obj.client_secret = this.clientSecret; - } else if (this.masterPasswordHash != null && this.email != null) { - obj.grant_type = "password"; - obj.username = this.email; - obj.password = this.masterPasswordHash; - } else if (this.code != null && this.codeVerifier != null && this.redirectUri != null) { - obj.grant_type = "authorization_code"; - obj.code = this.code; - obj.code_verifier = this.codeVerifier; - obj.redirect_uri = this.redirectUri; - } else { - throw new Error("must provide credentials or codes"); - } - - if (this.device) { - obj.deviceType = this.device.type; - obj.deviceIdentifier = this.device.identifier; - obj.deviceName = this.device.name; - // no push tokens for browser apps yet - // obj.devicePushToken = this.device.pushToken; - } - - if (this.token && this.provider != null) { - obj.twoFactorToken = this.token; - obj.twoFactorProvider = this.provider; - obj.twoFactorRemember = this.remember ? "1" : "0"; - } - - if (this.captchaResponse != null) { - obj.captchaResponse = this.captchaResponse; - } - - return obj; - } - - alterIdentityTokenHeaders(headers: Headers) { - if (this.clientSecret == null && this.masterPasswordHash != null && this.email != null) { - headers.set("Auth-Email", Utils.fromUtf8ToUrlB64(this.email)); - } - } -} diff --git a/common/src/services/api.service.ts b/common/src/services/api.service.ts index 16b94b09..ba2dd046 100644 --- a/common/src/services/api.service.ts +++ b/common/src/services/api.service.ts @@ -28,6 +28,9 @@ import { EventRequest } from "../models/request/eventRequest"; import { FolderRequest } from "../models/request/folderRequest"; import { GroupRequest } from "../models/request/groupRequest"; import { IapCheckRequest } from "../models/request/iapCheckRequest"; +import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; +import { PasswordTokenRequest } from "../models/request/identityToken/passwordTokenRequest"; +import { SsoTokenRequest } from "../models/request/identityToken/ssoTokenRequest"; import { ImportCiphersRequest } from "../models/request/importCiphersRequest"; import { ImportDirectoryRequest } from "../models/request/importDirectoryRequest"; import { ImportOrganizationCiphersRequest } from "../models/request/importOrganizationCiphersRequest"; @@ -76,7 +79,6 @@ import { SendRequest } from "../models/request/sendRequest"; import { SetPasswordRequest } from "../models/request/setPasswordRequest"; import { StorageRequest } from "../models/request/storageRequest"; import { TaxInfoUpdateRequest } from "../models/request/taxInfoUpdateRequest"; -import { TokenRequest } from "../models/request/tokenRequest"; import { TwoFactorEmailRequest } from "../models/request/twoFactorEmailRequest"; import { TwoFactorProviderRequest } from "../models/request/twoFactorProviderRequest"; import { TwoFactorRecoveryRequest } from "../models/request/twoFactorRecoveryRequest"; @@ -208,7 +210,7 @@ export class ApiService implements ApiServiceAbstraction { // Auth APIs async postIdentityToken( - request: TokenRequest + request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest ): Promise { const headers = new Headers({ "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", @@ -219,11 +221,15 @@ export class ApiService implements ApiServiceAbstraction { headers.set("User-Agent", this.customUserAgent); } request.alterIdentityTokenHeaders(headers); + + const identityToken = + request instanceof ApiTokenRequest + ? request.toIdentityToken() + : request.toIdentityToken(this.platformUtilsService.identityClientId); + const response = await this.fetch( new Request(this.environmentService.getIdentityUrl() + "/connect/token", { - body: this.qsStringify( - request.toIdentityToken(request.clientId ?? this.platformUtilsService.identityClientId) - ), + body: this.qsStringify(identityToken), credentials: this.getCredentials(), cache: "no-store", headers: headers, @@ -244,7 +250,7 @@ export class ApiService implements ApiServiceAbstraction { responseJson.TwoFactorProviders2 && Object.keys(responseJson.TwoFactorProviders2).length ) { - await this.tokenService.clearTwoFactorToken(request.email); + await this.tokenService.clearTwoFactorToken(); return new IdentityTwoFactorResponse(responseJson); } else if ( response.status === 400 && diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 3d7506d3..93f85c4d 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -1,332 +1,125 @@ -import { HashPurpose } from "../enums/hashPurpose"; import { KdfType } from "../enums/kdfType"; -import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; -import { - Account, - AccountData, - AccountKeys, - AccountProfile, - AccountTokens, -} from "../models/domain/account"; +import { ApiLogInStrategy } from "../misc/logInStrategies/apiLogin.strategy"; +import { PasswordLogInStrategy } from "../misc/logInStrategies/passwordLogin.strategy"; +import { SsoLogInStrategy } from "../misc/logInStrategies/ssoLogin.strategy"; import { AuthResult } from "../models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "../models/domain/logInCredentials"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; -import { DeviceRequest } from "../models/request/deviceRequest"; -import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKeyRequest"; -import { KeysRequest } from "../models/request/keysRequest"; import { PreloginRequest } from "../models/request/preloginRequest"; -import { TokenRequest } from "../models/request/tokenRequest"; -import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; -import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; +import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; import { ApiService } from "../abstractions/api.service"; import { AppIdService } from "../abstractions/appId.service"; import { AuthService as AuthServiceAbstraction } from "../abstractions/auth.service"; import { CryptoService } from "../abstractions/crypto.service"; -import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { EnvironmentService } from "../abstractions/environment.service"; -import { I18nService } from "../abstractions/i18n.service"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { LogService } from "../abstractions/log.service"; import { MessagingService } from "../abstractions/messaging.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { StateService } from "../abstractions/state.service"; import { TokenService } from "../abstractions/token.service"; -import { VaultTimeoutService } from "../abstractions/vaultTimeout.service"; - -import { Utils } from "../misc/utils"; - -export const TwoFactorProviders = { - [TwoFactorProviderType.Authenticator]: { - type: TwoFactorProviderType.Authenticator, - name: null as string, - description: null as string, - priority: 1, - sort: 1, - premium: false, - }, - [TwoFactorProviderType.Yubikey]: { - type: TwoFactorProviderType.Yubikey, - name: null as string, - description: null as string, - priority: 3, - sort: 2, - premium: true, - }, - [TwoFactorProviderType.Duo]: { - type: TwoFactorProviderType.Duo, - name: "Duo", - description: null as string, - priority: 2, - sort: 3, - premium: true, - }, - [TwoFactorProviderType.OrganizationDuo]: { - type: TwoFactorProviderType.OrganizationDuo, - name: "Duo (Organization)", - description: null as string, - priority: 10, - sort: 4, - premium: false, - }, - [TwoFactorProviderType.Email]: { - type: TwoFactorProviderType.Email, - name: null as string, - description: null as string, - priority: 0, - sort: 6, - premium: false, - }, - [TwoFactorProviderType.WebAuthn]: { - type: TwoFactorProviderType.WebAuthn, - name: null as string, - description: null as string, - priority: 4, - sort: 5, - premium: true, - }, -}; +import { TwoFactorService } from "../abstractions/twoFactor.service"; export class AuthService implements AuthServiceAbstraction { - email: string; - masterPasswordHash: string; - localMasterPasswordHash: string; - code: string; - codeVerifier: string; - ssoRedirectUrl: string; - clientId: string; - clientSecret: string; - twoFactorProvidersData: Map; - selectedTwoFactorProviderType: TwoFactorProviderType = null; - captchaToken: string; + get email(): string { + return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null; + } - private key: SymmetricCryptoKey; + get masterPasswordHash(): string { + return this.logInStrategy instanceof PasswordLogInStrategy + ? this.logInStrategy.masterPasswordHash + : null; + } + + private logInStrategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy; constructor( - private cryptoService: CryptoService, + protected cryptoService: CryptoService, protected apiService: ApiService, protected tokenService: TokenService, protected appIdService: AppIdService, - private i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, - private messagingService: MessagingService, - private vaultTimeoutService: VaultTimeoutService, - private logService: LogService, - protected cryptoFunctionService: CryptoFunctionService, - private keyConnectorService: KeyConnectorService, + protected messagingService: MessagingService, + protected logService: LogService, + protected keyConnectorService: KeyConnectorService, protected environmentService: EnvironmentService, protected stateService: StateService, - private setCryptoKeys = true + protected twoFactorService: TwoFactorService ) {} - init() { - TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t("emailTitle"); - TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t("emailDesc"); - - TwoFactorProviders[TwoFactorProviderType.Authenticator].name = - this.i18nService.t("authenticatorAppTitle"); - TwoFactorProviders[TwoFactorProviderType.Authenticator].description = - this.i18nService.t("authenticatorAppDesc"); - - TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t("duoDesc"); - - TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name = - "Duo (" + this.i18nService.t("organization") + ")"; - TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description = - this.i18nService.t("duoOrganizationDesc"); - - TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t("webAuthnTitle"); - TwoFactorProviders[TwoFactorProviderType.WebAuthn].description = - this.i18nService.t("webAuthnDesc"); - - TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t("yubiKeyTitle"); - TwoFactorProviders[TwoFactorProviderType.Yubikey].description = - this.i18nService.t("yubiKeyDesc"); - } - - async logIn(email: string, masterPassword: string, captchaToken?: string): Promise { - this.selectedTwoFactorProviderType = null; - const key = await this.makePreloginKey(masterPassword, email); - const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key); - const localHashedPassword = await this.cryptoService.hashPassword( - masterPassword, - key, - HashPurpose.LocalAuthorization - ); - return await this.logInHelper( - email, - hashedPassword, - localHashedPassword, - null, - null, - null, - null, - null, - key, - null, - null, - null, - captchaToken, - null - ); - } - - async logInSso( - code: string, - codeVerifier: string, - redirectUrl: string, - orgId: string + async logIn( + credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials ): Promise { - this.selectedTwoFactorProviderType = null; - return await this.logInHelper( - null, - null, - null, - code, - codeVerifier, - redirectUrl, - null, - null, - null, - null, - null, - null, - null, - orgId - ); + this.clearState(); + + let result: AuthResult; + let strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy; + + if (credentials instanceof PasswordLogInCredentials) { + strategy = new PasswordLogInStrategy( + this.cryptoService, + this.apiService, + this.tokenService, + this.appIdService, + this.platformUtilsService, + this.messagingService, + this.logService, + this.stateService, + this.twoFactorService, + this + ); + result = await strategy.logIn(credentials); + } else if (credentials instanceof SsoLogInCredentials) { + strategy = new SsoLogInStrategy( + this.cryptoService, + this.apiService, + this.tokenService, + this.appIdService, + this.platformUtilsService, + this.messagingService, + this.logService, + this.stateService, + this.twoFactorService, + this.keyConnectorService + ); + result = await strategy.logIn(credentials); + } else if (credentials instanceof ApiLogInCredentials) { + strategy = new ApiLogInStrategy( + this.cryptoService, + this.apiService, + this.tokenService, + this.appIdService, + this.platformUtilsService, + this.messagingService, + this.logService, + this.stateService, + this.twoFactorService, + this.environmentService, + this.keyConnectorService + ); + result = await strategy.logIn(credentials); + } + + if (result?.requiresTwoFactor) { + this.saveState(strategy); + } + return result; } - async logInApiKey(clientId: string, clientSecret: string): Promise { - this.selectedTwoFactorProviderType = null; - return await this.logInHelper( - null, - null, - null, - null, - null, - null, - clientId, - clientSecret, - null, - null, - null, - null, - null, - null - ); - } - - async logInTwoFactor( - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean - ): Promise { - return await this.logInHelper( - this.email, - this.masterPasswordHash, - this.localMasterPasswordHash, - this.code, - this.codeVerifier, - this.ssoRedirectUrl, - this.clientId, - this.clientSecret, - this.key, - twoFactorProvider, - twoFactorToken, - remember, - this.captchaToken, - null - ); - } - - async logInComplete( - email: string, - masterPassword: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean, - captchaToken?: string - ): Promise { - this.selectedTwoFactorProviderType = null; - const key = await this.makePreloginKey(masterPassword, email); - const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key); - const localHashedPassword = await this.cryptoService.hashPassword( - masterPassword, - key, - HashPurpose.LocalAuthorization - ); - return await this.logInHelper( - email, - hashedPassword, - localHashedPassword, - null, - null, - null, - null, - null, - key, - twoFactorProvider, - twoFactorToken, - remember, - captchaToken, - null - ); - } - - async logInSsoComplete( - code: string, - codeVerifier: string, - redirectUrl: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean - ): Promise { - this.selectedTwoFactorProviderType = null; - return await this.logInHelper( - null, - null, - null, - code, - codeVerifier, - redirectUrl, - null, - null, - null, - twoFactorProvider, - twoFactorToken, - remember, - null, - null - ); - } - - async logInApiKeyComplete( - clientId: string, - clientSecret: string, - twoFactorProvider: TwoFactorProviderType, - twoFactorToken: string, - remember?: boolean - ): Promise { - this.selectedTwoFactorProviderType = null; - return await this.logInHelper( - null, - null, - null, - null, - null, - null, - clientId, - clientSecret, - null, - twoFactorProvider, - twoFactorToken, - remember, - null, - null - ); + async logInTwoFactor(twoFactor: TokenRequestTwoFactor): Promise { + try { + return await this.logInStrategy.logInTwoFactor(twoFactor); + } finally { + this.clearState(); + } } logOut(callback: Function) { @@ -334,75 +127,16 @@ export class AuthService implements AuthServiceAbstraction { this.messagingService.send("loggedOut"); } - getSupportedTwoFactorProviders(win: Window): any[] { - const providers: any[] = []; - if (this.twoFactorProvidersData == null) { - return providers; - } - - if ( - this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) && - this.platformUtilsService.supportsDuo() - ) { - providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]); - } - - if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) { - providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]); - } - - if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) { - providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]); - } - - if ( - this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && - this.platformUtilsService.supportsDuo() - ) { - providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]); - } - - if ( - this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) && - this.platformUtilsService.supportsWebAuthn(win) - ) { - providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]); - } - - if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) { - providers.push(TwoFactorProviders[TwoFactorProviderType.Email]); - } - - return providers; + authingWithApiKey(): boolean { + return this.logInStrategy instanceof ApiLogInStrategy; } - getDefaultTwoFactorProvider(webAuthnSupported: boolean): TwoFactorProviderType { - if (this.twoFactorProvidersData == null) { - return null; - } + authingWithSso(): boolean { + return this.logInStrategy instanceof SsoLogInStrategy; + } - if ( - this.selectedTwoFactorProviderType != null && - this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType) - ) { - return this.selectedTwoFactorProviderType; - } - - let providerType: TwoFactorProviderType = null; - let providerPriority = -1; - this.twoFactorProvidersData.forEach((_value, type) => { - const provider = (TwoFactorProviders as any)[type]; - if (provider != null && provider.priority > providerPriority) { - if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) { - return; - } - - providerType = type; - providerPriority = provider.priority; - } - }); - - return providerType; + authingWithPassword(): boolean { + return this.logInStrategy instanceof PasswordLogInStrategy; } async makePreloginKey(masterPassword: string, email: string): Promise { @@ -423,249 +157,11 @@ export class AuthService implements AuthServiceAbstraction { return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations); } - authingWithApiKey(): boolean { - return this.clientId != null && this.clientSecret != null; + private saveState(strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy) { + this.logInStrategy = strategy; } - authingWithSso(): boolean { - return this.code != null && this.codeVerifier != null && this.ssoRedirectUrl != null; - } - - authingWithPassword(): boolean { - return this.email != null && this.masterPasswordHash != null; - } - - private async logInHelper( - email: string, - hashedPassword: string, - localHashedPassword: string, - code: string, - codeVerifier: string, - redirectUrl: string, - clientId: string, - clientSecret: string, - key: SymmetricCryptoKey, - twoFactorProvider?: TwoFactorProviderType, - twoFactorToken?: string, - remember?: boolean, - captchaToken?: string, - orgId?: string - ): Promise { - const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(email); - const appId = await this.appIdService.getAppId(); - const deviceRequest = new DeviceRequest(appId, this.platformUtilsService); - - let emailPassword: string[] = []; - let codeCodeVerifier: string[] = []; - let clientIdClientSecret: [string, string] = [null, null]; - - if (email != null && hashedPassword != null) { - emailPassword = [email, hashedPassword]; - } else { - emailPassword = null; - } - if (code != null && codeVerifier != null && redirectUrl != null) { - codeCodeVerifier = [code, codeVerifier, redirectUrl]; - } else { - codeCodeVerifier = null; - } - if (clientId != null && clientSecret != null) { - clientIdClientSecret = [clientId, clientSecret]; - } else { - clientIdClientSecret = null; - } - - let request: TokenRequest; - if (twoFactorToken != null && twoFactorProvider != null) { - request = new TokenRequest( - emailPassword, - codeCodeVerifier, - clientIdClientSecret, - twoFactorProvider, - twoFactorToken, - remember, - captchaToken, - deviceRequest - ); - } else if (storedTwoFactorToken != null) { - request = new TokenRequest( - emailPassword, - codeCodeVerifier, - clientIdClientSecret, - TwoFactorProviderType.Remember, - storedTwoFactorToken, - false, - captchaToken, - deviceRequest - ); - } else { - request = new TokenRequest( - emailPassword, - codeCodeVerifier, - clientIdClientSecret, - null, - null, - false, - captchaToken, - deviceRequest - ); - } - - const response = await this.apiService.postIdentityToken(request); - - this.clearState(); - const result = new AuthResult(); - result.captchaSiteKey = (response as any).siteKey; - if (!!result.captchaSiteKey) { - return result; - } - result.twoFactor = !!(response as any).twoFactorProviders2; - - if (result.twoFactor) { - // two factor required - this.email = email; - this.masterPasswordHash = hashedPassword; - this.localMasterPasswordHash = localHashedPassword; - this.code = code; - this.codeVerifier = codeVerifier; - this.ssoRedirectUrl = redirectUrl; - this.clientId = clientId; - this.clientSecret = clientSecret; - this.key = this.setCryptoKeys ? key : null; - const twoFactorResponse = response as IdentityTwoFactorResponse; - this.twoFactorProvidersData = twoFactorResponse.twoFactorProviders2; - result.twoFactorProviders = twoFactorResponse.twoFactorProviders2; - this.captchaToken = twoFactorResponse.captchaToken; - return result; - } - - const tokenResponse = response as IdentityTokenResponse; - result.resetMasterPassword = tokenResponse.resetMasterPassword; - result.forcePasswordReset = tokenResponse.forcePasswordReset; - - const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken); - await this.stateService.addAccount( - new Account({ - profile: { - ...new AccountProfile(), - ...{ - userId: accountInformation.sub, - email: accountInformation.email, - apiKeyClientId: clientId, - hasPremiumPersonally: accountInformation.premium, - kdfIterations: tokenResponse.kdfIterations, - kdfType: tokenResponse.kdf, - }, - }, - keys: { - ...new AccountKeys(), - ...{ - apiKeyClientSecret: clientSecret, - }, - }, - tokens: { - ...new AccountTokens(), - ...{ - accessToken: tokenResponse.accessToken, - refreshToken: tokenResponse.refreshToken, - }, - }, - }) - ); - - if (tokenResponse.twoFactorToken != null) { - await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email); - } - - if (this.setCryptoKeys) { - if (key != null) { - await this.cryptoService.setKey(key); - } - if (localHashedPassword != null) { - await this.cryptoService.setKeyHash(localHashedPassword); - } - - // Skip this step during SSO new user flow. No key is returned from server. - if (code == null || tokenResponse.key != null) { - if (tokenResponse.keyConnectorUrl != null) { - await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl); - } else if (tokenResponse.apiUseKeyConnector) { - const keyConnectorUrl = this.environmentService.getKeyConnectorUrl(); - await this.keyConnectorService.getAndSetKey(keyConnectorUrl); - } - - await this.cryptoService.setEncKey(tokenResponse.key); - - // User doesn't have a key pair yet (old account), let's generate one for them - if (tokenResponse.privateKey == null) { - try { - const keyPair = await this.cryptoService.makeKeyPair(); - await this.apiService.postAccountKeys( - new KeysRequest(keyPair[0], keyPair[1].encryptedString) - ); - tokenResponse.privateKey = keyPair[1].encryptedString; - } catch (e) { - this.logService.error(e); - } - } - - await this.cryptoService.setEncPrivateKey(tokenResponse.privateKey); - } else if (tokenResponse.keyConnectorUrl != null) { - const password = await this.cryptoFunctionService.randomBytes(64); - - const k = await this.cryptoService.makeKey( - Utils.fromBufferToB64(password), - await this.tokenService.getEmail(), - tokenResponse.kdf, - tokenResponse.kdfIterations - ); - const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64); - await this.cryptoService.setKey(k); - - const encKey = await this.cryptoService.makeEncKey(k); - await this.cryptoService.setEncKey(encKey[1].encryptedString); - - const [pubKey, privKey] = await this.cryptoService.makeKeyPair(); - - try { - await this.apiService.postUserKeyToKeyConnector( - tokenResponse.keyConnectorUrl, - keyConnectorRequest - ); - } catch (e) { - throw new Error("Unable to reach key connector"); - } - - const keys = new KeysRequest(pubKey, privKey.encryptedString); - const setPasswordRequest = new SetKeyConnectorKeyRequest( - encKey[1].encryptedString, - tokenResponse.kdf, - tokenResponse.kdfIterations, - orgId, - keys - ); - await this.apiService.postSetKeyConnectorKey(setPasswordRequest); - } - } - - if (this.vaultTimeoutService != null) { - await this.stateService.setBiometricLocked(false); - } - this.messagingService.send("loggedIn"); - return result; - } - - private clearState(): void { - this.key = null; - this.email = null; - this.masterPasswordHash = null; - this.localMasterPasswordHash = null; - this.code = null; - this.codeVerifier = null; - this.ssoRedirectUrl = null; - this.clientId = null; - this.clientSecret = null; - this.twoFactorProvidersData = null; - this.selectedTwoFactorProviderType = null; + private clearState() { + this.logInStrategy = null; } } diff --git a/common/src/services/keyConnector.service.ts b/common/src/services/keyConnector.service.ts index 7296d9b1..847f4862 100644 --- a/common/src/services/keyConnector.service.ts +++ b/common/src/services/keyConnector.service.ts @@ -1,5 +1,6 @@ import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; +import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { KeyConnectorService as KeyConnectorServiceAbstraction } from "../abstractions/keyConnector.service"; import { LogService } from "../abstractions/log.service"; import { OrganizationService } from "../abstractions/organization.service"; @@ -12,7 +13,11 @@ import { Utils } from "../misc/utils"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKeyRequest"; +import { KeysRequest } from "../models/request/keysRequest"; + +import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; export class KeyConnectorService implements KeyConnectorServiceAbstraction { constructor( @@ -21,7 +26,8 @@ export class KeyConnectorService implements KeyConnectorServiceAbstraction { private apiService: ApiService, private tokenService: TokenService, private logService: LogService, - private organizationService: OrganizationService + private organizationService: OrganizationService, + private cryptoFunctionService: CryptoFunctionService ) {} setUsesKeyConnector(usesKeyConnector: boolean) { @@ -80,6 +86,41 @@ export class KeyConnectorService implements KeyConnectorServiceAbstraction { ); } + async convertNewSsoUserToKeyConnector(tokenResponse: IdentityTokenResponse, orgId: string) { + const { kdf, kdfIterations, keyConnectorUrl } = tokenResponse; + const password = await this.cryptoFunctionService.randomBytes(64); + + const k = await this.cryptoService.makeKey( + Utils.fromBufferToB64(password), + await this.tokenService.getEmail(), + kdf, + kdfIterations + ); + const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64); + await this.cryptoService.setKey(k); + + const encKey = await this.cryptoService.makeEncKey(k); + await this.cryptoService.setEncKey(encKey[1].encryptedString); + + const [pubKey, privKey] = await this.cryptoService.makeKeyPair(); + + try { + await this.apiService.postUserKeyToKeyConnector(keyConnectorUrl, keyConnectorRequest); + } catch (e) { + throw new Error("Unable to reach key connector"); + } + + const keys = new KeysRequest(pubKey, privKey.encryptedString); + const setPasswordRequest = new SetKeyConnectorKeyRequest( + encKey[1].encryptedString, + kdf, + kdfIterations, + orgId, + keys + ); + await this.apiService.postSetKeyConnectorKey(setPasswordRequest); + } + async setConvertAccountRequired(status: boolean) { await this.stateService.setConvertAccountToKeyConnector(status); } diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index bad5ce62..052d67ae 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -3,6 +3,8 @@ import { TokenService as TokenServiceAbstraction } from "../abstractions/token.s import { Utils } from "../misc/utils"; +import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; + export class TokenService implements TokenServiceAbstraction { constructor(private stateService: StateService) {} @@ -79,8 +81,8 @@ export class TokenService implements TokenServiceAbstraction { await this.setClientSecret(clientSecret); } - async setTwoFactorToken(token: string): Promise { - return await this.stateService.setTwoFactorToken(token); + async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise { + return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken); } async getTwoFactorToken(): Promise { diff --git a/common/src/services/twoFactor.service.ts b/common/src/services/twoFactor.service.ts new file mode 100644 index 00000000..facd8510 --- /dev/null +++ b/common/src/services/twoFactor.service.ts @@ -0,0 +1,188 @@ +import { I18nService } from "../abstractions/i18n.service"; +import { PlatformUtilsService } from "../abstractions/platformUtils.service"; +import { + TwoFactorProviderDetails, + TwoFactorService as TwoFactorServiceAbstraction, +} from "../abstractions/twoFactor.service"; + +import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; + +import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; + +export const TwoFactorProviders: Partial> = + { + [TwoFactorProviderType.Authenticator]: { + type: TwoFactorProviderType.Authenticator, + name: null as string, + description: null as string, + priority: 1, + sort: 1, + premium: false, + }, + [TwoFactorProviderType.Yubikey]: { + type: TwoFactorProviderType.Yubikey, + name: null as string, + description: null as string, + priority: 3, + sort: 2, + premium: true, + }, + [TwoFactorProviderType.Duo]: { + type: TwoFactorProviderType.Duo, + name: "Duo", + description: null as string, + priority: 2, + sort: 3, + premium: true, + }, + [TwoFactorProviderType.OrganizationDuo]: { + type: TwoFactorProviderType.OrganizationDuo, + name: "Duo (Organization)", + description: null as string, + priority: 10, + sort: 4, + premium: false, + }, + [TwoFactorProviderType.Email]: { + type: TwoFactorProviderType.Email, + name: null as string, + description: null as string, + priority: 0, + sort: 6, + premium: false, + }, + [TwoFactorProviderType.WebAuthn]: { + type: TwoFactorProviderType.WebAuthn, + name: null as string, + description: null as string, + priority: 4, + sort: 5, + premium: true, + }, + }; + +export class TwoFactorService implements TwoFactorServiceAbstraction { + private twoFactorProvidersData: Map; + private selectedTwoFactorProviderType: TwoFactorProviderType = null; + + constructor( + private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService + ) {} + + init() { + TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t("emailTitle"); + TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t("emailDesc"); + + TwoFactorProviders[TwoFactorProviderType.Authenticator].name = + this.i18nService.t("authenticatorAppTitle"); + TwoFactorProviders[TwoFactorProviderType.Authenticator].description = + this.i18nService.t("authenticatorAppDesc"); + + TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t("duoDesc"); + + TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name = + "Duo (" + this.i18nService.t("organization") + ")"; + TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description = + this.i18nService.t("duoOrganizationDesc"); + + TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t("webAuthnTitle"); + TwoFactorProviders[TwoFactorProviderType.WebAuthn].description = + this.i18nService.t("webAuthnDesc"); + + TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t("yubiKeyTitle"); + TwoFactorProviders[TwoFactorProviderType.Yubikey].description = + this.i18nService.t("yubiKeyDesc"); + } + + getSupportedProviders(win: Window): TwoFactorProviderDetails[] { + const providers: any[] = []; + if (this.twoFactorProvidersData == null) { + return providers; + } + + if ( + this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) && + this.platformUtilsService.supportsDuo() + ) { + providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]); + } + + if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) { + providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]); + } + + if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) { + providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]); + } + + if ( + this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && + this.platformUtilsService.supportsDuo() + ) { + providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]); + } + + if ( + this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) && + this.platformUtilsService.supportsWebAuthn(win) + ) { + providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]); + } + + if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) { + providers.push(TwoFactorProviders[TwoFactorProviderType.Email]); + } + + return providers; + } + + getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType { + if (this.twoFactorProvidersData == null) { + return null; + } + + if ( + this.selectedTwoFactorProviderType != null && + this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType) + ) { + return this.selectedTwoFactorProviderType; + } + + let providerType: TwoFactorProviderType = null; + let providerPriority = -1; + this.twoFactorProvidersData.forEach((_value, type) => { + const provider = (TwoFactorProviders as any)[type]; + if (provider != null && provider.priority > providerPriority) { + if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) { + return; + } + + providerType = type; + providerPriority = provider.priority; + } + }); + + return providerType; + } + + setSelectedProvider(type: TwoFactorProviderType) { + this.selectedTwoFactorProviderType = type; + } + + clearSelectedProvider() { + this.selectedTwoFactorProviderType = null; + } + + setProviders(response: IdentityTwoFactorResponse) { + this.twoFactorProvidersData = response.twoFactorProviders2; + } + + clearProviders() { + this.twoFactorProvidersData = null; + } + + getProviders() { + return this.twoFactorProvidersData; + } +} diff --git a/node/src/cli/commands/login.command.ts b/node/src/cli/commands/login.command.ts index 8dfac8ec..77eab11e 100644 --- a/node/src/cli/commands/login.command.ts +++ b/node/src/cli/commands/login.command.ts @@ -5,6 +5,11 @@ import * as inquirer from "inquirer"; import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; import { AuthResult } from "jslib-common/models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "jslib-common/models/domain/logInCredentials"; import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; import { ErrorResponse } from "jslib-common/models/response/errorResponse"; @@ -18,6 +23,7 @@ import { PasswordGenerationService } from "jslib-common/abstractions/passwordGen import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; import { Response } from "../models/response"; @@ -28,6 +34,8 @@ import { MessageResponse } from "../models/response/messageResponse"; import { NodeUtils } from "jslib-common/misc/nodeUtils"; import { Utils } from "jslib-common/misc/utils"; +import Separator from "inquirer/lib/objects/separator"; + // tslint:disable-next-line const open = require("open"); @@ -53,6 +61,7 @@ export class LoginCommand { protected stateService: StateService, protected cryptoService: CryptoService, protected policyService: PolicyService, + protected twoFactorService: TwoFactorService, clientId: string ) { this.clientId = clientId; @@ -143,163 +152,146 @@ export class LoginCommand { return Response.error("Invalid two-step login method."); } + const twoFactor = + twoFactorToken == null + ? null + : { + provider: twoFactorMethod, + token: twoFactorToken, + remember: false, + }; + try { if (this.validatedParams != null) { await this.validatedParams(); } let response: AuthResult = null; - if (twoFactorToken != null && twoFactorMethod != null) { - if (clientId != null && clientSecret != null) { - response = await this.authService.logInApiKeyComplete( - clientId, - clientSecret, - twoFactorMethod, - twoFactorToken, - false - ); - } else if (ssoCode != null && ssoCodeVerifier != null) { - response = await this.authService.logInSsoComplete( + if (clientId != null && clientSecret != null) { + response = await this.authService.logIn(new ApiLogInCredentials(clientId, clientSecret)); + } else if (ssoCode != null && ssoCodeVerifier != null) { + response = await this.authService.logIn( + new SsoLogInCredentials( ssoCode, ssoCodeVerifier, this.ssoRedirectUri, - twoFactorMethod, - twoFactorToken, - false - ); - } else { - response = await this.authService.logInComplete( - email, - password, - twoFactorMethod, - twoFactorToken, - false, - this.clientSecret - ); - } + orgIdentifier, + twoFactor + ) + ); } else { - if (clientId != null && clientSecret != null) { - response = await this.authService.logInApiKey(clientId, clientSecret); - } else if (ssoCode != null && ssoCodeVerifier != null) { - response = await this.authService.logInSso( - ssoCode, - ssoCodeVerifier, - this.ssoRedirectUri, - orgIdentifier + response = await this.authService.logIn( + new PasswordLogInCredentials(email, password, null, twoFactor) + ); + } + if (response.captchaSiteKey) { + const badCaptcha = Response.badRequest( + "Your authentication request appears to be coming from a bot\n" + + "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + + "(https://bitwarden.com/help/article/cli-auth-challenges)" + ); + + try { + const captchaClientSecret = await this.apiClientSecret(true); + if (Utils.isNullOrWhitespace(captchaClientSecret)) { + return badCaptcha; + } + + const secondResponse = await this.authService.logIn( + new PasswordLogInCredentials(email, password, captchaClientSecret, { + provider: twoFactorMethod, + token: twoFactorToken, + remember: false, + }) ); - } else { - response = await this.authService.logIn(email, password); - } - if (response.captchaSiteKey) { - const badCaptcha = Response.badRequest( - "Your authentication request appears to be coming from a bot\n" + - "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + - "(https://bitwarden.com/help/article/cli-auth-challenges)" - ); - - try { - const captchaClientSecret = await this.apiClientSecret(true); - if (Utils.isNullOrWhitespace(captchaClientSecret)) { - return badCaptcha; - } - - const secondResponse = await this.authService.logInComplete( - email, - password, - twoFactorMethod, - twoFactorToken, - false, - captchaClientSecret - ); - response = secondResponse; - } catch (e) { - if ( - (e instanceof ErrorResponse || e.constructor.name === "ErrorResponse") && - (e as ErrorResponse).message.includes("Captcha is invalid") - ) { - return badCaptcha; - } else { - throw e; - } - } - } - if (response.twoFactor) { - let selectedProvider: any = null; - const twoFactorProviders = this.authService.getSupportedTwoFactorProviders(null); - if (twoFactorProviders.length === 0) { - return Response.badRequest("No providers available for this client."); - } - - if (twoFactorMethod != null) { - try { - selectedProvider = twoFactorProviders.filter((p) => p.type === twoFactorMethod)[0]; - } catch (e) { - return Response.error("Invalid two-step login method."); - } - } - - if (selectedProvider == null) { - if (twoFactorProviders.length === 1) { - selectedProvider = twoFactorProviders[0]; - } else if (this.canInteract) { - const twoFactorOptions = twoFactorProviders.map((p) => p.name); - twoFactorOptions.push(new inquirer.Separator()); - twoFactorOptions.push("Cancel"); - const answer: inquirer.Answers = await inquirer.createPromptModule({ - output: process.stderr, - })({ - type: "list", - name: "method", - message: "Two-step login method:", - choices: twoFactorOptions, - }); - const i = twoFactorOptions.indexOf(answer.method); - if (i === twoFactorOptions.length - 1) { - return Response.error("Login failed."); - } - selectedProvider = twoFactorProviders[i]; - } - if (selectedProvider == null) { - return Response.error("Login failed. No provider selected."); - } - } - + response = secondResponse; + } catch (e) { if ( - twoFactorToken == null && - response.twoFactorProviders.size > 1 && - selectedProvider.type === TwoFactorProviderType.Email + (e instanceof ErrorResponse || e.constructor.name === "ErrorResponse") && + (e as ErrorResponse).message.includes("Captcha is invalid") ) { - const emailReq = new TwoFactorEmailRequest(); - emailReq.email = this.authService.email; - emailReq.masterPasswordHash = this.authService.masterPasswordHash; - await this.apiService.postTwoFactorEmail(emailReq); + return badCaptcha; + } else { + throw e; } - - if (twoFactorToken == null) { - if (this.canInteract) { - const answer: inquirer.Answers = await inquirer.createPromptModule({ - output: process.stderr, - })({ - type: "input", - name: "token", - message: "Two-step login code:", - }); - twoFactorToken = answer.token; - } - if (twoFactorToken == null || twoFactorToken === "") { - return Response.badRequest("Code is required."); - } - } - - response = await this.authService.logInTwoFactor( - selectedProvider.type, - twoFactorToken, - false - ); } } + if (response.requiresTwoFactor) { + let selectedProvider: any = null; + const twoFactorProviders = this.twoFactorService.getSupportedProviders(null); + if (twoFactorProviders.length === 0) { + return Response.badRequest("No providers available for this client."); + } - if (response.twoFactor) { + if (twoFactorMethod != null) { + try { + selectedProvider = twoFactorProviders.filter((p) => p.type === twoFactorMethod)[0]; + } catch (e) { + return Response.error("Invalid two-step login method."); + } + } + + if (selectedProvider == null) { + if (twoFactorProviders.length === 1) { + selectedProvider = twoFactorProviders[0]; + } else if (this.canInteract) { + const twoFactorOptions: (string | Separator)[] = twoFactorProviders.map((p) => p.name); + twoFactorOptions.push(new inquirer.Separator()); + twoFactorOptions.push("Cancel"); + const answer: inquirer.Answers = await inquirer.createPromptModule({ + output: process.stderr, + })({ + type: "list", + name: "method", + message: "Two-step login method:", + choices: twoFactorOptions, + }); + const i = twoFactorOptions.indexOf(answer.method); + if (i === twoFactorOptions.length - 1) { + return Response.error("Login failed."); + } + selectedProvider = twoFactorProviders[i]; + } + if (selectedProvider == null) { + return Response.error("Login failed. No provider selected."); + } + } + + if ( + twoFactorToken == null && + response.twoFactorProviders.size > 1 && + selectedProvider.type === TwoFactorProviderType.Email + ) { + const emailReq = new TwoFactorEmailRequest(); + emailReq.email = this.authService.email; + emailReq.masterPasswordHash = this.authService.masterPasswordHash; + await this.apiService.postTwoFactorEmail(emailReq); + } + + if (twoFactorToken == null) { + if (this.canInteract) { + const answer: inquirer.Answers = await inquirer.createPromptModule({ + output: process.stderr, + })({ + type: "input", + name: "token", + message: "Two-step login code:", + }); + twoFactorToken = answer.token; + } + if (twoFactorToken == null || twoFactorToken === "") { + return Response.badRequest("Code is required."); + } + } + + response = await this.authService.logInTwoFactor({ + provider: selectedProvider.type, + token: twoFactorToken, + remember: false, + }); + } + + if (response.requiresTwoFactor) { return Response.error("Login failed."); } diff --git a/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts new file mode 100644 index 00000000..6ce8b4c9 --- /dev/null +++ b/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts @@ -0,0 +1,116 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { ApiService } from "jslib-common/abstractions/api.service"; +import { AppIdService } from "jslib-common/abstractions/appId.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { EnvironmentService } from "jslib-common/abstractions/environment.service"; +import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service"; +import { LogService } from "jslib-common/abstractions/log.service"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { StateService } from "jslib-common/abstractions/state.service"; +import { TokenService } from "jslib-common/abstractions/token.service"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; + +import { ApiLogInStrategy } from "jslib-common/misc/logInStrategies/apiLogin.strategy"; +import { Utils } from "jslib-common/misc/utils"; + +import { ApiLogInCredentials } from "jslib-common/models/domain/logInCredentials"; + +import { identityTokenResponseFactory } from "./logIn.strategy.spec"; + +describe("ApiLogInStrategy", () => { + let cryptoService: SubstituteOf; + let apiService: SubstituteOf; + let tokenService: SubstituteOf; + let appIdService: SubstituteOf; + let platformUtilsService: SubstituteOf; + let messagingService: SubstituteOf; + let logService: SubstituteOf; + let environmentService: SubstituteOf; + let keyConnectorService: SubstituteOf; + let stateService: SubstituteOf; + let twoFactorService: SubstituteOf; + + let apiLogInStrategy: ApiLogInStrategy; + let credentials: ApiLogInCredentials; + + const deviceId = Utils.newGuid(); + const keyConnectorUrl = "KEY_CONNECTOR_URL"; + const apiClientId = "API_CLIENT_ID"; + const apiClientSecret = "API_CLIENT_SECRET"; + + beforeEach(async () => { + cryptoService = Substitute.for(); + apiService = Substitute.for(); + tokenService = Substitute.for(); + appIdService = Substitute.for(); + platformUtilsService = Substitute.for(); + messagingService = Substitute.for(); + logService = Substitute.for(); + environmentService = Substitute.for(); + stateService = Substitute.for(); + keyConnectorService = Substitute.for(); + twoFactorService = Substitute.for(); + + appIdService.getAppId().resolves(deviceId); + tokenService.getTwoFactorToken().resolves(null); + + apiLogInStrategy = new ApiLogInStrategy( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService, + environmentService, + keyConnectorService + ); + + credentials = new ApiLogInCredentials(apiClientId, apiClientSecret); + }); + + it("sends api key credentials to the server", async () => { + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + await apiLogInStrategy.logIn(credentials); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const apiTokenRequest = actual as any; + return ( + apiTokenRequest.clientId === apiClientId && + apiTokenRequest.clientSecret === apiClientSecret && + apiTokenRequest.device.identifier === deviceId && + apiTokenRequest.twoFactor.provider == null && + apiTokenRequest.twoFactor.token == null && + apiTokenRequest.captchaResponse == null + ); + }) + ); + }); + + it("sets the local environment after a successful login", async () => { + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + + await apiLogInStrategy.logIn(credentials); + + stateService.received(1).setApiKeyClientId(apiClientId); + stateService.received(1).setApiKeyClientSecret(apiClientSecret); + stateService.received(1).addAccount(Arg.any()); + }); + + it("gets and sets the Key Connector key from environmentUrl", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.apiUseKeyConnector = true; + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + environmentService.getKeyConnectorUrl().returns(keyConnectorUrl); + + await apiLogInStrategy.logIn(credentials); + + keyConnectorService.received(1).getAndSetKey(keyConnectorUrl); + }); +}); diff --git a/spec/common/misc/logInStrategies/logIn.strategy.spec.ts b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts new file mode 100644 index 00000000..c3d97f3d --- /dev/null +++ b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts @@ -0,0 +1,293 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { ApiService } from "jslib-common/abstractions/api.service"; +import { AppIdService } from "jslib-common/abstractions/appId.service"; +import { AuthService } from "jslib-common/abstractions/auth.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { LogService } from "jslib-common/abstractions/log.service"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { StateService } from "jslib-common/abstractions/state.service"; +import { TokenService } from "jslib-common/abstractions/token.service"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; + +import { PasswordLogInStrategy } from "jslib-common/misc/logInStrategies/passwordLogin.strategy"; +import { Utils } from "jslib-common/misc/utils"; + +import { Account, AccountProfile, AccountTokens } from "jslib-common/models/domain/account"; +import { AuthResult } from "jslib-common/models/domain/authResult"; +import { EncString } from "jslib-common/models/domain/encString"; +import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; + +import { PasswordTokenRequest } from "jslib-common/models/request/identityToken/passwordTokenRequest"; + +import { IdentityCaptchaResponse } from "jslib-common/models/response/identityCaptchaResponse"; +import { IdentityTokenResponse } from "jslib-common/models/response/identityTokenResponse"; +import { IdentityTwoFactorResponse } from "jslib-common/models/response/identityTwoFactorResponse"; + +import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; + +const email = "hello@world.com"; +const masterPassword = "password"; + +const deviceId = Utils.newGuid(); +const accessToken = "ACCESS_TOKEN"; +const refreshToken = "REFRESH_TOKEN"; +const encKey = "ENC_KEY"; +const privateKey = "PRIVATE_KEY"; +const captchaSiteKey = "CAPTCHA_SITE_KEY"; +const kdf = 0; +const kdfIterations = 10000; +const userId = Utils.newGuid(); +const masterPasswordHash = "MASTER_PASSWORD_HASH"; + +const decodedToken = { + sub: userId, + email: email, + premium: false, +}; + +const twoFactorProviderType = TwoFactorProviderType.Authenticator; +const twoFactorToken = "TWO_FACTOR_TOKEN"; +const twoFactorRemember = true; + +export function identityTokenResponseFactory() { + return new IdentityTokenResponse({ + ForcePasswordReset: false, + Kdf: kdf, + KdfIterations: kdfIterations, + Key: encKey, + PrivateKey: privateKey, + ResetMasterPassword: false, + access_token: accessToken, + expires_in: 3600, + refresh_token: refreshToken, + scope: "api offline_access", + token_type: "Bearer", + }); +} + +describe("LogInStrategy", () => { + let cryptoService: SubstituteOf; + let apiService: SubstituteOf; + let tokenService: SubstituteOf; + let appIdService: SubstituteOf; + let platformUtilsService: SubstituteOf; + let messagingService: SubstituteOf; + let logService: SubstituteOf; + let stateService: SubstituteOf; + let twoFactorService: SubstituteOf; + let authService: SubstituteOf; + + let passwordLogInStrategy: PasswordLogInStrategy; + let credentials: PasswordLogInCredentials; + + beforeEach(async () => { + cryptoService = Substitute.for(); + apiService = Substitute.for(); + tokenService = Substitute.for(); + appIdService = Substitute.for(); + platformUtilsService = Substitute.for(); + messagingService = Substitute.for(); + logService = Substitute.for(); + stateService = Substitute.for(); + twoFactorService = Substitute.for(); + authService = Substitute.for(); + + appIdService.getAppId().resolves(deviceId); + + // The base class is abstract so we test it via PasswordLogInStrategy + passwordLogInStrategy = new PasswordLogInStrategy( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService, + authService + ); + credentials = new PasswordLogInCredentials(email, masterPassword); + }); + + describe("base class", () => { + it("sets the local environment after a successful login", async () => { + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + tokenService.decodeToken(accessToken).resolves(decodedToken); + + await passwordLogInStrategy.logIn(credentials); + + stateService.received(1).addAccount( + new Account({ + profile: { + ...new AccountProfile(), + ...{ + userId: userId, + email: email, + hasPremiumPersonally: false, + kdfIterations: kdfIterations, + kdfType: kdf, + }, + }, + tokens: { + ...new AccountTokens(), + ...{ + accessToken: accessToken, + refreshToken: refreshToken, + }, + }, + }) + ); + cryptoService.received(1).setEncKey(encKey); + cryptoService.received(1).setEncPrivateKey(privateKey); + + stateService.received(1).setBiometricLocked(false); + messagingService.received(1).send("loggedIn"); + }); + + it("builds AuthResult", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.forcePasswordReset = true; + tokenResponse.resetMasterPassword = true; + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + const result = await passwordLogInStrategy.logIn(credentials); + + const expected = new AuthResult(); + expected.forcePasswordReset = true; + expected.resetMasterPassword = true; + expected.twoFactorProviders = null; + expected.captchaSiteKey = ""; + expect(result).toEqual(expected); + }); + + it("rejects login if CAPTCHA is required", async () => { + // Sample CAPTCHA response + const tokenResponse = new IdentityCaptchaResponse({ + error: "invalid_grant", + error_description: "Captcha required.", + HCaptcha_SiteKey: captchaSiteKey, + }); + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + const result = await passwordLogInStrategy.logIn(credentials); + + stateService.didNotReceive().addAccount(Arg.any()); + messagingService.didNotReceive().send(Arg.any()); + + const expected = new AuthResult(); + expected.captchaSiteKey = captchaSiteKey; + expect(result).toEqual(expected); + }); + + it("makes a new public and private key for an old account", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.privateKey = null; + cryptoService.makeKeyPair(Arg.any()).resolves(["PUBLIC_KEY", new EncString("PRIVATE_KEY")]); + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + await passwordLogInStrategy.logIn(credentials); + + apiService.received(1).postAccountKeys(Arg.any()); + }); + }); + + describe("Two-factor authentication", () => { + it("rejects login if 2FA is required", async () => { + // Sample response where TOTP 2FA required + const tokenResponse = new IdentityTwoFactorResponse({ + TwoFactorProviders: ["0"], + TwoFactorProviders2: { 0: null }, + error: "invalid_grant", + error_description: "Two factor required.", + }); + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + const result = await passwordLogInStrategy.logIn(credentials); + + stateService.didNotReceive().addAccount(Arg.any()); + messagingService.didNotReceive().send(Arg.any()); + + const expected = new AuthResult(); + expected.twoFactorProviders = new Map(); + expected.twoFactorProviders.set(0, null); + expect(result).toEqual(expected); + }); + + it("sends stored 2FA token to server", async () => { + tokenService.getTwoFactorToken().resolves(twoFactorToken); + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + + await passwordLogInStrategy.logIn(credentials); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const passwordTokenRequest = actual as any; + return ( + passwordTokenRequest.twoFactor.provider === TwoFactorProviderType.Remember && + passwordTokenRequest.twoFactor.token === twoFactorToken && + passwordTokenRequest.twoFactor.remember === false + ); + }) + ); + }); + + it("sends 2FA token provided by user to server (single step)", async () => { + // This occurs if the user enters the 2FA code as an argument in the CLI + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + credentials.twoFactor = { + provider: twoFactorProviderType, + token: twoFactorToken, + remember: twoFactorRemember, + }; + + await passwordLogInStrategy.logIn(credentials); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const passwordTokenRequest = actual as any; + return ( + passwordTokenRequest.twoFactor.provider === twoFactorProviderType && + passwordTokenRequest.twoFactor.token === twoFactorToken && + passwordTokenRequest.twoFactor.remember === twoFactorRemember + ); + }) + ); + }); + + it("sends 2FA token provided by user to server (two-step)", async () => { + // Simulate a partially completed login + passwordLogInStrategy.tokenRequest = new PasswordTokenRequest( + email, + masterPasswordHash, + null, + null + ); + + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + + await passwordLogInStrategy.logInTwoFactor({ + provider: twoFactorProviderType, + token: twoFactorToken, + remember: twoFactorRemember, + }); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const passwordTokenRequest = actual as any; + return ( + passwordTokenRequest.twoFactor.provider === twoFactorProviderType && + passwordTokenRequest.twoFactor.token === twoFactorToken && + passwordTokenRequest.twoFactor.remember === twoFactorRemember + ); + }) + ); + }); + }); +}); diff --git a/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts new file mode 100644 index 00000000..4d4aa1dd --- /dev/null +++ b/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts @@ -0,0 +1,113 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { ApiService } from "jslib-common/abstractions/api.service"; +import { AppIdService } from "jslib-common/abstractions/appId.service"; +import { AuthService } from "jslib-common/abstractions/auth.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { LogService } from "jslib-common/abstractions/log.service"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { StateService } from "jslib-common/abstractions/state.service"; +import { TokenService } from "jslib-common/abstractions/token.service"; +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; + +import { PasswordLogInStrategy } from "jslib-common/misc/logInStrategies/passwordLogin.strategy"; +import { Utils } from "jslib-common/misc/utils"; + +import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; +import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; + +import { HashPurpose } from "jslib-common/enums/hashPurpose"; + +import { identityTokenResponseFactory } from "./logIn.strategy.spec"; + +const email = "hello@world.com"; +const masterPassword = "password"; +const hashedPassword = "HASHED_PASSWORD"; +const localHashedPassword = "LOCAL_HASHED_PASSWORD"; +const preloginKey = new SymmetricCryptoKey( + Utils.fromB64ToArray( + "N2KWjlLpfi5uHjv+YcfUKIpZ1l+W+6HRensmIqD+BFYBf6N/dvFpJfWwYnVBdgFCK2tJTAIMLhqzIQQEUmGFgg==" + ) +); +const deviceId = Utils.newGuid(); + +describe("PasswordLogInStrategy", () => { + let cryptoService: SubstituteOf; + let apiService: SubstituteOf; + let tokenService: SubstituteOf; + let appIdService: SubstituteOf; + let platformUtilsService: SubstituteOf; + let messagingService: SubstituteOf; + let logService: SubstituteOf; + let stateService: SubstituteOf; + let twoFactorService: SubstituteOf; + let authService: SubstituteOf; + + let passwordLogInStrategy: PasswordLogInStrategy; + let credentials: PasswordLogInCredentials; + + beforeEach(async () => { + cryptoService = Substitute.for(); + apiService = Substitute.for(); + tokenService = Substitute.for(); + appIdService = Substitute.for(); + platformUtilsService = Substitute.for(); + messagingService = Substitute.for(); + logService = Substitute.for(); + stateService = Substitute.for(); + twoFactorService = Substitute.for(); + authService = Substitute.for(); + + appIdService.getAppId().resolves(deviceId); + tokenService.getTwoFactorToken().resolves(null); + + authService.makePreloginKey(Arg.any(), Arg.any()).resolves(preloginKey); + + cryptoService.hashPassword(masterPassword, Arg.any()).resolves(hashedPassword); + cryptoService + .hashPassword(masterPassword, Arg.any(), HashPurpose.LocalAuthorization) + .resolves(localHashedPassword); + + passwordLogInStrategy = new PasswordLogInStrategy( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService, + authService + ); + credentials = new PasswordLogInCredentials(email, masterPassword); + + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + }); + + it("sends master password credentials to the server", async () => { + await passwordLogInStrategy.logIn(credentials); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const passwordTokenRequest = actual as any; // Need to access private fields + return ( + passwordTokenRequest.email === email && + passwordTokenRequest.masterPasswordHash === hashedPassword && + passwordTokenRequest.device.identifier === deviceId && + passwordTokenRequest.twoFactor.provider == null && + passwordTokenRequest.twoFactor.token == null && + passwordTokenRequest.captchaResponse == null + ); + }) + ); + }); + + it("sets the local environment after a successful login", async () => { + await passwordLogInStrategy.logIn(credentials); + + cryptoService.received(1).setKey(preloginKey); + cryptoService.received(1).setKeyHash(localHashedPassword); + }); +}); diff --git a/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts new file mode 100644 index 00000000..fdb20330 --- /dev/null +++ b/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts @@ -0,0 +1,130 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { ApiService } from "jslib-common/abstractions/api.service"; +import { AppIdService } from "jslib-common/abstractions/appId.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service"; +import { LogService } from "jslib-common/abstractions/log.service"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { StateService } from "jslib-common/abstractions/state.service"; +import { TokenService } from "jslib-common/abstractions/token.service"; + +import { SsoLogInStrategy } from "jslib-common/misc/logInStrategies/ssoLogin.strategy"; +import { Utils } from "jslib-common/misc/utils"; + +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; + +import { identityTokenResponseFactory } from "./logIn.strategy.spec"; + +import { SsoLogInCredentials } from "jslib-common/models/domain/logInCredentials"; + +describe("SsoLogInStrategy", () => { + let cryptoService: SubstituteOf; + let apiService: SubstituteOf; + let tokenService: SubstituteOf; + let appIdService: SubstituteOf; + let platformUtilsService: SubstituteOf; + let messagingService: SubstituteOf; + let logService: SubstituteOf; + let keyConnectorService: SubstituteOf; + let stateService: SubstituteOf; + let twoFactorService: SubstituteOf; + + let ssoLogInStrategy: SsoLogInStrategy; + let credentials: SsoLogInCredentials; + + const deviceId = Utils.newGuid(); + const encKey = "ENC_KEY"; + const privateKey = "PRIVATE_KEY"; + const keyConnectorUrl = "KEY_CONNECTOR_URL"; + + const ssoCode = "SSO_CODE"; + const ssoCodeVerifier = "SSO_CODE_VERIFIER"; + const ssoRedirectUrl = "SSO_REDIRECT_URL"; + const ssoOrgId = "SSO_ORG_ID"; + + beforeEach(async () => { + cryptoService = Substitute.for(); + apiService = Substitute.for(); + tokenService = Substitute.for(); + appIdService = Substitute.for(); + platformUtilsService = Substitute.for(); + messagingService = Substitute.for(); + logService = Substitute.for(); + stateService = Substitute.for(); + keyConnectorService = Substitute.for(); + twoFactorService = Substitute.for(); + + tokenService.getTwoFactorToken().resolves(null); + appIdService.getAppId().resolves(deviceId); + + ssoLogInStrategy = new SsoLogInStrategy( + cryptoService, + apiService, + tokenService, + appIdService, + platformUtilsService, + messagingService, + logService, + stateService, + twoFactorService, + keyConnectorService + ); + credentials = new SsoLogInCredentials(ssoCode, ssoCodeVerifier, ssoRedirectUrl, ssoOrgId); + }); + + it("sends SSO information to server", async () => { + apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); + + await ssoLogInStrategy.logIn(credentials); + + apiService.received(1).postIdentityToken( + Arg.is((actual) => { + const ssoTokenRequest = actual as any; + return ( + ssoTokenRequest.code === ssoCode && + ssoTokenRequest.codeVerifier === ssoCodeVerifier && + ssoTokenRequest.redirectUri === ssoRedirectUrl && + ssoTokenRequest.device.identifier === deviceId && + ssoTokenRequest.twoFactor.provider == null && + ssoTokenRequest.twoFactor.token == null + ); + }) + ); + }); + + it("does not set keys for new SSO user flow", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.key = null; + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + await ssoLogInStrategy.logIn(credentials); + + cryptoService.didNotReceive().setEncPrivateKey(privateKey); + cryptoService.didNotReceive().setEncKey(encKey); + }); + + it("gets and sets KeyConnector key for enrolled user", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.keyConnectorUrl = keyConnectorUrl; + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + await ssoLogInStrategy.logIn(credentials); + + keyConnectorService.received(1).getAndSetKey(keyConnectorUrl); + }); + + it("converts new SSO user to Key Connector on first login", async () => { + const tokenResponse = identityTokenResponseFactory(); + tokenResponse.keyConnectorUrl = keyConnectorUrl; + tokenResponse.key = null; + + apiService.postIdentityToken(Arg.any()).resolves(tokenResponse); + + await ssoLogInStrategy.logIn(credentials); + + keyConnectorService.received(1).convertNewSsoUserToKeyConnector(tokenResponse, ssoOrgId); + }); +}); From ca5c6a9c3250f943d88e0766c9de314ca35b37dd Mon Sep 17 00:00:00 2001 From: Jake Fink Date: Wed, 2 Feb 2022 23:31:37 -0500 Subject: [PATCH 056/120] Master password policy is not checked when accepting invite from an existing account (#597) * create update-password component * linting and prettier --- .../components/update-password.component.ts | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 angular/src/components/update-password.component.ts diff --git a/angular/src/components/update-password.component.ts b/angular/src/components/update-password.component.ts new file mode 100644 index 00000000..909831c5 --- /dev/null +++ b/angular/src/components/update-password.component.ts @@ -0,0 +1,130 @@ +import { Directive } from "@angular/core"; +import { Router } from "@angular/router"; + +import { ApiService } from "jslib-common/abstractions/api.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { I18nService } from "jslib-common/abstractions/i18n.service"; +import { LogService } from "jslib-common/abstractions/log.service"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; +import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { PolicyService } from "jslib-common/abstractions/policy.service"; +import { StateService } from "jslib-common/abstractions/state.service"; +import { UserVerificationService } from "jslib-common/abstractions/userVerification.service"; + +import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; + +import { EncString } from "jslib-common/models/domain/encString"; +import { MasterPasswordPolicyOptions } from "jslib-common/models/domain/masterPasswordPolicyOptions"; +import { PasswordRequest } from "jslib-common/models/request/passwordRequest"; + +import { VerificationType } from "jslib-common/enums/verificationType"; +import { Verification } from "jslib-common/types/verification"; + +import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; + +@Directive() +export class UpdatePasswordComponent extends BaseChangePasswordComponent { + hint: string; + key: string; + enforcedPolicyOptions: MasterPasswordPolicyOptions; + showPassword: boolean = false; + currentMasterPassword: string; + + onSuccessfulChangePassword: () => Promise; + + constructor( + protected router: Router, + i18nService: I18nService, + platformUtilsService: PlatformUtilsService, + passwordGenerationService: PasswordGenerationService, + policyService: PolicyService, + cryptoService: CryptoService, + messagingService: MessagingService, + private apiService: ApiService, + stateService: StateService, + private userVerificationService: UserVerificationService, + private logService: LogService + ) { + super( + i18nService, + cryptoService, + messagingService, + passwordGenerationService, + platformUtilsService, + policyService, + stateService + ); + } + + togglePassword(confirmField: boolean) { + this.showPassword = !this.showPassword; + document.getElementById(confirmField ? "masterPasswordRetype" : "masterPassword").focus(); + } + + async cancel() { + await this.stateService.setOrganizationInvitation(null); + await this.stateService.setLoginRedirect(null); + this.router.navigate(["/vault"]); + } + + async setupSubmitActions(): Promise { + if (this.currentMasterPassword == null || this.currentMasterPassword === "") { + this.platformUtilsService.showToast( + "error", + this.i18nService.t("errorOccurred"), + this.i18nService.t("masterPassRequired") + ); + return false; + } + + const secret: Verification = { + type: VerificationType.MasterPassword, + secret: this.currentMasterPassword, + }; + try { + await this.userVerificationService.verifyUser(secret); + } catch (e) { + this.platformUtilsService.showToast("error", this.i18nService.t("errorOccurred"), e.message); + return false; + } + + this.kdf = await this.stateService.getKdfType(); + this.kdfIterations = await this.stateService.getKdfIterations(); + return true; + } + + async performSubmitActions( + masterPasswordHash: string, + key: SymmetricCryptoKey, + encKey: [SymmetricCryptoKey, EncString] + ) { + try { + // Create Request + const request = new PasswordRequest(); + request.masterPasswordHash = await this.cryptoService.hashPassword( + this.currentMasterPassword, + null + ); + request.newMasterPasswordHash = masterPasswordHash; + request.key = encKey[1].encryptedString; + + // Update user's password + this.apiService.postPassword(request); + + this.platformUtilsService.showToast( + "success", + this.i18nService.t("masterPasswordChanged"), + this.i18nService.t("logBackIn") + ); + + if (this.onSuccessfulChangePassword != null) { + this.onSuccessfulChangePassword(); + } else { + this.messagingService.send("logout"); + } + } catch (e) { + this.logService.error(e); + } + } +} From 067cd1e0e17f584ede2494b5174d99696d1cebcc Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 3 Feb 2022 13:32:42 -0500 Subject: [PATCH 057/120] [bug] Assign client specific account settings during migration (#653) * [bug] Assign client specific account settings during migration * [refactor] Write State type arguements in consistent order * [style] Ran prettier --- angular/src/services/jslib-services.module.ts | 2 +- common/src/factories/stateFactory.ts | 5 +- common/src/models/domain/state.ts | 4 +- common/src/services/state.service.ts | 9 +- common/src/services/stateMigration.service.ts | 169 ++++++++++-------- 5 files changed, 103 insertions(+), 86 deletions(-) diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index ec6261cf..2e2245a2 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -360,7 +360,7 @@ import { StateFactory } from "jslib-common/factories/stateFactory"; new StateMigrationService( storageService, secureStorageService, - new GlobalStateFactory(GlobalState) + new StateFactory(GlobalState, Account) ), deps: [StorageServiceAbstraction, "SECURE_STORAGE"], }, diff --git a/common/src/factories/stateFactory.ts b/common/src/factories/stateFactory.ts index 5df194af..4672fa59 100644 --- a/common/src/factories/stateFactory.ts +++ b/common/src/factories/stateFactory.ts @@ -3,7 +3,10 @@ import { GlobalState } from "../models/domain/globalState"; import { AccountFactory } from "./accountFactory"; import { GlobalStateFactory } from "./globalStateFactory"; -export class StateFactory { +export class StateFactory< + TGlobal extends GlobalState = GlobalState, + TAccount extends Account = Account +> { private globalStateFactory: GlobalStateFactory; private accountFactory: AccountFactory; diff --git a/common/src/models/domain/state.ts b/common/src/models/domain/state.ts index c87ff6e8..00a5347a 100644 --- a/common/src/models/domain/state.ts +++ b/common/src/models/domain/state.ts @@ -2,8 +2,8 @@ import { Account } from "./account"; import { GlobalState } from "./globalState"; export class State< - TAccount extends Account = Account, - TGlobalState extends GlobalState = GlobalState + TGlobalState extends GlobalState = GlobalState, + TAccount extends Account = Account > { accounts: { [userId: string]: TAccount } = {}; globals: TGlobalState; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 8ce399e9..c718b29b 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -55,14 +55,14 @@ const partialKeys = { }; export class StateService< - TAccount extends Account = Account, - TGlobalState extends GlobalState = GlobalState + TGlobalState extends GlobalState = GlobalState, + TAccount extends Account = Account > implements StateServiceAbstraction { accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({}); activeAccount = new BehaviorSubject(null); - protected state: State = new State( + protected state: State = new State( this.createGlobals() ); @@ -73,7 +73,7 @@ export class StateService< protected secureStorageService: StorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, - protected stateFactory: StateFactory + protected stateFactory: StateFactory ) {} async init(): Promise { @@ -2233,7 +2233,6 @@ export class StateService< account.settings = await this.storageService.get(keys.tempAccountSettings); await this.storageService.remove(keys.tempAccountSettings); } - Object.assign(account.settings, this.createAccount().settings); account.settings.environmentUrls = environmentUrls; await this.storageService.save( account.profile.userId, diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index c1bf03a7..7844544f 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -21,6 +21,8 @@ import { ThemeType } from "../enums/themeType"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; import { GlobalStateFactory } from "../factories/globalStateFactory"; +import { StateFactory } from "../factories/stateFactory"; +import { Account, AccountSettings } from "../models/domain/account"; // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. @@ -128,11 +130,14 @@ const partialKeys = { masterKey: "_masterkey", }; -export class StateMigrationService { +export class StateMigrationService< + TGlobalState extends GlobalState = GlobalState, + TAccount extends Account = Account +> { constructor( protected storageService: StorageService, protected secureStorageService: StorageService, - protected globalStateFactory: GlobalStateFactory + protected stateFactory: StateFactory ) {} async needsMigration(): Promise { @@ -177,7 +182,8 @@ export class StateMigrationService(keys.global)) ?? this.globalStateFactory.create(); + const globals = + (await this.get(keys.global)) ?? this.stateFactory.createGlobal(null); globals.stateVersion = StateVersion.Two; globals.environmentUrls = (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls; @@ -220,46 +226,91 @@ export class StateMigrationService(v1Keys.userId)) ?? (await this.get(v1Keys.entityId)); + const defaultAccount = this.stateFactory.createAccount(null); + const accountSettings: AccountSettings = { + autoConfirmFingerPrints: + (await this.get(v1Keys.autoConfirmFingerprints)) ?? + defaultAccount.settings.autoConfirmFingerPrints, + autoFillOnPageLoadDefault: + (await this.get(v1Keys.autoFillOnPageLoadDefault)) ?? + defaultAccount.settings.autoFillOnPageLoadDefault, + biometricLocked: null, + biometricUnlock: + (await this.get(v1Keys.biometricUnlock)) ?? + defaultAccount.settings.biometricUnlock, + clearClipboard: + (await this.get(v1Keys.clearClipboard)) ?? defaultAccount.settings.clearClipboard, + defaultUriMatch: + (await this.get(v1Keys.defaultUriMatch)) ?? defaultAccount.settings.defaultUriMatch, + disableAddLoginNotification: + (await this.get(v1Keys.disableAddLoginNotification)) ?? + defaultAccount.settings.disableAddLoginNotification, + disableAutoBiometricsPrompt: + (await this.get(v1Keys.disableAutoBiometricsPrompt)) ?? + defaultAccount.settings.disableAutoBiometricsPrompt, + disableAutoTotpCopy: + (await this.get(v1Keys.disableAutoTotpCopy)) ?? + defaultAccount.settings.disableAutoTotpCopy, + disableBadgeCounter: + (await this.get(v1Keys.disableBadgeCounter)) ?? + defaultAccount.settings.disableBadgeCounter, + disableChangedPasswordNotification: + (await this.get(v1Keys.disableChangedPasswordNotification)) ?? + defaultAccount.settings.disableChangedPasswordNotification, + disableContextMenuItem: + (await this.get(v1Keys.disableContextMenuItem)) ?? + defaultAccount.settings.disableContextMenuItem, + disableGa: (await this.get(v1Keys.disableGa)) ?? defaultAccount.settings.disableGa, + dontShowCardsCurrentTab: + (await this.get(v1Keys.dontShowCardsCurrentTab)) ?? + defaultAccount.settings.dontShowCardsCurrentTab, + dontShowIdentitiesCurrentTab: + (await this.get(v1Keys.dontShowIdentitiesCurrentTab)) ?? + defaultAccount.settings.dontShowIdentitiesCurrentTab, + enableAlwaysOnTop: + (await this.get(v1Keys.enableAlwaysOnTop)) ?? + defaultAccount.settings.enableAlwaysOnTop, + enableAutoFillOnPageLoad: + (await this.get(v1Keys.enableAutoFillOnPageLoad)) ?? + defaultAccount.settings.enableAutoFillOnPageLoad, + enableBiometric: + (await this.get(v1Keys.enableBiometric)) ?? + defaultAccount.settings.enableBiometric, + enableFullWidth: + (await this.get(v1Keys.enableFullWidth)) ?? + defaultAccount.settings.enableFullWidth, + enableGravitars: + (await this.get(v1Keys.enableGravatars)) ?? + defaultAccount.settings.enableGravitars, + environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls, + equivalentDomains: + (await this.get(v1Keys.equivalentDomains)) ?? + defaultAccount.settings.equivalentDomains, + minimizeOnCopyToClipboard: + (await this.get(v1Keys.minimizeOnCopyToClipboard)) ?? + defaultAccount.settings.minimizeOnCopyToClipboard, + neverDomains: + (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains, + passwordGenerationOptions: + (await this.get(v1Keys.passwordGenerationOptions)) ?? + defaultAccount.settings.passwordGenerationOptions, + pinProtected: { + decrypted: null, + encrypted: await this.get(v1Keys.pinProtected), + }, + protectedPin: await this.get(v1Keys.protectedPin), + settings: userId == null ? null : await this.get(v1KeyPrefixes.settings + userId), + vaultTimeout: + (await this.get(v1Keys.vaultTimeout)) ?? defaultAccount.settings.vaultTimeout, + vaultTimeoutAction: + (await this.get(v1Keys.vaultTimeoutAction)) ?? + defaultAccount.settings.vaultTimeoutAction, + }; + // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings if (userId == null) { - await this.set(keys.tempAccountSettings, { - autoConfirmFingerPrints: await this.get(v1Keys.autoConfirmFingerprints), - autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), - biometricLocked: null, - biometricUnlock: await this.get(v1Keys.biometricUnlock), - clearClipboard: await this.get(v1Keys.clearClipboard), - defaultUriMatch: await this.get(v1Keys.defaultUriMatch), - disableAddLoginNotification: await this.get(v1Keys.disableAddLoginNotification), - disableAutoBiometricsPrompt: await this.get(v1Keys.disableAutoBiometricsPrompt), - disableAutoTotpCopy: await this.get(v1Keys.disableAutoTotpCopy), - disableBadgeCounter: await this.get(v1Keys.disableBadgeCounter), - disableChangedPasswordNotification: await this.get( - v1Keys.disableChangedPasswordNotification - ), - disableContextMenuItem: await this.get(v1Keys.disableContextMenuItem), - disableGa: await this.get(v1Keys.disableGa), - dontShowCardsCurrentTab: await this.get(v1Keys.dontShowCardsCurrentTab), - dontShowIdentitiesCurrentTab: await this.get(v1Keys.dontShowIdentitiesCurrentTab), - enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), - enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), - enableBiometric: await this.get(v1Keys.enableBiometric), - enableFullWidth: await this.get(v1Keys.enableFullWidth), - enableGravitars: await this.get(v1Keys.enableGravatars), - environmentUrls: globals.environmentUrls, - equivalentDomains: await this.get(v1Keys.equivalentDomains), - minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), - neverDomains: await this.get(v1Keys.neverDomains), - passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), - pinProtected: { - decrypted: null, - encrypted: await this.get(v1Keys.pinProtected), - }, - protectedPin: await this.get(v1Keys.protectedPin), - settings: null, - vaultTimeout: await this.get(v1Keys.vaultTimeout), - vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), - }); + await this.set(keys.tempAccountSettings, accountSettings); await this.set(keys.global, globals); await this.set(keys.authenticatedAccounts, []); await this.set(keys.activeUserId, null); @@ -350,43 +401,7 @@ export class StateMigrationService(v1Keys.autoConfirmFingerprints), - autoFillOnPageLoadDefault: await this.get(v1Keys.autoFillOnPageLoadDefault), - biometricLocked: null, - biometricUnlock: await this.get(v1Keys.biometricUnlock), - clearClipboard: await this.get(v1Keys.clearClipboard), - defaultUriMatch: await this.get(v1Keys.defaultUriMatch), - disableAddLoginNotification: await this.get(v1Keys.disableAddLoginNotification), - disableAutoBiometricsPrompt: await this.get(v1Keys.disableAutoBiometricsPrompt), - disableAutoTotpCopy: await this.get(v1Keys.disableAutoTotpCopy), - disableBadgeCounter: await this.get(v1Keys.disableBadgeCounter), - disableChangedPasswordNotification: await this.get( - v1Keys.disableChangedPasswordNotification - ), - disableContextMenuItem: await this.get(v1Keys.disableContextMenuItem), - disableGa: await this.get(v1Keys.disableGa), - dontShowCardsCurrentTab: await this.get(v1Keys.dontShowCardsCurrentTab), - dontShowIdentitiesCurrentTab: await this.get(v1Keys.dontShowIdentitiesCurrentTab), - enableAlwaysOnTop: await this.get(v1Keys.enableAlwaysOnTop), - enableAutoFillOnPageLoad: await this.get(v1Keys.enableAutoFillOnPageLoad), - enableBiometric: await this.get(v1Keys.enableBiometric), - enableFullWidth: await this.get(v1Keys.enableFullWidth), - enableGravitars: await this.get(v1Keys.enableGravatars), - environmentUrls: globals.environmentUrls, - equivalentDomains: await this.get(v1Keys.equivalentDomains), - minimizeOnCopyToClipboard: await this.get(v1Keys.minimizeOnCopyToClipboard), - neverDomains: await this.get(v1Keys.neverDomains), - passwordGenerationOptions: await this.get(v1Keys.passwordGenerationOptions), - pinProtected: { - decrypted: null, - encrypted: await this.get(v1Keys.pinProtected), - }, - protectedPin: await this.get(v1Keys.protectedPin), - settings: await this.get(v1KeyPrefixes.settings + userId), - vaultTimeout: await this.get(v1Keys.vaultTimeout), - vaultTimeoutAction: await this.get(v1Keys.vaultTimeoutAction), - }, + settings: accountSettings, tokens: { accessToken: await this.get(v1Keys.accessToken), decodedToken: null, From 9dccd3198f349df00cf39d6112c77b17060167e9 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Thu, 3 Feb 2022 19:37:51 +0100 Subject: [PATCH 058/120] Fix avatar error when src is undefined (#652) --- angular/src/components/avatar.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular/src/components/avatar.component.ts b/angular/src/components/avatar.component.ts index e00a68a8..d433857a 100644 --- a/angular/src/components/avatar.component.ts +++ b/angular/src/components/avatar.component.ts @@ -9,7 +9,7 @@ import { Utils } from "jslib-common/misc/utils"; @Component({ selector: "app-avatar", template: - '", }) export class AvatarComponent implements OnChanges, OnInit { From f6ba2521390eb8b0eb090d73fc12cb4ddd964781 Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Thu, 3 Feb 2022 22:24:22 +0100 Subject: [PATCH 059/120] Temporarily remove keeper json import for the Feb release (#654) --- common/src/services/import.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index adf014bf..825d5904 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -101,7 +101,8 @@ export class ImportService implements ImportServiceAbstraction { { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, { id: "roboformcsv", name: "RoboForm (csv)" }, { id: "keepercsv", name: "Keeper (csv)" }, - { id: "keeperjson", name: "Keeper (json)" }, + // Temporarily remove this option for the Feb release + // { id: "keeperjson", name: "Keeper (json)" }, { id: "enpasscsv", name: "Enpass (csv)" }, { id: "enpassjson", name: "Enpass (json)" }, { id: "safeincloudxml", name: "SafeInCloud (xml)" }, From ec9559520bb536c8caca55d3110801adb92eed71 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Fri, 4 Feb 2022 07:59:55 +1000 Subject: [PATCH 060/120] Fix bug where no passwords recorded in history (#650) --- common/src/services/passwordGeneration.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/passwordGeneration.service.ts b/common/src/services/passwordGeneration.service.ts index 4e5d5872..2cc6f6d0 100644 --- a/common/src/services/passwordGeneration.service.ts +++ b/common/src/services/passwordGeneration.service.ts @@ -348,7 +348,7 @@ export class PasswordGenerationService implements PasswordGenerationServiceAbstr return new Array(); } - if ((await this.stateService.getDecryptedPasswordGenerationHistory()) != null) { + if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) { const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory(); const decrypted = await this.decryptHistory(encrypted); await this.stateService.setDecryptedPasswordGenerationHistory(decrypted); From 425250162054f2584e4b28e275fbd6646496dad6 Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Fri, 4 Feb 2022 11:38:56 +0000 Subject: [PATCH 061/120] Add lazy loading and decoding to images (#591) The lazy loading will work in addition to any already being done, rather than conflicting with it. Co-authored-by: Daniel James Smith --- angular/src/components/icon.component.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/angular/src/components/icon.component.html b/angular/src/components/icon.component.html index a8e4ac9f..27182fbb 100644 --- a/angular/src/components/icon.component.html +++ b/angular/src/components/icon.component.html @@ -1,4 +1,11 @@ From 380a7c7ee54121a55938729a3ef3d574b3e5937d Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Fri, 4 Feb 2022 09:22:19 -0500 Subject: [PATCH 062/120] Use Identity server routes (#649) * Use Identity server routes We've moved `prelogin` and `register` endpoints to the Indentity project Reflecting that change here * Only update path for dev environment --- common/src/services/api.service.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/common/src/services/api.service.ts b/common/src/services/api.service.ts index ba2dd046..4eda12e1 100644 --- a/common/src/services/api.service.ts +++ b/common/src/services/api.service.ts @@ -304,7 +304,16 @@ export class ApiService implements ApiServiceAbstraction { } async postPrelogin(request: PreloginRequest): Promise { - const r = await this.send("POST", "/accounts/prelogin", request, false, true); + const r = await this.send( + "POST", + "/accounts/prelogin", + request, + false, + true, + this.platformUtilsService.isDev() + ? this.environmentService.getIdentityUrl() + : this.environmentService.getApiUrl() + ); return new PreloginResponse(r); } @@ -346,7 +355,16 @@ export class ApiService implements ApiServiceAbstraction { } postRegister(request: RegisterRequest): Promise { - return this.send("POST", "/accounts/register", request, false, false); + return this.send( + "POST", + "/accounts/register", + request, + false, + false, + this.platformUtilsService.isDev() + ? this.environmentService.getIdentityUrl() + : this.environmentService.getApiUrl() + ); } async postPremium(data: FormData): Promise { From 9caea70ea2dbfdb591ef08a3d33def7f591f1276 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Mon, 7 Feb 2022 07:33:19 +1000 Subject: [PATCH 063/120] [authService refactor] Fix browser by not using instanceof (#647) * use authenticationType enum instead of instanceof --- common/src/enums/authenticationType.ts | 5 +++++ common/src/models/domain/logInCredentials.ts | 8 ++++++++ common/src/services/auth.service.ts | 14 +++++++------- 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 common/src/enums/authenticationType.ts diff --git a/common/src/enums/authenticationType.ts b/common/src/enums/authenticationType.ts new file mode 100644 index 00000000..ed7375c8 --- /dev/null +++ b/common/src/enums/authenticationType.ts @@ -0,0 +1,5 @@ +export enum AuthenticationType { + Password = 0, + Sso = 1, + Api = 2, +} diff --git a/common/src/models/domain/logInCredentials.ts b/common/src/models/domain/logInCredentials.ts index d53da02e..91bb9a76 100644 --- a/common/src/models/domain/logInCredentials.ts +++ b/common/src/models/domain/logInCredentials.ts @@ -1,6 +1,10 @@ +import { AuthenticationType } from "../../enums/authenticationType"; + import { TokenRequestTwoFactor } from "../request/identityToken/tokenRequest"; export class PasswordLogInCredentials { + readonly type = AuthenticationType.Password; + constructor( public email: string, public masterPassword: string, @@ -10,6 +14,8 @@ export class PasswordLogInCredentials { } export class SsoLogInCredentials { + readonly type = AuthenticationType.Sso; + constructor( public code: string, public codeVerifier: string, @@ -20,5 +26,7 @@ export class SsoLogInCredentials { } export class ApiLogInCredentials { + readonly type = AuthenticationType.Api; + constructor(public clientId: string, public clientSecret: string) {} } diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 93f85c4d..3bd4f34d 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -28,6 +28,8 @@ import { StateService } from "../abstractions/state.service"; import { TokenService } from "../abstractions/token.service"; import { TwoFactorService } from "../abstractions/twoFactor.service"; +import { AuthenticationType } from "../enums/authenticationType"; + export class AuthService implements AuthServiceAbstraction { get email(): string { return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null; @@ -60,10 +62,9 @@ export class AuthService implements AuthServiceAbstraction { ): Promise { this.clearState(); - let result: AuthResult; let strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy; - if (credentials instanceof PasswordLogInCredentials) { + if (credentials.type === AuthenticationType.Password) { strategy = new PasswordLogInStrategy( this.cryptoService, this.apiService, @@ -76,8 +77,7 @@ export class AuthService implements AuthServiceAbstraction { this.twoFactorService, this ); - result = await strategy.logIn(credentials); - } else if (credentials instanceof SsoLogInCredentials) { + } else if (credentials.type === AuthenticationType.Sso) { strategy = new SsoLogInStrategy( this.cryptoService, this.apiService, @@ -90,8 +90,7 @@ export class AuthService implements AuthServiceAbstraction { this.twoFactorService, this.keyConnectorService ); - result = await strategy.logIn(credentials); - } else if (credentials instanceof ApiLogInCredentials) { + } else if (credentials.type === AuthenticationType.Api) { strategy = new ApiLogInStrategy( this.cryptoService, this.apiService, @@ -105,9 +104,10 @@ export class AuthService implements AuthServiceAbstraction { this.environmentService, this.keyConnectorService ); - result = await strategy.logIn(credentials); } + const result = await strategy.logIn(credentials as any); + if (result?.requiresTwoFactor) { this.saveState(strategy); } From 7afb7487912960655a8f62562f352225240ac65d Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Mon, 7 Feb 2022 10:33:10 -0500 Subject: [PATCH 064/120] Feature/password protected export (#612) * Add password protected export * Run prettier * Test password protected export service * Create type for known import type strings * Test import service changes * Test bitwarden password importer * Run prettier * Remove unnecessary class properties * Run prettier * Tslint fixes * Add KdfType to password protected export * Linter fixes * run prettier --- common/src/abstractions/export.service.ts | 5 + common/src/abstractions/import.service.ts | 7 +- .../bitwardenPasswordProtectedImporter.ts | 101 +++++++++ common/src/services/export.service.ts | 40 +++- common/src/services/import.service.ts | 159 ++++++++------ ...bitwardenPasswordProtectedImporter.spec.ts | 203 ++++++++++++++++++ spec/common/services/export.service.spec.ts | 80 ++++++- spec/common/services/import.service.spec.ts | 74 +++++++ 8 files changed, 594 insertions(+), 75 deletions(-) create mode 100644 common/src/importers/bitwardenPasswordProtectedImporter.ts create mode 100644 spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts create mode 100644 spec/common/services/import.service.spec.ts diff --git a/common/src/abstractions/export.service.ts b/common/src/abstractions/export.service.ts index fa0b63ff..1d3fbce7 100644 --- a/common/src/abstractions/export.service.ts +++ b/common/src/abstractions/export.service.ts @@ -2,6 +2,11 @@ import { EventView } from "../models/view/eventView"; export abstract class ExportService { getExport: (format?: "csv" | "json" | "encrypted_json") => Promise; + getPasswordProtectedExport: ( + password: string, + format?: "csv" | "json" | "encrypted_json", + organizationId?: string + ) => Promise; getOrganizationExport: ( organizationId: string, format?: "csv" | "json" | "encrypted_json" diff --git a/common/src/abstractions/import.service.ts b/common/src/abstractions/import.service.ts index e9c92a18..799ddd92 100644 --- a/common/src/abstractions/import.service.ts +++ b/common/src/abstractions/import.service.ts @@ -1,13 +1,14 @@ import { Importer } from "../importers/importer"; +import { ImportType } from "../services/import.service"; export interface ImportOption { id: string; name: string; } export abstract class ImportService { - featuredImportOptions: ImportOption[]; - regularImportOptions: ImportOption[]; + featuredImportOptions: readonly ImportOption[]; + regularImportOptions: readonly ImportOption[]; getImportOptions: () => ImportOption[]; import: (importer: Importer, fileContents: string, organizationId?: string) => Promise; - getImporter: (format: string, organizationId: string) => Importer; + getImporter: (format: ImportType, organizationId: string, password?: string) => Importer; } diff --git a/common/src/importers/bitwardenPasswordProtectedImporter.ts b/common/src/importers/bitwardenPasswordProtectedImporter.ts new file mode 100644 index 00000000..1e193212 --- /dev/null +++ b/common/src/importers/bitwardenPasswordProtectedImporter.ts @@ -0,0 +1,101 @@ +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + +import { EncString } from "../models/domain/encString"; +import { ImportResult } from "../models/domain/importResult"; + +import { CryptoService } from "../abstractions/crypto.service"; +import { I18nService } from "../abstractions/i18n.service"; +import { ImportService } from "../abstractions/import.service"; +import { KdfType } from "../enums/kdfType"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; + +class BitwardenPasswordProtectedFileFormat { + encrypted: boolean; + passwordProtected: boolean; + format: "json" | "csv" | "encrypted_json"; + salt: string; + kdfIterations: number; + kdfType: number; + // tslint:disable-next-line + encKeyValidation_DO_NOT_EDIT: string; + data: string; +} + +export class BitwardenPasswordProtectedImporter extends BaseImporter implements Importer { + private innerImporter: Importer; + private key: SymmetricCryptoKey; + + constructor( + private importService: ImportService, + private cryptoService: CryptoService, + private i18nService: I18nService, + private password: string + ) { + super(); + } + + async parse(data: string): Promise { + const result = new ImportResult(); + const parsedData = JSON.parse(data); + if (this.cannotParseFile(parsedData)) { + result.success = false; + return result; + } + + this.setInnerImporter(parsedData.format); + + if (!(await this.checkPassword(parsedData))) { + result.success = false; + result.errorMessage = this.i18nService.t("importEncKeyError"); + return result; + } + + const encData = new EncString(parsedData.data); + const clearTextData = await this.cryptoService.decryptToUtf8(encData, this.key); + return this.innerImporter.parse(clearTextData); + } + + private async checkPassword(jdoc: BitwardenPasswordProtectedFileFormat): Promise { + this.key = await this.cryptoService.makePinKey( + this.password, + jdoc.salt, + KdfType.PBKDF2_SHA256, + jdoc.kdfIterations + ); + + const encKeyValidation = new EncString(jdoc.encKeyValidation_DO_NOT_EDIT); + + const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8( + encKeyValidation, + this.key + ); + if (encKeyValidationDecrypt === null) { + return false; + } + return true; + } + + private cannotParseFile(jdoc: BitwardenPasswordProtectedFileFormat): boolean { + return ( + !jdoc || + !jdoc.encrypted || + !jdoc.passwordProtected || + !(jdoc.format === "csv" || jdoc.format === "json" || jdoc.format === "encrypted_json") || + !jdoc.salt || + !jdoc.kdfIterations || + typeof jdoc.kdfIterations !== "number" || + jdoc.kdfType == null || + KdfType[jdoc.kdfType] == null || + !jdoc.encKeyValidation_DO_NOT_EDIT || + !jdoc.data + ); + } + + private setInnerImporter(format: "csv" | "json" | "encrypted_json") { + this.innerImporter = + format === "csv" + ? this.importService.getImporter("bitwardencsv", this.organizationId) + : this.importService.getImporter("bitwardenjson", this.organizationId); + } +} diff --git a/common/src/services/export.service.ts b/common/src/services/export.service.ts index 31b1b0b6..cbc18fe4 100644 --- a/common/src/services/export.service.ts +++ b/common/src/services/export.service.ts @@ -1,10 +1,12 @@ import * as papa from "papaparse"; import { CipherType } from "../enums/cipherType"; +import { KdfType } from "../enums/kdfType"; import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CryptoService } from "../abstractions/crypto.service"; +import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { ExportService as ExportServiceAbstraction } from "../abstractions/export.service"; import { FolderService } from "../abstractions/folder.service"; @@ -33,7 +35,8 @@ export class ExportService implements ExportServiceAbstraction { private folderService: FolderService, private cipherService: CipherService, private apiService: ApiService, - private cryptoService: CryptoService + private cryptoService: CryptoService, + private cryptoFunctionService: CryptoFunctionService ) {} async getExport(format: "csv" | "json" | "encrypted_json" = "csv"): Promise { @@ -44,6 +47,41 @@ export class ExportService implements ExportServiceAbstraction { } } + async getPasswordProtectedExport( + password: string, + format: "csv" | "json" | "encrypted_json" = "csv", + organizationId?: string + ): Promise { + const clearText = organizationId + ? await this.getOrganizationExport(organizationId, format) + : await this.getExport(format); + + const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16)); + const kdfIterations = 100000; + const key = await this.cryptoService.makePinKey( + password, + salt, + KdfType.PBKDF2_SHA256, + kdfIterations + ); + + const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key); + const encText = await this.cryptoService.encrypt(clearText, key); + + const jsonDoc: any = { + encrypted: true, + passwordProtected: true, + format: format, + salt: salt, + kdfIterations: kdfIterations, + kdfType: KdfType.PBKDF2_SHA256, + encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString, + data: encText.encryptedString, + }; + + return JSON.stringify(jsonDoc, null, " "); + } + async getOrganizationExport( organizationId: string, format: "csv" | "json" | "encrypted_json" = "csv" diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 825d5904..332e5815 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -32,6 +32,7 @@ import { AvastJsonImporter } from "../importers/avastJsonImporter"; import { AviraCsvImporter } from "../importers/aviraCsvImporter"; import { BitwardenCsvImporter } from "../importers/bitwardenCsvImporter"; import { BitwardenJsonImporter } from "../importers/bitwardenJsonImporter"; +import { BitwardenPasswordProtectedImporter } from "../importers/bitwardenPasswordProtectedImporter"; import { BlackBerryCsvImporter } from "../importers/blackBerryCsvImporter"; import { BlurCsvImporter } from "../importers/blurCsvImporter"; import { ButtercupCsvImporter } from "../importers/buttercupCsvImporter"; @@ -82,70 +83,79 @@ import { UpmCsvImporter } from "../importers/upmCsvImporter"; import { YotiCsvImporter } from "../importers/yotiCsvImporter"; import { ZohoVaultCsvImporter } from "../importers/zohoVaultCsvImporter"; -export class ImportService implements ImportServiceAbstraction { - featuredImportOptions = [ - { id: "bitwardenjson", name: "Bitwarden (json)" }, - { id: "bitwardencsv", name: "Bitwarden (csv)" }, - { id: "chromecsv", name: "Chrome (csv)" }, - { id: "dashlanejson", name: "Dashlane (json)" }, - { id: "firefoxcsv", name: "Firefox (csv)" }, - { id: "keepass2xml", name: "KeePass 2 (xml)" }, - { id: "lastpasscsv", name: "LastPass (csv)" }, - { id: "safaricsv", name: "Safari and macOS (csv)" }, - { id: "1password1pif", name: "1Password (1pif)" }, - ]; +const featuredImportOptions = [ + { id: "bitwardenjson", name: "Bitwarden (json)" }, + { id: "bitwardencsv", name: "Bitwarden (csv)" }, + { id: "chromecsv", name: "Chrome (csv)" }, + { id: "dashlanejson", name: "Dashlane (json)" }, + { id: "firefoxcsv", name: "Firefox (csv)" }, + { id: "keepass2xml", name: "KeePass 2 (xml)" }, + { id: "lastpasscsv", name: "LastPass (csv)" }, + { id: "safaricsv", name: "Safari and macOS (csv)" }, + { id: "1password1pif", name: "1Password (1pif)" }, +] as const; - regularImportOptions: ImportOption[] = [ - { id: "keepassxcsv", name: "KeePassX (csv)" }, - { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, - { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, - { id: "roboformcsv", name: "RoboForm (csv)" }, - { id: "keepercsv", name: "Keeper (csv)" }, - // Temporarily remove this option for the Feb release - // { id: "keeperjson", name: "Keeper (json)" }, - { id: "enpasscsv", name: "Enpass (csv)" }, - { id: "enpassjson", name: "Enpass (json)" }, - { id: "safeincloudxml", name: "SafeInCloud (xml)" }, - { id: "pwsafexml", name: "Password Safe (xml)" }, - { id: "stickypasswordxml", name: "Sticky Password (xml)" }, - { id: "msecurecsv", name: "mSecure (csv)" }, - { id: "truekeycsv", name: "True Key (csv)" }, - { id: "passwordbossjson", name: "Password Boss (json)" }, - { id: "zohovaultcsv", name: "Zoho Vault (csv)" }, - { id: "splashidcsv", name: "SplashID (csv)" }, - { id: "passworddragonxml", name: "Password Dragon (xml)" }, - { id: "padlockcsv", name: "Padlock (csv)" }, - { id: "passboltcsv", name: "Passbolt (csv)" }, - { id: "clipperzhtml", name: "Clipperz (html)" }, - { id: "aviracsv", name: "Avira (csv)" }, - { id: "saferpasscsv", name: "SaferPass (csv)" }, - { id: "upmcsv", name: "Universal Password Manager (csv)" }, - { id: "ascendocsv", name: "Ascendo DataVault (csv)" }, - { id: "meldiumcsv", name: "Meldium (csv)" }, - { id: "passkeepcsv", name: "PassKeep (csv)" }, - { id: "operacsv", name: "Opera (csv)" }, - { id: "vivaldicsv", name: "Vivaldi (csv)" }, - { id: "gnomejson", name: "GNOME Passwords and Keys/Seahorse (json)" }, - { id: "blurcsv", name: "Blur (csv)" }, - { id: "passwordagentcsv", name: "Password Agent (csv)" }, - { id: "passpackcsv", name: "Passpack (csv)" }, - { id: "passmanjson", name: "Passman (json)" }, - { id: "avastcsv", name: "Avast Passwords (csv)" }, - { id: "avastjson", name: "Avast Passwords (json)" }, - { id: "fsecurefsk", name: "F-Secure KEY (fsk)" }, - { id: "kasperskytxt", name: "Kaspersky Password Manager (txt)" }, - { id: "remembearcsv", name: "RememBear (csv)" }, - { id: "passwordwallettxt", name: "PasswordWallet (txt)" }, - { id: "mykicsv", name: "Myki (csv)" }, - { id: "securesafecsv", name: "SecureSafe (csv)" }, - { id: "logmeoncecsv", name: "LogMeOnce (csv)" }, - { id: "blackberrycsv", name: "BlackBerry Password Keeper (csv)" }, - { id: "buttercupcsv", name: "Buttercup (csv)" }, - { id: "codebookcsv", name: "Codebook (csv)" }, - { id: "encryptrcsv", name: "Encryptr (csv)" }, - { id: "yoticsv", name: "Yoti (csv)" }, - { id: "nordpasscsv", name: "Nordpass (csv)" }, - ]; +const regularImportOptions = [ + { id: "keepassxcsv", name: "KeePassX (csv)" }, + { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, + { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, + { id: "roboformcsv", name: "RoboForm (csv)" }, + { id: "keepercsv", name: "Keeper (csv)" }, + // Temporarily remove this option for the Feb release + // { id: "keeperjson", name: "Keeper (json)" }, + { id: "enpasscsv", name: "Enpass (csv)" }, + { id: "enpassjson", name: "Enpass (json)" }, + { id: "safeincloudxml", name: "SafeInCloud (xml)" }, + { id: "pwsafexml", name: "Password Safe (xml)" }, + { id: "stickypasswordxml", name: "Sticky Password (xml)" }, + { id: "msecurecsv", name: "mSecure (csv)" }, + { id: "truekeycsv", name: "True Key (csv)" }, + { id: "passwordbossjson", name: "Password Boss (json)" }, + { id: "zohovaultcsv", name: "Zoho Vault (csv)" }, + { id: "splashidcsv", name: "SplashID (csv)" }, + { id: "passworddragonxml", name: "Password Dragon (xml)" }, + { id: "padlockcsv", name: "Padlock (csv)" }, + { id: "passboltcsv", name: "Passbolt (csv)" }, + { id: "clipperzhtml", name: "Clipperz (html)" }, + { id: "aviracsv", name: "Avira (csv)" }, + { id: "saferpasscsv", name: "SaferPass (csv)" }, + { id: "upmcsv", name: "Universal Password Manager (csv)" }, + { id: "ascendocsv", name: "Ascendo DataVault (csv)" }, + { id: "meldiumcsv", name: "Meldium (csv)" }, + { id: "passkeepcsv", name: "PassKeep (csv)" }, + { id: "operacsv", name: "Opera (csv)" }, + { id: "vivaldicsv", name: "Vivaldi (csv)" }, + { id: "gnomejson", name: "GNOME Passwords and Keys/Seahorse (json)" }, + { id: "blurcsv", name: "Blur (csv)" }, + { id: "passwordagentcsv", name: "Password Agent (csv)" }, + { id: "passpackcsv", name: "Passpack (csv)" }, + { id: "passmanjson", name: "Passman (json)" }, + { id: "avastcsv", name: "Avast Passwords (csv)" }, + { id: "avastjson", name: "Avast Passwords (json)" }, + { id: "fsecurefsk", name: "F-Secure KEY (fsk)" }, + { id: "kasperskytxt", name: "Kaspersky Password Manager (txt)" }, + { id: "remembearcsv", name: "RememBear (csv)" }, + { id: "passwordwallettxt", name: "PasswordWallet (txt)" }, + { id: "mykicsv", name: "Myki (csv)" }, + { id: "securesafecsv", name: "SecureSafe (csv)" }, + { id: "logmeoncecsv", name: "LogMeOnce (csv)" }, + { id: "blackberrycsv", name: "BlackBerry Password Keeper (csv)" }, + { id: "buttercupcsv", name: "Buttercup (csv)" }, + { id: "codebookcsv", name: "Codebook (csv)" }, + { id: "encryptrcsv", name: "Encryptr (csv)" }, + { id: "yoticsv", name: "Yoti (csv)" }, + { id: "nordpasscsv", name: "Nordpass (csv)" }, +] as const; + +export type ImportType = + | typeof featuredImportOptions[number]["id"] + | typeof regularImportOptions[number]["id"] + | "bitwardenpasswordprotected"; + +export class ImportService implements ImportServiceAbstraction { + featuredImportOptions = featuredImportOptions as readonly ImportOption[]; + + regularImportOptions = regularImportOptions as readonly ImportOption[]; constructor( private cipherService: CipherService, @@ -198,8 +208,12 @@ export class ImportService implements ImportServiceAbstraction { } } - getImporter(format: string, organizationId: string = null): Importer { - const importer = this.getImporterInstance(format); + getImporter( + format: ImportType, + organizationId: string = null, + password: string = null + ): Importer { + const importer = this.getImporterInstance(format, password); if (importer == null) { return null; } @@ -207,8 +221,8 @@ export class ImportService implements ImportServiceAbstraction { return importer; } - private getImporterInstance(format: string) { - if (format == null || format === "") { + private getImporterInstance(format: ImportType, password: string) { + if (format == null) { return null; } @@ -217,6 +231,13 @@ export class ImportService implements ImportServiceAbstraction { return new BitwardenCsvImporter(); case "bitwardenjson": return new BitwardenJsonImporter(this.cryptoService, this.i18nService); + case "bitwardenpasswordprotected": + return new BitwardenPasswordProtectedImporter( + this, + this.cryptoService, + this.i18nService, + password + ); case "lastpasscsv": case "passboltcsv": return new LastPassCsvImporter(); @@ -254,8 +275,8 @@ export class ImportService implements ImportServiceAbstraction { return new OnePasswordMacCsvImporter(); case "keepercsv": return new KeeperCsvImporter(); - case "keeperjson": - return new KeeperJsonImporter(); + // case "keeperjson": + // return new KeeperJsonImporter(); case "passworddragonxml": return new PasswordDragonXmlImporter(); case "enpasscsv": diff --git a/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts new file mode 100644 index 00000000..77e16bc3 --- /dev/null +++ b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts @@ -0,0 +1,203 @@ +import Substitute, { Arg, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { I18nService } from "jslib-common/abstractions/i18n.service"; +import { ImportService } from "jslib-common/abstractions/import.service"; + +import { KdfType } from "jslib-common/enums/kdfType"; + +import { BitwardenPasswordProtectedImporter } from "jslib-common/importers/bitwardenPasswordProtectedImporter"; +import { Importer } from "jslib-common/importers/importer"; + +import { Utils } from "jslib-common/misc/utils"; +import { ImportResult } from "jslib-common/models/domain/importResult"; + +describe("BitwardenPasswordProtectedImporter", () => { + let importer: BitwardenPasswordProtectedImporter; + let innerImporter: SubstituteOf; + let importService: SubstituteOf; + let cryptoService: SubstituteOf; + let i18nService: SubstituteOf; + const password = Utils.newGuid(); + const result = new ImportResult(); + let jDoc: { + encrypted?: boolean; + passwordProtected?: boolean; + format?: string; + salt?: string; + kdfIterations?: any; + kdfType?: any; + encKeyValidation_DO_NOT_EDIT?: string; + data?: string; + }; + + beforeEach(() => { + cryptoService = Substitute.for(); + i18nService = Substitute.for(); + importService = Substitute.for(); + innerImporter = Substitute.for(); + + jDoc = { + encrypted: true, + passwordProtected: true, + format: "csv", + salt: "c2FsdA==", + kdfIterations: 100000, + kdfType: KdfType.PBKDF2_SHA256, + encKeyValidation_DO_NOT_EDIT: Utils.newGuid(), + data: Utils.newGuid(), + }; + + result.success = true; + innerImporter.parse(Arg.any()).resolves(result); + importer = new BitwardenPasswordProtectedImporter( + importService, + cryptoService, + i18nService, + password + ); + }); + + describe("Required Json Data", () => { + it("succeeds with default jdoc", async () => { + cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); + + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); + }); + + it("accepts json format", async () => { + jDoc.format = "json"; + cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); + + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); + }); + + it("accepts encrypted_json format", async () => { + jDoc.format = "encrypted_json"; + cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); + + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); + }); + + it("fails if encrypted === false", async () => { + jDoc.encrypted = false; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if encrypted === null", async () => { + jDoc.encrypted = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if passwordProtected === false", async () => { + jDoc.passwordProtected = false; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if passwordProtected === null", async () => { + jDoc.passwordProtected = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if format === null", async () => { + jDoc.format = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if format not known", async () => { + jDoc.format = "Not a real format"; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if salt === null", async () => { + jDoc.salt = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if kdfIterations === null", async () => { + jDoc.kdfIterations = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if kdfIterations is not a number", async () => { + jDoc.kdfIterations = "not a number"; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if kdfType === null", async () => { + jDoc.kdfType = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if kdfType is not a string", async () => { + jDoc.kdfType = "not a valid kdf type"; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if kdfType is not a known kdfType", async () => { + jDoc.kdfType = -1; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if encKeyValidation_DO_NOT_EDIT === null", async () => { + jDoc.encKeyValidation_DO_NOT_EDIT = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("fails if data === null", async () => { + jDoc.data = null; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + }); + + describe("inner importer", () => { + beforeEach(() => { + cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); + }); + it("delegates success", async () => { + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); + result.success = false; + expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); + }); + + it("passes on organization Id", async () => { + jDoc.format = "csv"; + importer.organizationId = Utils.newGuid(); + await importer.parse(JSON.stringify(jDoc)); + + importService.received(1).getImporter("bitwardencsv", importer.organizationId); + }); + + it("passes null organizationId if none set", async () => { + jDoc.format = "csv"; + importer.organizationId = null; + await importer.parse(JSON.stringify(jDoc)); + + importService.received(1).getImporter("bitwardencsv", null); + }); + + it("gets csv importer for csv format", async () => { + jDoc.format = "csv"; + + await importer.parse(JSON.stringify(jDoc)); + + importService.received(1).getImporter("bitwardencsv", Arg.any()); + }); + + it("gets json importer for json format", async () => { + jDoc.format = "json"; + + await importer.parse(JSON.stringify(jDoc)); + + importService.received(1).getImporter("bitwardenjson", Arg.any()); + }); + + it("gets json importer for encrypted_json format", async () => { + jDoc.format = "encrypted_json"; + + await importer.parse(JSON.stringify(jDoc)); + + importService.received(1).getImporter("bitwardenjson", Arg.any()); + }); + }); +}); diff --git a/spec/common/services/export.service.spec.ts b/spec/common/services/export.service.spec.ts index 62402d78..cb093261 100644 --- a/spec/common/services/export.service.spec.ts +++ b/spec/common/services/export.service.spec.ts @@ -1,8 +1,9 @@ -import { Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; import { ApiService } from "jslib-common/abstractions/api.service"; import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { FolderService } from "jslib-common/abstractions/folder.service"; import { ExportService } from "jslib-common/services/export.service"; @@ -13,6 +14,9 @@ import { Login } from "jslib-common/models/domain/login"; import { CipherWithIds as CipherExport } from "jslib-common/models/export/cipherWithIds"; import { CipherType } from "jslib-common/enums/cipherType"; +import { KdfType } from "jslib-common/enums/kdfType"; + +import { Utils } from "jslib-common/misc/utils"; import { CipherView } from "jslib-common/models/view/cipherView"; import { LoginView } from "jslib-common/models/view/loginView"; @@ -85,12 +89,14 @@ function expectEqualCiphers(ciphers: CipherView[] | Cipher[], jsonResult: string describe("ExportService", () => { let exportService: ExportService; let apiService: SubstituteOf; + let cryptoFunctionService: SubstituteOf; let cipherService: SubstituteOf; let folderService: SubstituteOf; let cryptoService: SubstituteOf; beforeEach(() => { apiService = Substitute.for(); + cryptoFunctionService = Substitute.for(); cipherService = Substitute.for(); folderService = Substitute.for(); cryptoService = Substitute.for(); @@ -98,7 +104,13 @@ describe("ExportService", () => { folderService.getAllDecrypted().resolves([]); folderService.getAll().resolves([]); - exportService = new ExportService(folderService, cipherService, apiService, cryptoService); + exportService = new ExportService( + folderService, + cipherService, + apiService, + cryptoService, + cryptoFunctionService + ); }); it("exports unecrypted user ciphers", async () => { @@ -132,4 +144,68 @@ describe("ExportService", () => { expectEqualCiphers(UserCipherDomains.slice(0, 2), actual); }); + + describe("password protected export", () => { + let exportString: string; + let exportObject: any; + let mac: SubstituteOf; + let data: SubstituteOf; + const password = "password"; + const salt = "salt"; + + describe("export json object", () => { + beforeEach(async () => { + mac = Substitute.for(); + data = Substitute.for(); + + mac.encryptedString = "mac"; + data.encryptedString = "encData"; + + spyOn(Utils, "fromBufferToB64").and.returnValue(salt); + cipherService.getAllDecrypted().resolves(UserCipherViews.slice(0, 1)); + + exportString = await exportService.getPasswordProtectedExport(password); + exportObject = JSON.parse(exportString); + }); + + it("specifies it is encrypted", () => { + expect(exportObject.encrypted).toBe(true); + }); + + it("specifies it's password protected", () => { + expect(exportObject.passwordProtected).toBe(true); + }); + + it("specifies format", () => { + expect(exportObject).toEqual(jasmine.objectContaining({ format: jasmine.any(String) })); + }); + + it("specifies salt", () => { + expect(exportObject.salt).toEqual("salt"); + }); + + it("specifies kdfIterations", () => { + expect(exportObject.kdfIterations).toEqual(100000); + }); + + it("has kdfType", () => { + expect(exportObject.kdfType).toEqual(KdfType.PBKDF2_SHA256); + }); + + it("has a mac property", () => { + cryptoService.encrypt(Arg.any(), Arg.any()).resolves(mac); + expect(exportObject.encKeyValidation_DO_NOT_EDIT).toEqual(mac.encryptedString); + }); + + it("has data property", () => { + cryptoService.encrypt(Arg.any(), Arg.any()).resolves(data); + expect(exportObject.data).toEqual(data.encryptedString); + }); + + it("encrypts the data property", async () => { + const unencrypted = await exportService.getExport(); + expect(exportObject.data).not.toEqual(unencrypted); + }); + }); + }); }); diff --git a/spec/common/services/import.service.spec.ts b/spec/common/services/import.service.spec.ts new file mode 100644 index 00000000..602cbc20 --- /dev/null +++ b/spec/common/services/import.service.spec.ts @@ -0,0 +1,74 @@ +import Substitute, { Arg, SubstituteOf } from "@fluffy-spoon/substitute"; +import { ApiService } from "jslib-common/abstractions/api.service"; + +import { CipherService } from "jslib-common/abstractions/cipher.service"; +import { CollectionService } from "jslib-common/abstractions/collection.service"; +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { FolderService } from "jslib-common/abstractions/folder.service"; +import { I18nService } from "jslib-common/abstractions/i18n.service"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { BitwardenPasswordProtectedImporter } from "jslib-common/importers/bitwardenPasswordProtectedImporter"; + +import { Importer } from "jslib-common/importers/importer"; +import { Utils } from "jslib-common/misc/utils"; + +import { ImportService } from "jslib-common/services/import.service"; + +describe("ImportService", () => { + let importService: ImportService; + let cipherService: SubstituteOf; + let folderService: SubstituteOf; + let apiService: SubstituteOf; + let i18nService: SubstituteOf; + let collectionService: SubstituteOf; + let platformUtilsService: SubstituteOf; + let cryptoService: SubstituteOf; + + beforeEach(() => { + cipherService = Substitute.for(); + folderService = Substitute.for(); + apiService = Substitute.for(); + i18nService = Substitute.for(); + collectionService = Substitute.for(); + platformUtilsService = Substitute.for(); + cryptoService = Substitute.for(); + + importService = new ImportService( + cipherService, + folderService, + apiService, + i18nService, + collectionService, + platformUtilsService, + cryptoService + ); + }); + + describe("getImporterInstance", () => { + describe("Get bitPasswordProtected importer", () => { + let importer: Importer; + const organizationId = Utils.newGuid(); + const password = Utils.newGuid(); + + beforeEach(() => { + importer = importService.getImporter( + "bitwardenpasswordprotected", + organizationId, + password + ); + }); + + it("returns an instance of BitwardenPasswordProtectedImporter", () => { + expect(importer).toBeInstanceOf(BitwardenPasswordProtectedImporter); + }); + + it("has the appropriate organization Id", () => { + expect(importer.organizationId).toEqual(organizationId); + }); + + it("has the appropriate password", () => { + expect(Object.entries(importer)).toEqual(jasmine.arrayContaining([["password", password]])); + }); + }); + }); +}); From 0760b532965cd8ee5a89884b81fb90b82207df76 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 7 Feb 2022 11:08:07 -0500 Subject: [PATCH 065/120] [bug] Default the state version check function to 1 (#657) --- common/src/services/stateMigration.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 7844544f..490c35a1 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -461,6 +461,6 @@ export class StateMigrationService< } protected async getCurrentStateVersion(): Promise { - return (await this.getGlobals())?.stateVersion; + return (await this.getGlobals())?.stateVersion ?? StateVersion.One; } } From 6c08b408470709afb1f6f5bc9d0e0d06d02fa1f5 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 7 Feb 2022 11:36:53 -0500 Subject: [PATCH 066/120] [bug] Make activity a top level storage key (#656) * [bug] Make activity a top level storage key * [bug] use correct index for migration * [bug] use correct index for migration part 2 --- common/src/models/domain/account.ts | 1 - common/src/models/domain/state.ts | 1 + common/src/services/state.service.ts | 37 ++++++++++++------- common/src/services/stateMigration.service.ts | 9 ++++- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 51be98be..012ce09c 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -94,7 +94,6 @@ export class AccountProfile { everBeenUnlocked?: boolean; forcePasswordReset?: boolean; hasPremiumPersonally?: boolean; - lastActive?: number; lastSync?: string; userId?: string; usesKeyConnector?: boolean; diff --git a/common/src/models/domain/state.ts b/common/src/models/domain/state.ts index 00a5347a..f5a2c046 100644 --- a/common/src/models/domain/state.ts +++ b/common/src/models/domain/state.ts @@ -9,6 +9,7 @@ export class State< globals: TGlobalState; activeUserId: string; authenticatedAccounts: string[] = []; + accountActivity: { [userId: string]: number } = {}; constructor(globals: TGlobalState) { this.globals = globals; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index c718b29b..80f5a811 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -46,6 +46,7 @@ const keys = { authenticatedAccounts: "authenticatedAccounts", activeUserId: "activeUserId", tempAccountSettings: "tempAccountSettings", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication + accountActivity: "accountActivity", }; const partialKeys = { @@ -117,7 +118,7 @@ export class StateService< async addAccount(account: TAccount) { account = await this.setAccountEnvironmentUrls(account); this.state.authenticatedAccounts.push(account.profile.userId); - this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); + await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); this.state.accounts[account.profile.userId] = account; await this.scaffoldNewAccountStorage(account); await this.setActiveUser(account.profile.userId); @@ -1561,22 +1562,32 @@ export class StateService< } async getLastActive(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.profile?.lastActive; + options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); + + const accountActivity = await this.storageService.get<{ [userId: string]: number }>( + keys.accountActivity, + options + ); + + if (accountActivity == null || Object.keys(accountActivity).length < 1) { + return null; + } + + return accountActivity[options.userId]; } async setLastActive(value: number, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); - if (account != null) { - account.profile.lastActive = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + options = this.reconcileOptions(options, await this.defaultOnDiskOptions()); + if (options.userId == null) { + return; } + const accountActivity = + (await this.storageService.get<{ [userId: string]: number }>( + keys.accountActivity, + options + )) ?? {}; + accountActivity[options.userId] = value; + await this.storageService.save(keys.accountActivity, accountActivity, options); } async getLastSync(options?: StorageOptions): Promise { diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 490c35a1..7d5e2bc2 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -122,6 +122,7 @@ const keys = { authenticatedAccounts: "authenticatedAccounts", activeUserId: "activeUserId", tempAccountSettings: "tempAccountSettings", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication + accountActivity: "accountActivity", }; const partialKeys = { @@ -396,7 +397,6 @@ export class StateMigrationService< kdfIterations: await this.get(v1Keys.kdfIterations), kdfType: await this.get(v1Keys.kdf), keyHash: await this.get(v1Keys.keyHash), - lastActive: await this.get(v1Keys.lastActive), lastSync: null, userId: userId, usesKeyConnector: null, @@ -412,6 +412,13 @@ export class StateMigrationService< await this.set(keys.authenticatedAccounts, [userId]); await this.set(keys.activeUserId, userId); + + const accountActivity: { [userId: string]: number } = { + [userId]: await this.get(v1Keys.lastActive), + }; + accountActivity[userId] = await this.get(v1Keys.lastActive); + await this.set(keys.accountActivity, accountActivity); + await clearV1Keys(userId); if (await this.secureStorageService.has(v1Keys.key, { keySuffix: "biometric" })) { From 6b8508579f89b4c54afa6aab2b7155aac70fb8a9 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 8 Feb 2022 08:29:50 +1000 Subject: [PATCH 067/120] Make husky pre-commit hook executable (#655) --- .husky/pre-commit | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100644 new mode 100755 From 8130fce40459d6597239eb283e1c8dfc28edb16f Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 8 Feb 2022 11:18:10 +0100 Subject: [PATCH 068/120] Add headers for client type and client version (#651) --- common/src/abstractions/platformUtils.service.ts | 3 ++- common/src/enums/clientType.ts | 8 ++++++++ .../request/identityToken/passwordTokenRequest.ts | 3 ++- common/src/services/api.service.ts | 10 ++++++++-- .../src/services/electronPlatformUtils.service.ts | 10 +++++++--- node/src/cli/services/cliPlatformUtils.service.ts | 11 ++++++++--- 6 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 common/src/enums/clientType.ts diff --git a/common/src/abstractions/platformUtils.service.ts b/common/src/abstractions/platformUtils.service.ts index f5a6203d..dded8171 100644 --- a/common/src/abstractions/platformUtils.service.ts +++ b/common/src/abstractions/platformUtils.service.ts @@ -1,3 +1,4 @@ +import { ClientType } from "../enums/clientType"; import { DeviceType } from "../enums/deviceType"; import { ThemeType } from "../enums/themeType"; @@ -6,9 +7,9 @@ interface ToastOptions { } export abstract class PlatformUtilsService { - identityClientId: string; getDevice: () => DeviceType; getDeviceString: () => string; + getClientType: () => ClientType; isFirefox: () => boolean; isChrome: () => boolean; isEdge: () => boolean; diff --git a/common/src/enums/clientType.ts b/common/src/enums/clientType.ts new file mode 100644 index 00000000..246769eb --- /dev/null +++ b/common/src/enums/clientType.ts @@ -0,0 +1,8 @@ +export enum ClientType { + Web = "web", + Browser = "browser", + Desktop = "desktop", + Mobile = "mobile", + Cli = "cli", + DirectoryConnector = "connector", +} diff --git a/common/src/models/request/identityToken/passwordTokenRequest.ts b/common/src/models/request/identityToken/passwordTokenRequest.ts index a1d8466b..59f28ecd 100644 --- a/common/src/models/request/identityToken/passwordTokenRequest.ts +++ b/common/src/models/request/identityToken/passwordTokenRequest.ts @@ -3,6 +3,7 @@ import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; import { CaptchaProtectedRequest } from "../captchaProtectedRequest"; import { DeviceRequest } from "../deviceRequest"; +import { ClientType } from "../../../enums/clientType"; import { Utils } from "../../../misc/utils"; export class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest { @@ -16,7 +17,7 @@ export class PasswordTokenRequest extends TokenRequest implements CaptchaProtect super(twoFactor, device); } - toIdentityToken(clientId: string) { + toIdentityToken(clientId: ClientType) { const obj = super.toIdentityToken(clientId); obj.grant_type = "password"; diff --git a/common/src/services/api.service.ts b/common/src/services/api.service.ts index 4eda12e1..5c51e449 100644 --- a/common/src/services/api.service.ts +++ b/common/src/services/api.service.ts @@ -1,3 +1,4 @@ +import { ClientType } from "../enums/clientType"; import { DeviceType } from "../enums/deviceType"; import { PolicyType } from "../enums/policyType"; @@ -225,7 +226,7 @@ export class ApiService implements ApiServiceAbstraction { const identityToken = request instanceof ApiTokenRequest ? request.toIdentityToken() - : request.toIdentityToken(this.platformUtilsService.identityClientId); + : request.toIdentityToken(this.platformUtilsService.getClientType()); const response = await this.fetch( new Request(this.environmentService.getIdentityUrl() + "/connect/token", { @@ -2205,11 +2206,16 @@ export class ApiService implements ApiServiceAbstraction { return accessToken; } - fetch(request: Request): Promise { + async fetch(request: Request): Promise { if (request.method === "GET") { request.headers.set("Cache-Control", "no-store"); request.headers.set("Pragma", "no-cache"); } + request.headers.set("Bitwarden-Client-Name", this.platformUtilsService.getClientType()); + request.headers.set( + "Bitwarden-Client-Version", + await this.platformUtilsService.getApplicationVersion() + ); return this.nativeFetch(request); } diff --git a/electron/src/services/electronPlatformUtils.service.ts b/electron/src/services/electronPlatformUtils.service.ts index 7ec81327..8e4632b6 100644 --- a/electron/src/services/electronPlatformUtils.service.ts +++ b/electron/src/services/electronPlatformUtils.service.ts @@ -2,6 +2,7 @@ import { clipboard, ipcRenderer, shell } from "electron"; import { isDev, isMacAppStore } from "../utils"; +import { ClientType } from "jslib-common/enums/clientType"; import { DeviceType } from "jslib-common/enums/deviceType"; import { ThemeType } from "jslib-common/enums/themeType"; @@ -11,8 +12,7 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { StateService } from "jslib-common/abstractions/state.service"; export class ElectronPlatformUtilsService implements PlatformUtilsService { - identityClientId: string; - + private clientType: ClientType; private deviceCache: DeviceType = null; constructor( @@ -21,7 +21,7 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService { private isDesktopApp: boolean, private stateService: StateService ) { - this.identityClientId = isDesktopApp ? "desktop" : "connector"; + this.clientType = isDesktopApp ? ClientType.Desktop : ClientType.DirectoryConnector; } getDevice(): DeviceType { @@ -48,6 +48,10 @@ export class ElectronPlatformUtilsService implements PlatformUtilsService { return device.replace("desktop", ""); } + getClientType() { + return this.clientType; + } + isFirefox(): boolean { return false; } diff --git a/node/src/cli/services/cliPlatformUtils.service.ts b/node/src/cli/services/cliPlatformUtils.service.ts index 7975d064..43350308 100644 --- a/node/src/cli/services/cliPlatformUtils.service.ts +++ b/node/src/cli/services/cliPlatformUtils.service.ts @@ -1,5 +1,6 @@ import * as child_process from "child_process"; +import { ClientType } from "jslib-common/enums/clientType"; import { DeviceType } from "jslib-common/enums/deviceType"; import { ThemeType } from "jslib-common/enums/themeType"; @@ -9,12 +10,12 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se const open = require("open"); export class CliPlatformUtilsService implements PlatformUtilsService { - identityClientId: string; + clientType: ClientType; private deviceCache: DeviceType = null; - constructor(identityClientId: string, private packageJson: any) { - this.identityClientId = identityClientId; + constructor(clientType: ClientType, private packageJson: any) { + this.clientType = clientType; } getDevice(): DeviceType { @@ -41,6 +42,10 @@ export class CliPlatformUtilsService implements PlatformUtilsService { return device.replace("desktop", ""); } + getClientType() { + return this.clientType; + } + isFirefox() { return false; } From 8cb029947bff7dda54a45483403c3f505fa3e6bc Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Tue, 8 Feb 2022 17:35:29 -0600 Subject: [PATCH 069/120] [Help] Update links to new pattern (#658) * [Help] Updated urls to current pattern * Rotate key update --- angular/src/components/attachments.component.ts | 2 +- angular/src/components/two-factor-options.component.ts | 2 +- node/src/cli/commands/login.command.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/angular/src/components/attachments.component.ts b/angular/src/components/attachments.component.ts index bff508e2..6506cffc 100644 --- a/angular/src/components/attachments.component.ts +++ b/angular/src/components/attachments.component.ts @@ -209,7 +209,7 @@ export class AttachmentsComponent implements OnInit { ); if (confirmed) { this.platformUtilsService.launchUri( - "https://help.bitwarden.com/article/update-encryption-key/" + "https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key" ); } } diff --git a/angular/src/components/two-factor-options.component.ts b/angular/src/components/two-factor-options.component.ts index ddf3d2f3..48dd7df6 100644 --- a/angular/src/components/two-factor-options.component.ts +++ b/angular/src/components/two-factor-options.component.ts @@ -32,7 +32,7 @@ export class TwoFactorOptionsComponent implements OnInit { } recover() { - this.platformUtilsService.launchUri("https://help.bitwarden.com/article/lost-two-step-device/"); + this.platformUtilsService.launchUri("https://bitwarden.com/help/lost-two-step-device/"); this.onRecoverSelected.emit(); } } diff --git a/node/src/cli/commands/login.command.ts b/node/src/cli/commands/login.command.ts index 77eab11e..61c30777 100644 --- a/node/src/cli/commands/login.command.ts +++ b/node/src/cli/commands/login.command.ts @@ -188,7 +188,7 @@ export class LoginCommand { const badCaptcha = Response.badRequest( "Your authentication request appears to be coming from a bot\n" + "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + - "(https://bitwarden.com/help/article/cli-auth-challenges)" + "(https://bitwarden.com/help/cli-auth-challenges)" ); try { From c282ef8575eecf696d9153435ed3ca4b7dc949d5 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Wed, 9 Feb 2022 12:15:20 -0500 Subject: [PATCH 070/120] [bug] Fix logout timeout action for inactive accounts (#660) * [bug] Fix logout timeout action for inactive accounts * Pass userId in to the logout callback parameter to the vaultTimeoutService. The message handle in desktop already expects this. * Set lastActive on account login, and null it on account deauthentication. This prevents an issue where newly logged in accounts immediatly time out due to inactivity. * Add userId to locked callbacks * Add userId to log out callback --- angular/src/services/jslib-services.module.ts | 3 ++- common/src/services/state.service.ts | 2 ++ common/src/services/vaultTimeout.service.ts | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 2e2245a2..6770ce14 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -313,7 +313,8 @@ import { StateFactory } from "jslib-common/factories/stateFactory"; keyConnectorService, stateService, null, - async () => messagingService.send("logout", { expired: false }) + async (userId?: string) => + messagingService.send("logout", { expired: false, userId: userId }) ), deps: [ CipherServiceAbstraction, diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 80f5a811..5c5be3b2 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -121,6 +121,7 @@ export class StateService< await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts); this.state.accounts[account.profile.userId] = account; await this.scaffoldNewAccountStorage(account); + await this.setLastActive(new Date().getTime(), { userId: account.profile.userId }); await this.setActiveUser(account.profile.userId); this.activeAccount.next(account.profile.userId); } @@ -2437,6 +2438,7 @@ export class StateService< protected async deAuthenticateAccount(userId: string) { await this.setAccessToken(null, { userId: userId }); + await this.setLastActive(null, { userId: userId }); const index = this.state.authenticatedAccounts.indexOf(userId); if (index > -1) { this.state.authenticatedAccounts.splice(index, 1); diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index 544e6bc2..e0fa8115 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -29,7 +29,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { private policyService: PolicyService, private keyConnectorService: KeyConnectorService, private stateService: StateService, - private lockedCallback: () => Promise = null, + private lockedCallback: (userId?: string) => Promise = null, private loggedOutCallback: (userId?: string) => Promise = null ) {} @@ -87,7 +87,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1]; if (!pinLock && !(await this.isBiometricLockSet())) { - await this.logOut(); + await this.logOut(userId); } } @@ -110,7 +110,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { this.messagingService.send("locked", { userId: userId }); if (this.lockedCallback != null) { - await this.lockedCallback(); + await this.lockedCallback(userId); } } @@ -198,6 +198,6 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { private async executeTimeoutAction(userId: string): Promise { const timeoutAction = await this.stateService.getVaultTimeoutAction({ userId: userId }); - timeoutAction === "logOut" ? await this.logOut() : await this.lock(true, userId); + timeoutAction === "logOut" ? await this.logOut(userId) : await this.lock(true, userId); } } From b7bb16c18a4bcd47988397bcf089fe6d895256b9 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Wed, 9 Feb 2022 17:01:43 -0500 Subject: [PATCH 071/120] [bug] Toggle tokens appropriatly based on timeout action (#661) --- common/src/abstractions/token.service.ts | 1 - common/src/services/state.service.ts | 108 ++++++++++++-------- common/src/services/token.service.ts | 34 ------ common/src/services/vaultTimeout.service.ts | 21 +++- 4 files changed, 84 insertions(+), 80 deletions(-) diff --git a/common/src/abstractions/token.service.ts b/common/src/abstractions/token.service.ts index 89aec536..f0470494 100644 --- a/common/src/abstractions/token.service.ts +++ b/common/src/abstractions/token.service.ts @@ -14,7 +14,6 @@ export abstract class TokenService { getClientId: () => Promise; setClientSecret: (clientSecret: string) => Promise; getClientSecret: () => Promise; - toggleTokens: () => Promise; setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise; getTwoFactorToken: () => Promise; clearTwoFactorToken: () => Promise; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 5c5be3b2..6dc69cf0 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -147,20 +147,23 @@ export class StateService< } async getAccessToken(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.tokens?.accessToken; + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + return (await this.getAccount(options))?.tokens?.accessToken; } async setAccessToken(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + const account = await this.getAccount(options); account.tokens.accessToken = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, options); } async getAddEditCipherInfo(options?: StorageOptions): Promise { @@ -195,37 +198,43 @@ export class StateService< } async getApiKeyClientId(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.profile?.apiKeyClientId; + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + return (await this.getAccount(options))?.profile?.apiKeyClientId; } async setApiKeyClientId(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + const account = await this.getAccount(options); account.profile.apiKeyClientId = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, options); } async getApiKeyClientSecret(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.keys?.apiKeyClientSecret; + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + return (await this.getAccount(options))?.keys?.apiKeyClientSecret; } async setApiKeyClientSecret(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + const account = await this.getAccount(options); account.keys.apiKeyClientSecret = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, options); } async getAutoConfirmFingerPrints(options?: StorageOptions): Promise { @@ -1866,20 +1875,23 @@ export class StateService< } async getRefreshToken(options?: StorageOptions): Promise { - return ( - await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) - )?.tokens?.refreshToken; + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + return (await this.getAccount(options))?.tokens?.refreshToken; } async setRefreshToken(value: string, options?: StorageOptions): Promise { - const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + const defaultOptions = + (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + options = this.reconcileOptions(options, defaultOptions); + const account = await this.getAccount(options); account.tokens.refreshToken = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, options); } async getRememberedEmail(options?: StorageOptions): Promise { @@ -2225,9 +2237,11 @@ export class StateService< } protected async scaffoldNewAccountStorage(account: TAccount): Promise { - await this.scaffoldNewAccountLocalStorage(account); - await this.scaffoldNewAccountSessionStorage(account); - await this.scaffoldNewAccountMemoryStorage(account); + // We don't want to manipulate the referenced in memory account + const deepClone = JSON.parse(JSON.stringify(account)); + await this.scaffoldNewAccountLocalStorage(deepClone); + await this.scaffoldNewAccountSessionStorage(deepClone); + await this.scaffoldNewAccountMemoryStorage(deepClone); } // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService. @@ -2246,6 +2260,12 @@ export class StateService< await this.storageService.remove(keys.tempAccountSettings); } account.settings.environmentUrls = environmentUrls; + if (account.settings.vaultTimeoutAction === "logOut") { + account.tokens.accessToken = null; + account.tokens.refreshToken = null; + account.profile.apiKeyClientId = null; + account.keys.apiKeyClientSecret = null; + } await this.storageService.save( account.profile.userId, account, @@ -2422,7 +2442,7 @@ export class StateService< protected clearDecryptedDataForActiveUser() { const userId = this.state.activeUserId; - if (userId == null) { + if (userId == null || this.state?.accounts[userId]?.data == null) { return; } this.state.accounts[userId].data = new AccountData(); diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index 052d67ae..f1e328b0 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -22,9 +22,6 @@ export class TokenService implements TokenServiceAbstraction { } async setClientId(clientId: string): Promise { - if ((await this.skipTokenStorage()) || clientId == null) { - return; - } return await this.stateService.setApiKeyClientId(clientId); } @@ -33,9 +30,6 @@ export class TokenService implements TokenServiceAbstraction { } async setClientSecret(clientSecret: string): Promise { - if ((await this.skipTokenStorage()) || clientSecret == null) { - return; - } return await this.stateService.setApiKeyClientSecret(clientSecret); } @@ -52,9 +46,6 @@ export class TokenService implements TokenServiceAbstraction { } async setRefreshToken(refreshToken: string): Promise { - if (await this.skipTokenStorage()) { - return; - } return await this.stateService.setRefreshToken(refreshToken); } @@ -62,25 +53,6 @@ export class TokenService implements TokenServiceAbstraction { return await this.stateService.getRefreshToken(); } - async toggleTokens(): Promise { - const token = await this.getToken(); - const refreshToken = await this.getRefreshToken(); - const clientId = await this.getClientId(); - const clientSecret = await this.getClientSecret(); - const timeout = await this.stateService.getVaultTimeout(); - const action = await this.stateService.getVaultTimeoutAction(); - - if ((timeout != null || timeout === 0) && action === "logOut") { - // if we have a vault timeout and the action is log out, reset tokens - await this.clearToken(); - } - - await this.setToken(token); - await this.setRefreshToken(refreshToken); - await this.setClientId(clientId); - await this.setClientSecret(clientSecret); - } - async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise { return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken); } @@ -214,10 +186,4 @@ export class TokenService implements TokenServiceAbstraction { return Array.isArray(decoded.amr) && decoded.amr.includes("external"); } - - private async skipTokenStorage(): Promise { - const timeout = await this.stateService.getVaultTimeout(); - const action = await this.stateService.getVaultTimeoutAction(); - return timeout != null && action === "logOut"; - } } diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index e0fa8115..682d1d7a 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -122,9 +122,28 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { async setVaultTimeoutOptions(timeout: number, action: string): Promise { await this.stateService.setVaultTimeout(timeout); + + // We swap these tokens from being on disk for lock actions, and in memory for logout actions + // Get them here to set them to their new location after changing the timeout action and clearing if needed + const token = await this.tokenService.getToken(); + const refreshToken = await this.tokenService.getRefreshToken(); + const clientId = await this.tokenService.getClientId(); + const clientSecret = await this.tokenService.getClientSecret(); + + const currentAction = await this.stateService.getVaultTimeoutAction(); + if ((timeout != null || timeout === 0) && action === "logOut" && action !== currentAction) { + // if we have a vault timeout and the action is log out, reset tokens + await this.tokenService.clearToken(); + } + await this.stateService.setVaultTimeoutAction(action); + + await this.tokenService.setToken(token); + await this.tokenService.setRefreshToken(refreshToken); + await this.tokenService.setClientId(clientId); + await this.tokenService.setClientSecret(clientSecret); + await this.cryptoService.toggleKey(); - await this.tokenService.toggleTokens(); } async isPinLockSet(): Promise<[boolean, boolean]> { From 47399bb583b92738215776089d0b8ebb4190ec72 Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Thu, 10 Feb 2022 13:55:36 -0500 Subject: [PATCH 072/120] Move providers to profile and save to disk (#662) * Move providers to profile and save to disk * Move providers back to AccountData --- common/src/services/state.service.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 6dc69cf0..a11c1a5c 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1846,8 +1846,9 @@ export class StateService< } async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.providers; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())) + )?.data?.providers; } async setProviders( @@ -1855,10 +1856,13 @@ export class StateService< options?: StorageOptions ): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskOptions()) ); account.data.providers = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskOptions()) + ); } async getPublicKey(options?: StorageOptions): Promise { From 99f70bea8d103acc83de8538285666c797634bce Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Thu, 10 Feb 2022 18:03:55 -0500 Subject: [PATCH 073/120] Individually await saving of orgs and providers (#663) --- common/src/services/sync.service.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/common/src/services/sync.service.ts b/common/src/services/sync.service.ts index d32db18e..17895326 100644 --- a/common/src/services/sync.service.ts +++ b/common/src/services/sync.service.ts @@ -328,10 +328,8 @@ export class SyncService implements SyncServiceAbstraction { } }); - await Promise.all([ - this.organizationService.save(organizations), - this.providerService.save(providers), - ]); + await this.organizationService.save(organizations); + await this.providerService.save(providers); if (await this.keyConnectorService.userNeedsMigration()) { await this.keyConnectorService.setConvertAccountRequired(true); From 52f77c0277e07a627f07ecfdeb0e2a7ef2066913 Mon Sep 17 00:00:00 2001 From: Justin Baur Date: Thu, 10 Feb 2022 21:22:18 -0500 Subject: [PATCH 074/120] Fix new device login (#664) * Store appId in localStorage * Save to local as well --- common/src/services/appId.service.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/src/services/appId.service.ts b/common/src/services/appId.service.ts index 8ffd20f9..f1841a4c 100644 --- a/common/src/services/appId.service.ts +++ b/common/src/services/appId.service.ts @@ -2,6 +2,7 @@ import { Utils } from "../misc/utils"; import { AppIdService as AppIdServiceAbstraction } from "../abstractions/appId.service"; import { StorageService } from "../abstractions/storage.service"; +import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; export class AppIdService implements AppIdServiceAbstraction { constructor(private storageService: StorageService) {} @@ -15,13 +16,17 @@ export class AppIdService implements AppIdServiceAbstraction { } private async makeAndGetAppId(key: string) { - const existingId = await this.storageService.get(key); + const existingId = await this.storageService.get(key, { + htmlStorageLocation: HtmlStorageLocation.Local, + }); if (existingId != null) { return existingId; } const guid = Utils.newGuid(); - await this.storageService.save(key, guid); + await this.storageService.save(key, guid, { + htmlStorageLocation: HtmlStorageLocation.Local, + }); return guid; } } From 5fad7c666f0fa301a180ec1a72794b1fd6088a5e Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Fri, 11 Feb 2022 13:40:13 +1000 Subject: [PATCH 075/120] Add StateVersion.Three to fix premium migration (#666) * Add StateVersion.Three to fix premium migration --- common/src/enums/stateVersion.ts | 3 +- common/src/services/stateMigration.service.ts | 26 +++++++++++++++ common/src/services/token.service.ts | 32 ++++++++++++------- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/common/src/enums/stateVersion.ts b/common/src/enums/stateVersion.ts index aa45edbb..f966c323 100644 --- a/common/src/enums/stateVersion.ts +++ b/common/src/enums/stateVersion.ts @@ -1,5 +1,6 @@ export enum StateVersion { One = 1, // Original flat key/value pair store Two = 2, // Move to a typed State object - Latest = Two, + Three = 3, // Fix migration of users' premium status + Latest = Three, } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 7d5e2bc2..cc40583c 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -24,6 +24,8 @@ import { GlobalStateFactory } from "../factories/globalStateFactory"; import { StateFactory } from "../factories/stateFactory"; import { Account, AccountSettings } from "../models/domain/account"; +import { TokenService } from "./token.service"; + // Originally (before January 2022) storage was handled as a flat key/value pair store. // With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration. const v1Keys: { [key: string]: string } = { @@ -153,6 +155,9 @@ export class StateMigrationService< case StateVersion.One: await this.migrateStateFrom1To2(); break; + case StateVersion.Two: + await this.migrateStateFrom2To3(); + break; } currentStateVersion += 1; @@ -448,6 +453,27 @@ export class StateMigrationService< } } + protected async migrateStateFrom2To3(): Promise { + const authenticatedUserIds = await this.get(keys.authenticatedAccounts); + await Promise.all( + authenticatedUserIds.map(async (userId) => { + const account = await this.get(userId); + if ( + account?.profile?.hasPremiumPersonally === null && + account.tokens?.accessToken != null + ) { + const decodedToken = await TokenService.decodeToken(account.tokens.accessToken); + account.profile.hasPremiumPersonally = decodedToken.premium; + await this.set(userId, account); + } + }) + ); + + const globals = await this.getGlobals(); + globals.stateVersion = StateVersion.Three; + await this.set(keys.global, globals); + } + protected get options(): StorageOptions { return { htmlStorageLocation: HtmlStorageLocation.Local }; } diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index f1e328b0..ad39aed5 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -6,6 +6,25 @@ import { Utils } from "../misc/utils"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; export class TokenService implements TokenServiceAbstraction { + static decodeToken(token: string): Promise { + if (token == null) { + throw new Error("Token not provided."); + } + + const parts = token.split("."); + if (parts.length !== 3) { + throw new Error("JWT must have 3 parts"); + } + + const decoded = Utils.fromUrlB64ToUtf8(parts[1]); + if (decoded == null) { + throw new Error("Cannot decode the token"); + } + + const decodedToken = JSON.parse(decoded); + return decodedToken; + } + constructor(private stateService: StateService) {} async setTokens( @@ -87,18 +106,7 @@ export class TokenService implements TokenServiceAbstraction { throw new Error("Token not found."); } - const parts = token.split("."); - if (parts.length !== 3) { - throw new Error("JWT must have 3 parts"); - } - - const decoded = Utils.fromUrlB64ToUtf8(parts[1]); - if (decoded == null) { - throw new Error("Cannot decode the token"); - } - - const decodedToken = JSON.parse(decoded); - return decodedToken; + return TokenService.decodeToken(token); } async getTokenExpirationDate(): Promise { From b7d9a532cb4e45d3b746bced68e9de0229e28420 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 10 Feb 2022 23:46:42 -0500 Subject: [PATCH 076/120] [bug] Store everBeenUnlocked in memory (#667) --- common/src/services/state.service.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index a11c1a5c..376f0063 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1468,20 +1468,17 @@ export class StateService< async getEverBeenUnlocked(options?: StorageOptions): Promise { return ( - (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.profile?.everBeenUnlocked ?? false + (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile + ?.everBeenUnlocked ?? false ); } async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, await this.defaultOnDiskOptions()) + this.reconcileOptions(options, this.defaultInMemoryOptions) ); account.profile.everBeenUnlocked = value; - await this.saveAccount( - account, - this.reconcileOptions(options, await this.defaultOnDiskOptions()) - ); + await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); } async getForcePasswordReset(options?: StorageOptions): Promise { From cda649fa21ef7f77d63b7582aab4e8dcca448c6b Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 11 Feb 2022 00:20:50 -0500 Subject: [PATCH 077/120] Cache state service account blob from disk reads (#668) * store account state in mem cache * use const --- common/src/services/state.service.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 376f0063..3bb26db8 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -69,13 +69,17 @@ export class StateService< private hasBeenInited: boolean = false; + private accountDiskCache: Map; + constructor( protected storageService: StorageService, protected secureStorageService: StorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, protected stateFactory: StateFactory - ) {} + ) { + this.accountDiskCache = new Map(); + } async init(): Promise { if (this.hasBeenInited) { @@ -2191,6 +2195,11 @@ export class StateService< return null; } + const cachedAccount = this.accountDiskCache.get(options.userId); + if (cachedAccount != null) { + return cachedAccount; + } + const account = options?.useSecureStorage ? (await this.secureStorageService.get(options.userId, options)) ?? (await this.storageService.get( @@ -2199,6 +2208,7 @@ export class StateService< )) : await this.storageService.get(options.userId, options); + this.accountDiskCache.set(options.userId, account); return account; } @@ -2228,6 +2238,7 @@ export class StateService< : this.storageService; await storageLocation.save(`${options.userId}`, account, options); + this.accountDiskCache.delete(options.userId); } protected async saveAccountToMemory(account: TAccount): Promise { From b0f735814f7902b4ef6ccf31463d374d2753ec8c Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Fri, 11 Feb 2022 03:31:40 -0600 Subject: [PATCH 078/120] Load component on init, then watch (#669) --- angular/src/components/lock.component.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/angular/src/components/lock.component.ts b/angular/src/components/lock.component.ts index 04672dcd..2f4e639a 100644 --- a/angular/src/components/lock.component.ts +++ b/angular/src/components/lock.component.ts @@ -59,6 +59,8 @@ export class LockComponent implements OnInit { ) {} async ngOnInit() { + // Load the first and observe updates + await this.load(); this.stateService.activeAccount.subscribe(async (_userId) => { await this.load(); }); From fd0410ca4be9733c2ab1a3e38da41aab8d8222f3 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Fri, 11 Feb 2022 13:17:51 +0100 Subject: [PATCH 079/120] Resolve hasKeyStored returning true when no biometric key is stored (#671) * Resolve hasKeyStored returning true when no biometric key is stored * Change to use a switch statement which avoids having to fetch the key. * Use triple equals * Run prettier --- common/src/services/crypto.service.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/common/src/services/crypto.service.ts b/common/src/services/crypto.service.ts index fd9d83c4..5a97ac76 100644 --- a/common/src/services/crypto.service.ts +++ b/common/src/services/crypto.service.ts @@ -347,12 +347,14 @@ export class CryptoService implements CryptoServiceAbstraction { } async hasKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise { - const key = - keySuffix === KeySuffixOptions.Auto - ? await this.stateService.getCryptoMasterKeyAuto({ userId: userId }) - : await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId }); - - return key != null; + switch (keySuffix) { + case KeySuffixOptions.Auto: + return (await this.stateService.getCryptoMasterKeyAuto({ userId: userId })) != null; + case KeySuffixOptions.Biometric: + return (await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId })) === true; + default: + return false; + } } async hasEncKey(): Promise { From eaf387435f65158225ee7b6171a92f9af32b4f3e Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Fri, 11 Feb 2022 14:06:40 +0100 Subject: [PATCH 080/120] Clean up the cached account (#672) * Clean up the cached account * PR feedback: Avoid duplicate code --- common/src/services/state.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 3bb26db8..023e7c9b 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2425,13 +2425,14 @@ export class StateService< protected removeAccountFromMemory(userId: string = this.state.activeUserId): void { delete this.state.accounts[userId]; + this.accountDiskCache.delete(userId); } protected async pruneInMemoryAccounts() { // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state for (const userId in this.state.accounts) { if (!(await this.getIsAuthenticated({ userId: userId }))) { - delete this.state.accounts[userId]; + this.removeAccountFromMemory(userId); } } } From e3b29a40d3ffb7624f2492a1f7d9943e73184ba7 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 11 Feb 2022 09:38:00 -0500 Subject: [PATCH 081/120] [bug] Also check for a never lock timeout when determining where to pull tokens (#673) --- common/src/services/state.service.ts | 60 +++++++++------------------- 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 023e7c9b..ac1d8d8d 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -151,20 +151,12 @@ export class StateService< } async getAccessToken(options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); return (await this.getAccount(options))?.tokens?.accessToken; } async setAccessToken(value: string, options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); const account = await this.getAccount(options); account.tokens.accessToken = value; await this.saveAccount(account, options); @@ -202,40 +194,24 @@ export class StateService< } async getApiKeyClientId(options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); return (await this.getAccount(options))?.profile?.apiKeyClientId; } async setApiKeyClientId(value: string, options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); const account = await this.getAccount(options); account.profile.apiKeyClientId = value; await this.saveAccount(account, options); } async getApiKeyClientSecret(options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); return (await this.getAccount(options))?.keys?.apiKeyClientSecret; } async setApiKeyClientSecret(value: string, options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); const account = await this.getAccount(options); account.keys.apiKeyClientSecret = value; await this.saveAccount(account, options); @@ -1880,20 +1856,12 @@ export class StateService< } async getRefreshToken(options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); return (await this.getAccount(options))?.tokens?.refreshToken; } async setRefreshToken(value: string, options?: StorageOptions): Promise { - const defaultOptions = - (await this.getVaultTimeoutAction({ userId: options?.userId })) === "logOut" - ? this.defaultInMemoryOptions - : await this.defaultOnDiskOptions(); - options = this.reconcileOptions(options, defaultOptions); + options = await this.getTimeoutBasedStorageOptions(options); const account = await this.getAccount(options); account.tokens.refreshToken = value; await this.saveAccount(account, options); @@ -2272,7 +2240,7 @@ export class StateService< await this.storageService.remove(keys.tempAccountSettings); } account.settings.environmentUrls = environmentUrls; - if (account.settings.vaultTimeoutAction === "logOut") { + if (account.settings.vaultTimeoutAction === "logOut" && account.settings.vaultTimeout != null) { account.tokens.accessToken = null; account.tokens.refreshToken = null; account.profile.apiKeyClientId = null; @@ -2497,4 +2465,14 @@ export class StateService< await this.setActiveUser(null); } } + + private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise { + const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId }); + const timeout = await this.getVaultTimeout({ userId: options?.userId }); + const defaultOptions = + timeoutAction === "logOut" && timeout != null + ? this.defaultInMemoryOptions + : await this.defaultOnDiskOptions(); + return this.reconcileOptions(options, defaultOptions); + } } From cdc6cbaeb3ecdd3c3de27f3551fb21d03af96549 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 11 Feb 2022 11:12:18 -0500 Subject: [PATCH 082/120] Run addAccount storage scaffolding calls through saveAccount (#675) --- common/src/services/state.service.ts | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index ac1d8d8d..d149d577 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2246,11 +2246,7 @@ export class StateService< account.profile.apiKeyClientId = null; account.keys.apiKeyClientSecret = null; } - await this.storageService.save( - account.profile.userId, - account, - await this.defaultOnDiskLocalOptions() - ); + await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); } protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise { @@ -2262,11 +2258,7 @@ export class StateService< storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - await this.storageService.save( - account.profile.userId, - account, - await this.defaultOnDiskMemoryOptions() - ); + await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); } protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise { @@ -2278,11 +2270,7 @@ export class StateService< storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - await this.storageService.save( - account.profile.userId, - account, - await this.defaultOnDiskOptions() - ); + await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); } // From 3a1b5bf9a0fcea7f8fd46d480eb0468cc0ee77c9 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 11 Feb 2022 12:45:48 -0500 Subject: [PATCH 083/120] Use getAccount when scaffolding + pass in the correct userId (#676) --- common/src/services/state.service.ts | 52 +++++++++++++++++++++------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index d149d577..23c77a84 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2227,9 +2227,11 @@ export class StateService< // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService. // For now these methods exist with some redundancy to facilitate this special web requirement. protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise { - const storedAccount = await this.storageService.get( - account.profile.userId, - await this.defaultOnDiskLocalOptions() + const storedAccount = await this.getAccount( + this.reconcileOptions( + { userId: account.profile.userId }, + await this.defaultOnDiskLocalOptions() + ) ); // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session const environmentUrls = account.settings.environmentUrls; @@ -2246,31 +2248,57 @@ export class StateService< account.profile.apiKeyClientId = null; account.keys.apiKeyClientSecret = null; } - await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); + await this.saveAccount( + account, + this.reconcileOptions( + { userId: account.profile.userId }, + await this.defaultOnDiskLocalOptions() + ) + ); } protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise { - const storedAccount = await this.storageService.get( - account.profile.userId, - await this.defaultOnDiskMemoryOptions() + const storedAccount = await this.getAccount( + this.reconcileOptions( + { userId: account.profile.userId }, + await this.defaultOnDiskMemoryOptions() + ) ); if (storedAccount?.settings != null) { storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); + await this.storageService.save( + account.profile.userId, + account, + await this.defaultOnDiskMemoryOptions() + ); + await this.saveAccount( + account, + this.reconcileOptions( + { userId: account.profile.userId }, + await this.defaultOnDiskMemoryOptions() + ) + ); } protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise { - const storedAccount = await this.storageService.get( - account.profile.userId, - await this.defaultOnDiskOptions() + const storedAccount = await this.getAccount( + this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions()) ); if (storedAccount?.settings != null) { storedAccount.settings.environmentUrls = account.settings.environmentUrls; account.settings = storedAccount.settings; } - await this.saveAccount(account, await this.defaultOnDiskLocalOptions()); + await this.storageService.save( + account.profile.userId, + account, + await this.defaultOnDiskMemoryOptions() + ); + await this.saveAccount( + account, + this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions()) + ); } // From bcbb52e6ec007b9bafd09fab5253bd3f015e694f Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 11 Feb 2022 15:11:31 -0500 Subject: [PATCH 084/120] Clear active user if state has no users (#677) * Clear active user if state has no users * use the correct userId * run prettier * add null check --- common/src/services/state.service.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 23c77a84..9ae48427 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -2376,26 +2376,24 @@ export class StateService< protected async removeAccountFromLocalStorage( userId: string = this.state.activeUserId ): Promise { - const storedAccount = await this.storageService.get(userId, { - htmlStorageLocation: HtmlStorageLocation.Local, - }); - await this.storageService.save( - userId, + const storedAccount = await this.getAccount( + this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions()) + ); + await this.saveAccount( this.resetAccount(storedAccount), - await this.defaultOnDiskLocalOptions() + this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions()) ); } protected async removeAccountFromSessionStorage( userId: string = this.state.activeUserId ): Promise { - const storedAccount = await this.storageService.get(userId, { - htmlStorageLocation: HtmlStorageLocation.Session, - }); - await this.storageService.save( - userId, + const storedAccount = await this.getAccount( + this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions()) + ); + await this.saveAccount( this.resetAccount(storedAccount), - await this.defaultOnDiskOptions() + this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions()) ); } @@ -2470,6 +2468,10 @@ export class StateService< } protected async dynamicallySetActiveUser() { + if (this.state.accounts == null || Object.keys(this.state.accounts).length < 1) { + await this.setActiveUser(null); + return; + } for (const userId in this.state.accounts) { if (userId == null) { continue; From 609baece05a046f6679989e55f6e029dd57fb9ee Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Mon, 14 Feb 2022 23:16:07 +1000 Subject: [PATCH 085/120] Clear stale everBeenUnlocked value from onDisk storage (#682) * Add StateVersion.Four to remove old everBeenUnlocked key * Save new state properly * Add unit tests * Fix linting --- common/src/enums/stateVersion.ts | 3 +- common/src/services/stateMigration.service.ts | 20 +++++ .../common/services/stateMigration.service.ts | 88 +++++++++++++++++++ 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 spec/common/services/stateMigration.service.ts diff --git a/common/src/enums/stateVersion.ts b/common/src/enums/stateVersion.ts index f966c323..5aeb02e5 100644 --- a/common/src/enums/stateVersion.ts +++ b/common/src/enums/stateVersion.ts @@ -2,5 +2,6 @@ export enum StateVersion { One = 1, // Original flat key/value pair store Two = 2, // Move to a typed State object Three = 3, // Fix migration of users' premium status - Latest = Three, + Four = 4, // Fix 'Never Lock' option by removing stale data + Latest = Four, } diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index cc40583c..f585b0cd 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -158,6 +158,9 @@ export class StateMigrationService< case StateVersion.Two: await this.migrateStateFrom2To3(); break; + case StateVersion.Three: + await this.migrateStateFrom3To4(); + break; } currentStateVersion += 1; @@ -474,6 +477,23 @@ export class StateMigrationService< await this.set(keys.global, globals); } + protected async migrateStateFrom3To4(): Promise { + const authenticatedUserIds = await this.get(keys.authenticatedAccounts); + await Promise.all( + authenticatedUserIds.map(async (userId) => { + const account = await this.get(userId); + if (account?.profile?.everBeenUnlocked != null) { + delete account.profile.everBeenUnlocked; + return this.set(userId, account); + } + }) + ); + + const globals = await this.getGlobals(); + globals.stateVersion = StateVersion.Four; + await this.set(keys.global, globals); + } + protected get options(): StorageOptions { return { htmlStorageLocation: HtmlStorageLocation.Local }; } diff --git a/spec/common/services/stateMigration.service.ts b/spec/common/services/stateMigration.service.ts new file mode 100644 index 00000000..1f488b12 --- /dev/null +++ b/spec/common/services/stateMigration.service.ts @@ -0,0 +1,88 @@ +import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { StorageService } from "jslib-common/abstractions/storage.service"; + +import { StateMigrationService } from "jslib-common/services/stateMigration.service"; + +import { StateFactory } from "jslib-common/factories/stateFactory"; + +import { Account } from "jslib-common/models/domain/account"; +import { GlobalState } from "jslib-common/models/domain/globalState"; + +import { StateVersion } from "jslib-common/enums/stateVersion"; + +const userId = "USER_ID"; + +describe("State Migration Service", () => { + let storageService: SubstituteOf; + let secureStorageService: SubstituteOf; + let stateFactory: SubstituteOf; + + let stateMigrationService: StateMigrationService; + + beforeEach(() => { + storageService = Substitute.for(); + secureStorageService = Substitute.for(); + stateFactory = Substitute.for(); + + stateMigrationService = new StateMigrationService( + storageService, + secureStorageService, + stateFactory + ); + }); + + describe("StateVersion 3 to 4 migration", async () => { + beforeEach(() => { + const globalVersion3: Partial = { + stateVersion: StateVersion.Three, + }; + + storageService.get("global", Arg.any()).resolves(globalVersion3); + storageService.get("authenticatedAccounts", Arg.any()).resolves([userId]); + }); + + it("clears everBeenUnlocked", async () => { + const accountVersion3: Account = { + profile: { + apiKeyClientId: null, + convertAccountToKeyConnector: null, + email: "EMAIL", + emailVerified: true, + everBeenUnlocked: true, + hasPremiumPersonally: false, + kdfIterations: 100000, + kdfType: 0, + keyHash: "KEY_HASH", + lastSync: "LAST_SYNC", + userId: userId, + usesKeyConnector: false, + forcePasswordReset: false, + }, + }; + + const expectedAccountVersion4: Account = { + profile: { + ...accountVersion3.profile, + }, + }; + delete expectedAccountVersion4.profile.everBeenUnlocked; + + storageService.get(userId, Arg.any()).resolves(accountVersion3); + + await stateMigrationService.migrate(); + + storageService.received(1).save(userId, expectedAccountVersion4, Arg.any()); + }); + + it("updates StateVersion number", async () => { + await stateMigrationService.migrate(); + + storageService.received(1).save( + "global", + Arg.is((globals: GlobalState) => globals.stateVersion === StateVersion.Four), + Arg.any() + ); + }); + }); +}); From 240fc154ab00a57829d0ce1398a6a6ce93395070 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 14 Feb 2022 11:47:01 -0500 Subject: [PATCH 086/120] [bug] Allow for toggling the account cache (#674) * [bug] Allow for toggling the account cache * Add missing conditional * Ran prettier --- common/src/services/state.service.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 9ae48427..934f40a9 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -76,7 +76,8 @@ export class StateService< protected secureStorageService: StorageService, protected logService: LogService, protected stateMigrationService: StateMigrationService, - protected stateFactory: StateFactory + protected stateFactory: StateFactory, + protected useAccountCache: boolean = true ) { this.accountDiskCache = new Map(); } @@ -2163,9 +2164,11 @@ export class StateService< return null; } - const cachedAccount = this.accountDiskCache.get(options.userId); - if (cachedAccount != null) { - return cachedAccount; + if (this.useAccountCache) { + const cachedAccount = this.accountDiskCache.get(options.userId); + if (cachedAccount != null) { + return cachedAccount; + } } const account = options?.useSecureStorage @@ -2176,7 +2179,9 @@ export class StateService< )) : await this.storageService.get(options.userId, options); - this.accountDiskCache.set(options.userId, account); + if (this.useAccountCache) { + this.accountDiskCache.set(options.userId, account); + } return account; } @@ -2206,7 +2211,10 @@ export class StateService< : this.storageService; await storageLocation.save(`${options.userId}`, account, options); - this.accountDiskCache.delete(options.userId); + + if (this.useAccountCache) { + this.accountDiskCache.delete(options.userId); + } } protected async saveAccountToMemory(account: TAccount): Promise { @@ -2407,7 +2415,9 @@ export class StateService< protected removeAccountFromMemory(userId: string = this.state.activeUserId): void { delete this.state.accounts[userId]; - this.accountDiskCache.delete(userId); + if (this.useAccountCache) { + this.accountDiskCache.delete(userId); + } } protected async pruneInMemoryAccounts() { From 5de59c32ab20c8ef11c82f7e27c8ece46d427e9e Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Mon, 14 Feb 2022 16:32:55 -0500 Subject: [PATCH 087/120] Save localData to local storage instead of in memory (#683) --- common/src/services/state.service.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 934f40a9..da7fb97a 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1613,16 +1613,19 @@ export class StateService< } async getLocalData(options?: StorageOptions): Promise { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.localData; + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) + )?.data?.localData; } - async setLocalData(value: string, options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); account.data.localData = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) + ); } async getLocale(options?: StorageOptions): Promise { From b65a2da18aa58e7901a43d28f7c9f3cc760639d1 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 15 Feb 2022 15:51:22 +0100 Subject: [PATCH 088/120] Clears the key after locking (#684) --- common/src/services/vaultTimeout.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index 682d1d7a..65654bca 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -97,6 +97,7 @@ export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { await this.stateService.setEverBeenUnlocked(true, { userId: userId }); await this.stateService.setBiometricLocked(true, { userId: userId }); + await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId }); await this.cryptoService.clearKey(false, userId); await this.cryptoService.clearOrgKeys(true, userId); From a6092916d80424b8bf4d34e321a0b58f15c7519d Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Tue, 15 Feb 2022 12:54:22 -0500 Subject: [PATCH 089/120] [bug] Persistantly store collapsedGroupings (#686) Collapsed groupings have regressed to not maintaining their state through restarting clients. The state mangement refactor erroniously began saving this field to memory instead of disk, but there were some other issues that changing this brought on that are also fixed in this commit. Changes: 1. Save collapsedGroupings persistantly in StateService 2. Adjust the type of collapsedGroupings on the Account model from a Set to a string[] * This is the way we were storing this value in previous releases, and saving the entire set object breaks. 3. Adjust the StateService getter/setter for collapsedGroupings to expect a string[] 4. Extract a string[] from the GroupingsComponent groupings that is a Set before saving --- angular/src/components/groupings.component.ts | 2 +- common/src/abstractions/state.service.ts | 4 ++-- common/src/models/domain/account.ts | 2 +- common/src/services/state.service.ts | 16 ++++++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/angular/src/components/groupings.component.ts b/angular/src/components/groupings.component.ts index e8a97c6f..4176e291 100644 --- a/angular/src/components/groupings.component.ts +++ b/angular/src/components/groupings.component.ts @@ -151,7 +151,7 @@ export class GroupingsComponent { } else { this.collapsedGroupings.add(id); } - await this.stateService.setCollapsedGroupings(this.collapsedGroupings); + await this.stateService.setCollapsedGroupings(Array.from(this.collapsedGroupings)); } isCollapsed(grouping: FolderView | CollectionView, idPrefix = "") { diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index e4c38025..49d3e2f6 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -63,8 +63,8 @@ export abstract class StateService { getCanAccessPremium: (options?: StorageOptions) => Promise; getClearClipboard: (options?: StorageOptions) => Promise; setClearClipboard: (value: number, options?: StorageOptions) => Promise; - getCollapsedGroupings: (options?: StorageOptions) => Promise>; - setCollapsedGroupings: (value: Set, options?: StorageOptions) => Promise; + getCollapsedGroupings: (options?: StorageOptions) => Promise; + setCollapsedGroupings: (value: string[], options?: StorageOptions) => Promise; getConvertAccountToKeyConnector: (options?: StorageOptions) => Promise; setConvertAccountToKeyConnector: (value: boolean, options?: StorageOptions) => Promise; getCryptoMasterKey: (options?: StorageOptions) => Promise; diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 012ce09c..5c0337e5 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -54,7 +54,7 @@ export class AccountData { GeneratedPasswordHistory[] > = new EncryptionPair(); addEditCipherInfo?: any; - collapsedGroupings?: Set; + collapsedGroupings?: string[]; eventCollection?: EventData[]; organizations?: { [id: string]: OrganizationData }; providers?: { [id: string]: ProviderData }; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index da7fb97a..30f908f7 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -388,17 +388,21 @@ export class StateService< ); } - async getCollapsedGroupings(options?: StorageOptions): Promise> { - return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions))) - ?.data?.collapsedGroupings; + async getCollapsedGroupings(options?: StorageOptions): Promise { + return ( + await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) + )?.data?.collapsedGroupings; } - async setCollapsedGroupings(value: Set, options?: StorageOptions): Promise { + async setCollapsedGroupings(value: string[], options?: StorageOptions): Promise { const account = await this.getAccount( - this.reconcileOptions(options, this.defaultInMemoryOptions) + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); account.data.collapsedGroupings = value; - await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions)); + await this.saveAccount( + account, + this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) + ); } async getConvertAccountToKeyConnector(options?: StorageOptions): Promise { From 1ef2ac1001858821ab657f37c7fb18407c7d6d86 Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Wed, 16 Feb 2022 08:44:13 -0600 Subject: [PATCH 090/120] Enforce Hold label (#685) * Enforce Hold label * Linting Co-authored-by: Micaiah Martin <77340197+mimartin12@users.noreply.github.com> --- .github/workflows/enforce-labels.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/enforce-labels.yml diff --git a/.github/workflows/enforce-labels.yml b/.github/workflows/enforce-labels.yml new file mode 100644 index 00000000..0a63c70e --- /dev/null +++ b/.github/workflows/enforce-labels.yml @@ -0,0 +1,16 @@ +--- +name: Enforce PR labels + +on: + pull_request: + types: [labeled, unlabeled, opened, edited, synchronize] +jobs: + enforce-label: + name: EnforceLabel + runs-on: ubuntu-20.04 + steps: + - name: Enforce Label + uses: yogevbd/enforce-label-action@8d1e1709b1011e6d90400a0e6cf7c0b77aa5efeb + with: + BANNED_LABELS: "hold" + BANNED_LABELS_DESCRIPTION: "PRs on hold cannot be merged" From fc0638a7d95e9e678cc125d5186c1dcd8fdad7e6 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 17 Feb 2022 11:36:00 -0500 Subject: [PATCH 091/120] fix infite recursion on getEncKey (#687) --- common/src/services/crypto.service.ts | 75 ++++++++++++++------------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/common/src/services/crypto.service.ts b/common/src/services/crypto.service.ts index 5a97ac76..654af3bb 100644 --- a/common/src/services/crypto.service.ts +++ b/common/src/services/crypto.service.ts @@ -158,41 +158,8 @@ export class CryptoService implements CryptoServiceAbstraction { } @sequentialize(() => "getEncKey") - async getEncKey(key: SymmetricCryptoKey = null): Promise { - const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey(); - if (inMemoryKey != null) { - return inMemoryKey; - } - - const encKey = await this.stateService.getEncryptedCryptoSymmetricKey(); - if (encKey == null) { - return null; - } - - if (key == null) { - key = await this.getKey(); - } - if (key == null) { - return null; - } - - let decEncKey: ArrayBuffer; - const encKeyCipher = new EncString(encKey); - if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) { - decEncKey = await this.decryptToBytes(encKeyCipher, key); - } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) { - const newKey = await this.stretchKey(key); - decEncKey = await this.decryptToBytes(encKeyCipher, newKey); - } else { - throw new Error("Unsupported encKey type."); - } - - if (decEncKey == null) { - return null; - } - const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey); - await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey); - return symmetricCryptoKey; + getEncKey(key: SymmetricCryptoKey = null): Promise { + return this.getEncKeyHelper(key); } async getPublicKey(): Promise { @@ -747,7 +714,7 @@ export class CryptoService implements CryptoServiceAbstraction { async validateKey(key: SymmetricCryptoKey) { try { const encPrivateKey = await this.stateService.getEncryptedPrivateKey(); - const encKey = await this.getEncKey(key); + const encKey = await this.getEncKeyHelper(key); if (encPrivateKey == null || encKey == null) { return false; } @@ -967,4 +934,40 @@ export class CryptoService implements CryptoServiceAbstraction { await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId }); await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId }); } + + private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise { + const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey(); + if (inMemoryKey != null) { + return inMemoryKey; + } + + const encKey = await this.stateService.getEncryptedCryptoSymmetricKey(); + if (encKey == null) { + return null; + } + + if (key == null) { + key = await this.getKey(); + } + if (key == null) { + return null; + } + + let decEncKey: ArrayBuffer; + const encKeyCipher = new EncString(encKey); + if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) { + decEncKey = await this.decryptToBytes(encKeyCipher, key); + } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) { + const newKey = await this.stretchKey(key); + decEncKey = await this.decryptToBytes(encKeyCipher, newKey); + } else { + throw new Error("Unsupported encKey type."); + } + if (decEncKey == null) { + return null; + } + const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey); + await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey); + return symmetricCryptoKey; + } } From 6d186bb204c6608d7e9cc70d18b395c55172e995 Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Fri, 18 Feb 2022 17:17:58 -0600 Subject: [PATCH 092/120] [Icons] Fix sass deprecation warnings (#680) * [Icons] Cleanup deprecation warnings * Reverted to calc since math.div is not available in our current version * Removed * -1 trick --- angular/src/scss/bwicons/styles/style.scss | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/angular/src/scss/bwicons/styles/style.scss b/angular/src/scss/bwicons/styles/style.scss index 24504d88..3658c75e 100644 --- a/angular/src/scss/bwicons/styles/style.scss +++ b/angular/src/scss/bwicons/styles/style.scss @@ -31,7 +31,7 @@ $icomoon-font-path: "~@bitwarden/jslib-angular/src/scss/bwicons/fonts/" !default // Fixed Width Icons .bwi-fw { - width: (18em / 14); + width: calc(18em / 14); text-align: center; } @@ -41,8 +41,8 @@ $icomoon-font-path: "~@bitwarden/jslib-angular/src/scss/bwicons/fonts/" !default } .bwi-lg { - font-size: (4em / 3); - line-height: (3em / 4); + font-size: calc(4em / 3); + line-height: calc(3em / 4); vertical-align: -15%; } @@ -75,7 +75,7 @@ $icomoon-font-path: "~@bitwarden/jslib-angular/src/scss/bwicons/fonts/" !default // List Icons .bwi-ul { padding-left: 0; - margin-left: (30em / 14); + margin-left: calc(30em / 14); list-style-type: none; > li { position: relative; @@ -84,12 +84,12 @@ $icomoon-font-path: "~@bitwarden/jslib-angular/src/scss/bwicons/fonts/" !default .bwi-li { position: absolute; - left: -(30em / 14); - width: (30em / 14); - top: (2em / 14); + left: calc(-30em / 14); + width: calc(30em / 14); + top: calc(2em / 14); text-align: center; &.bwi-lg { - left: -(30em / 14) + (4em / 14); + left: calc(-30em / 14) + calc(4em / 14); } } @@ -247,9 +247,3 @@ $icons: ( content: $glyph; } } - -:export { - @each $name, $glyph in $icons { - #{$name}: $glyph; - } -} From 479d5db5f1679758176111707ba2e5e14e2336ff Mon Sep 17 00:00:00 2001 From: Chad Scharf <3904944+cscharf@users.noreply.github.com> Date: Tue, 22 Feb 2022 08:03:54 -0500 Subject: [PATCH 093/120] We're Hiring (#692) Added link to README.md for Bitwarden Careers page. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ce5cb1f1..0614a6cf 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,10 @@ Common code referenced across Bitwarden JavaScript projects. - [Windows 10 SDK 17134](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/) either by downloading it seperately or through the Visual Studio Installer. +## We're Hiring! + +Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our [Careers page](https://bitwarden.com/careers/) to see what opportunities are currently open as well as what it's like to work at Bitwarden. + ## Prettier We recently migrated to using Prettier as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps: From 60878cd4ed9b1989860a918b62ce72529232560f Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 22 Feb 2022 15:39:11 +0100 Subject: [PATCH 094/120] Add eslint (#610) --- .eslintignore | 3 + .eslintrc.json | 23 + angular/package.json | 4 +- .../add-edit-custom-fields.component.ts | 10 +- angular/src/components/add-edit.component.ts | 34 +- .../src/components/attachments.component.ts | 2 - angular/src/components/avatar.component.ts | 3 - angular/src/components/callout.component.ts | 1 - .../components/captchaProtected.component.ts | 2 - .../components/change-password.component.ts | 4 +- angular/src/components/ciphers.component.ts | 9 +- .../src/components/collections.component.ts | 4 +- angular/src/components/export.component.ts | 3 +- .../components/folder-add-edit.component.ts | 3 +- angular/src/components/groupings.component.ts | 21 +- angular/src/components/hint.component.ts | 5 +- angular/src/components/icon.component.ts | 7 +- angular/src/components/lock.component.ts | 26 +- angular/src/components/login.component.ts | 16 +- .../modal/dynamic-modal.component.ts | 3 +- .../password-generator-history.component.ts | 1 - .../password-generator.component.ts | 7 +- .../components/password-history.component.ts | 1 - .../components/password-reprompt.component.ts | 1 + angular/src/components/premium.component.ts | 4 +- angular/src/components/register.component.ts | 22 +- .../components/remove-password.component.ts | 7 +- .../src/components/send/add-edit.component.ts | 11 +- .../components/send/efflux-dates.component.ts | 6 +- angular/src/components/send/send.component.ts | 10 +- .../src/components/set-password.component.ts | 17 +- angular/src/components/set-pin.component.ts | 1 - .../settings/vault-timeout-input.component.ts | 11 +- angular/src/components/share.component.ts | 7 +- angular/src/components/sso.component.ts | 3 - .../two-factor-options.component.ts | 4 +- .../src/components/two-factor.component.ts | 29 +- .../components/update-password.component.ts | 11 +- .../update-temp-password.component.ts | 8 +- .../verify-master-password.component.ts | 8 +- .../view-custom-fields.component.ts | 4 +- angular/src/components/view.component.ts | 13 +- .../src/directives/api-action.directive.ts | 2 +- angular/src/directives/autofocus.directive.ts | 1 - angular/src/directives/box-row.directive.ts | 6 +- .../directives/true-false-value.directive.ts | 2 +- angular/src/pipes/color-password.pipe.ts | 1 + angular/src/pipes/search-ciphers.pipe.ts | 2 +- angular/src/services/jslib-services.module.ts | 72 +- angular/src/services/modal.service.ts | 5 +- .../src/services/passwordReprompt.service.ts | 1 + angular/src/services/validation.service.ts | 1 - common/package.json | 4 +- common/src/abstractions/api.service.ts | 11 +- common/src/abstractions/auth.service.ts | 3 +- common/src/abstractions/cipher.service.ts | 3 - common/src/abstractions/collection.service.ts | 2 - common/src/abstractions/crypto.service.ts | 14 +- common/src/abstractions/folder.service.ts | 2 - .../src/abstractions/keyConnector.service.ts | 1 - .../src/abstractions/organization.service.ts | 1 - common/src/abstractions/policy.service.ts | 5 +- common/src/abstractions/provider.service.ts | 1 - common/src/abstractions/send.service.ts | 2 - common/src/abstractions/state.service.ts | 3 - common/src/abstractions/twoFactor.service.ts | 1 - .../abstractions/userVerification.service.ts | 1 - common/src/factories/stateFactory.ts | 1 + common/src/importers/ascendoCsvImporter.ts | 4 +- common/src/importers/avastCsvImporter.ts | 4 +- common/src/importers/avastJsonImporter.ts | 9 +- common/src/importers/aviraCsvImporter.ts | 4 +- common/src/importers/baseImporter.ts | 26 +- common/src/importers/bitwardenCsvImporter.ts | 26 +- common/src/importers/bitwardenJsonImporter.ts | 10 +- .../bitwardenPasswordProtectedImporter.ts | 12 +- common/src/importers/blackBerryCsvImporter.ts | 4 +- common/src/importers/blurCsvImporter.ts | 4 +- common/src/importers/buttercupCsvImporter.ts | 5 +- common/src/importers/chromeCsvImporter.ts | 4 +- common/src/importers/clipperzHtmlImporter.ts | 8 +- common/src/importers/codebookCsvImporter.ts | 4 +- common/src/importers/dashlaneJsonImporter.ts | 12 +- common/src/importers/encryptrCsvImporter.ts | 8 +- common/src/importers/enpassCsvImporter.ts | 10 +- common/src/importers/enpassJsonImporter.ts | 10 +- common/src/importers/firefoxCsvImporter.ts | 4 +- common/src/importers/fsecureFskImporter.ts | 9 +- common/src/importers/gnomeJsonImporter.ts | 8 +- common/src/importers/kasperskyTxtImporter.ts | 4 +- common/src/importers/keepass2XmlImporter.ts | 10 +- common/src/importers/keepassxCsvImporter.ts | 4 +- .../keeperImporters/keeperCsvImporter.ts | 5 +- .../keeperImporters/keeperJsonImporter.ts | 3 +- common/src/importers/lastpassCsvImporter.ts | 15 +- common/src/importers/logMeOnceCsvImporter.ts | 4 +- common/src/importers/meldiumCsvImporter.ts | 4 +- common/src/importers/msecureCsvImporter.ts | 10 +- common/src/importers/mykiCsvImporter.ts | 8 +- common/src/importers/nordpassCsvImporter.ts | 10 +- .../onepassword1PifImporter.ts | 13 +- .../onepasswordCsvImporter.ts | 7 +- .../onepasswordMacCsvImporter.ts | 7 +- .../onepasswordWinCsvImporter.ts | 8 +- common/src/importers/padlockCsvImporter.ts | 8 +- common/src/importers/passkeepCsvImporter.ts | 4 +- common/src/importers/passmanJsonImporter.ts | 4 +- common/src/importers/passpackCsvImporter.ts | 7 +- .../src/importers/passwordAgentCsvImporter.ts | 4 +- .../src/importers/passwordBossJsonImporter.ts | 9 +- .../importers/passwordDragonXmlImporter.ts | 4 +- .../src/importers/passwordSafeXmlImporter.ts | 4 +- .../importers/passwordWalletTxtImporter.ts | 4 +- common/src/importers/rememBearCsvImporter.ts | 10 +- common/src/importers/roboformCsvImporter.ts | 4 +- common/src/importers/safariCsvImporter.ts | 4 +- .../src/importers/safeInCloudXmlImporter.ts | 17 +- common/src/importers/saferpassCsvImport.ts | 4 +- common/src/importers/secureSafeCsvImporter.ts | 4 +- common/src/importers/splashIdCsvImporter.ts | 6 +- .../importers/stickyPasswordXmlImporter.ts | 4 +- common/src/importers/truekeyCsvImporter.ts | 12 +- common/src/importers/upmCsvImporter.ts | 4 +- common/src/importers/yotiCsvImporter.ts | 4 +- common/src/importers/zohoVaultCsvImporter.ts | 6 +- common/src/misc/captcha_iframe.ts | 1 + common/src/misc/iframe_component.ts | 2 - .../src/misc/linkedFieldOption.decorator.ts | 3 +- .../misc/logInStrategies/apiLogin.strategy.ts | 7 +- .../misc/logInStrategies/logIn.strategy.ts | 38 +- .../logInStrategies/passwordLogin.strategy.ts | 9 +- .../misc/logInStrategies/ssoLogin.strategy.ts | 7 +- common/src/misc/utils.ts | 6 +- common/src/misc/webauthn_iframe.ts | 6 +- common/src/models/api/fieldApi.ts | 3 +- common/src/models/api/loginUriApi.ts | 3 +- common/src/models/api/secureNoteApi.ts | 3 +- common/src/models/data/cipherData.ts | 3 +- common/src/models/data/fieldData.ts | 1 - common/src/models/data/loginUriData.ts | 1 - common/src/models/data/organizationData.ts | 4 +- common/src/models/data/policyData.ts | 3 +- common/src/models/data/providerData.ts | 3 +- common/src/models/data/secureNoteData.ts | 1 - common/src/models/data/sendData.ts | 3 +- common/src/models/domain/account.ts | 21 +- common/src/models/domain/attachment.ts | 9 +- common/src/models/domain/authResult.ts | 7 +- common/src/models/domain/card.ts | 7 +- common/src/models/domain/cipher.ts | 6 +- common/src/models/domain/collection.ts | 3 +- common/src/models/domain/domainBase.ts | 7 +- common/src/models/domain/encString.ts | 4 +- common/src/models/domain/field.ts | 6 +- common/src/models/domain/folder.ts | 3 +- common/src/models/domain/identity.ts | 7 +- common/src/models/domain/logInCredentials.ts | 1 - common/src/models/domain/login.ts | 6 +- common/src/models/domain/loginUri.ts | 4 +- .../domain/masterPasswordPolicyOptions.ts | 12 +- common/src/models/domain/organization.ts | 3 +- common/src/models/domain/password.ts | 5 +- .../domain/passwordGeneratorPolicyOptions.ts | 22 +- common/src/models/domain/policy.ts | 3 +- .../domain/resetPasswordPolicyOptions.ts | 2 +- common/src/models/domain/secureNote.ts | 6 +- common/src/models/domain/send.ts | 6 +- common/src/models/domain/sendAccess.ts | 4 +- common/src/models/domain/sendFile.ts | 9 +- common/src/models/domain/sendText.ts | 9 +- .../src/models/domain/symmetricCryptoKey.ts | 1 - common/src/models/export/card.ts | 3 +- common/src/models/export/cipher.ts | 4 +- common/src/models/export/cipherWithIds.ts | 5 +- common/src/models/export/collection.ts | 3 +- common/src/models/export/collectionWithId.ts | 5 +- common/src/models/export/field.ts | 4 +- common/src/models/export/folder.ts | 3 +- common/src/models/export/folderWithId.ts | 5 +- common/src/models/export/identity.ts | 3 +- common/src/models/export/login.ts | 7 +- common/src/models/export/loginUri.ts | 4 +- common/src/models/export/secureNote.ts | 4 +- .../account/setKeyConnectorKeyRequest.ts | 3 +- .../models/request/cipherBulkShareRequest.ts | 4 +- .../src/models/request/cipherCreateRequest.ts | 4 +- common/src/models/request/cipherRequest.ts | 4 +- .../src/models/request/cipherShareRequest.ts | 4 +- .../src/models/request/cipherWithIdRequest.ts | 4 +- common/src/models/request/deviceRequest.ts | 3 +- .../src/models/request/folderWithIdRequest.ts | 4 +- .../request/identityToken/apiTokenRequest.ts | 4 +- .../identityToken/passwordTokenRequest.ts | 7 +- .../request/identityToken/ssoTokenRequest.ts | 4 +- .../request/identityToken/tokenRequest.ts | 2 +- common/src/models/request/kdfRequest.ts | 4 +- .../organization/organizationSsoRequest.ts | 2 +- .../request/organizationImportRequest.ts | 4 +- .../request/organizationUserInviteRequest.ts | 4 +- .../request/organizationUserUpdateRequest.ts | 4 +- common/src/models/request/registerRequest.ts | 5 +- common/src/models/request/sendRequest.ts | 2 - .../src/models/request/sendWithIdRequest.ts | 4 +- .../src/models/request/setPasswordRequest.ts | 4 +- .../request/twoFactorProviderRequest.ts | 4 +- .../response/attachmentUploadDataResponse.ts | 1 + common/src/models/response/billingResponse.ts | 4 +- common/src/models/response/cipherResponse.ts | 8 +- common/src/models/response/deviceResponse.ts | 4 +- .../response/emergencyAccessResponse.ts | 1 + common/src/models/response/errorResponse.ts | 2 + common/src/models/response/eventResponse.ts | 4 +- .../models/response/identityTokenResponse.ts | 4 +- .../response/identityTwoFactorResponse.ts | 5 +- .../models/response/notificationResponse.ts | 5 +- .../models/response/organizationResponse.ts | 4 +- .../response/organizationUserResponse.ts | 9 +- common/src/models/response/policyResponse.ts | 4 +- .../src/models/response/preloginResponse.ts | 4 +- .../response/profileOrganizationResponse.ts | 4 +- .../response/profileProviderResponse.ts | 5 +- .../response/provider/providerUserResponse.ts | 6 +- .../src/models/response/sendAccessResponse.ts | 5 +- common/src/models/response/sendResponse.ts | 5 +- .../response/twoFactorProviderResponse.ts | 4 +- .../response/twoFactorWebAuthnResponse.ts | 1 + common/src/models/view/attachmentView.ts | 4 +- common/src/models/view/cardView.ts | 11 +- common/src/models/view/cipherView.ts | 2 - common/src/models/view/collectionView.ts | 5 +- common/src/models/view/fieldView.ts | 7 +- common/src/models/view/folderView.ts | 4 +- common/src/models/view/identityView.ts | 14 +- common/src/models/view/itemView.ts | 4 +- common/src/models/view/loginUriView.ts | 8 +- common/src/models/view/loginView.ts | 11 +- common/src/models/view/passwordHistoryView.ts | 4 +- common/src/models/view/secureNoteView.ts | 3 +- common/src/models/view/sendAccessView.ts | 1 - common/src/models/view/sendFileView.ts | 4 +- common/src/models/view/sendTextView.ts | 4 +- common/src/models/view/sendView.ts | 7 +- common/src/services/api.service.ts | 28 +- common/src/services/appId.service.ts | 3 +- common/src/services/audit.service.ts | 2 - common/src/services/auth.service.ts | 33 +- .../src/services/azureFileUpload.service.ts | 3 +- .../services/bitwardenFileUpload.service.ts | 4 +- common/src/services/cipher.service.ts | 55 +- common/src/services/collection.service.ts | 14 +- common/src/services/consoleLog.service.ts | 17 +- common/src/services/crypto.service.ts | 30 +- common/src/services/environment.service.ts | 7 +- common/src/services/event.service.ts | 9 +- common/src/services/export.service.ts | 28 +- common/src/services/fileUpload.service.ts | 9 +- common/src/services/folder.service.ts | 25 +- common/src/services/i18n.service.ts | 5 +- common/src/services/import.service.ts | 27 +- common/src/services/keyConnector.service.ts | 5 - common/src/services/notifications.service.ts | 6 +- common/src/services/organization.service.ts | 4 +- .../services/passwordGeneration.service.ts | 13 +- common/src/services/policy.service.ts | 14 +- common/src/services/provider.service.ts | 4 +- common/src/services/search.service.ts | 7 +- common/src/services/send.service.ts | 33 +- common/src/services/settings.service.ts | 1 + common/src/services/state.service.ts | 42 +- common/src/services/stateMigration.service.ts | 24 +- common/src/services/sync.service.ts | 4 +- common/src/services/system.service.ts | 1 - common/src/services/token.service.ts | 6 +- common/src/services/totp.service.ts | 4 - common/src/services/twoFactor.service.ts | 2 - .../src/services/userVerification.service.ts | 6 +- common/src/services/vaultTimeout.service.ts | 1 - .../src/services/webCryptoFunction.service.ts | 2 - electron/package.json | 4 +- electron/src/baseMenu.ts | 3 +- electron/src/biometric.darwin.main.ts | 3 +- electron/src/biometric.windows.main.ts | 8 +- electron/src/keytarStorageListener.ts | 1 - .../src/services/electronCrypto.service.ts | 5 +- electron/src/services/electronLog.service.ts | 6 +- .../services/electronMainMessaging.service.ts | 5 +- .../services/electronPlatformUtils.service.ts | 11 +- .../electronRendererSecureStorage.service.ts | 1 - .../src/services/electronStorage.service.ts | 6 +- electron/src/tray.main.ts | 5 +- electron/src/updater.main.ts | 8 +- electron/src/window.main.ts | 8 +- node/package.json | 4 +- node/src/cli/baseProgram.ts | 2 +- node/src/cli/commands/login.command.ts | 40 +- node/src/cli/commands/logout.command.ts | 2 - node/src/cli/commands/update.command.ts | 3 +- .../cli/services/cliPlatformUtils.service.ts | 5 +- node/src/cli/services/consoleLog.service.ts | 3 +- node/src/services/lowdbStorage.service.ts | 6 +- node/src/services/nodeApi.service.ts | 3 +- .../services/nodeCryptoFunction.service.ts | 5 +- package-lock.json | 5167 +++++++++++------ package.json | 14 +- shared/eslintrc.json | 29 + ...bitwardenPasswordProtectedImporter.spec.ts | 3 - .../importers/firefoxCsvImporter.spec.ts | 3 +- .../importers/keepass2XmlImporter.spec.ts | 2 +- .../importers/keeperJsonImporter.spec.ts | 3 +- .../importers/lastpassCsvImporter.spec.ts | 8 +- .../importers/nordpassCsvImporter.spec.ts | 3 +- .../onepasswordMacCsvImporter.spec.ts | 3 +- .../onepasswordWinCsvImporter.spec.ts | 3 +- .../onePasswordCsv/creditCard.mac.csv.ts | 1 + .../onePasswordCsv/identity.mac.csv.ts | 1 + .../onePasswordCsv/multipleItems.mac.csv.ts | 1 + .../testData/safeInCloud/testData.xml.ts | 1 + .../logInStrategies/apiLogIn.strategy.spec.ts | 2 - .../logInStrategies/logIn.strategy.spec.ts | 7 +- .../passwordLogIn.strategy.spec.ts | 5 +- .../logInStrategies/ssoLogIn.strategy.spec.ts | 7 +- spec/common/services/cipher.service.spec.ts | 2 - .../services/consoleLog.service.spec.ts | 12 +- spec/common/services/export.service.spec.ts | 12 +- spec/common/services/import.service.spec.ts | 6 +- .../common/services/stateMigration.service.ts | 8 +- spec/helpers.ts | 4 +- spec/node/cli/consoleLog.service.spec.ts | 2 +- .../nodeCryptoFunction.service.spec.ts | 3 +- spec/support/karma.conf.js | 3 +- spec/utils.ts | 3 +- .../webCryptoFunction.service.spec.ts | 4 +- tslint.json | 68 - 333 files changed, 4509 insertions(+), 3043 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 shared/eslintrc.json delete mode 100644 tslint.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..92deb474 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +**/dist + +**/node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..4398e5a7 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "root": true, + "extends": ["./shared/eslintrc.json"], + "rules": { + "import/order": [ + "error", + { + "alphabetize": { + "order": "asc" + }, + "newlines-between": "always", + "pathGroups": [ + { + "pattern": "jslib-*/**", + "group": "external", + "position": "after" + } + ], + "pathGroupsExcludedImportTypes": ["builtin"] + } + ] + } +} diff --git a/angular/package.json b/angular/package.json index d1d5f64c..54997aaa 100644 --- a/angular/package.json +++ b/angular/package.json @@ -15,9 +15,7 @@ "scripts": { "clean": "rimraf dist/**/*", "build": "npm run clean && tsc", - "build:watch": "npm run clean && tsc -watch", - "lint": "tslint 'src/**/*.ts' 'spec/**/*.ts'", - "lint:fix": "tslint 'src/**/*.ts' 'spec/**/*.ts' --fix" + "build:watch": "npm run clean && tsc -watch" }, "devDependencies": { "@types/duo_web_sdk": "^2.7.1", diff --git a/angular/src/components/add-edit-custom-fields.component.ts b/angular/src/components/add-edit-custom-fields.component.ts index 4107bc27..e6dad6cd 100644 --- a/angular/src/components/add-edit-custom-fields.component.ts +++ b/angular/src/components/add-edit-custom-fields.component.ts @@ -1,18 +1,14 @@ -import { Directive, Input, OnChanges, SimpleChanges } from "@angular/core"; - import { CdkDragDrop, moveItemInArray } from "@angular/cdk/drag-drop"; +import { Directive, Input, OnChanges, SimpleChanges } from "@angular/core"; import { EventService } from "jslib-common/abstractions/event.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; - -import { CipherView } from "jslib-common/models/view/cipherView"; -import { FieldView } from "jslib-common/models/view/fieldView"; - import { CipherType } from "jslib-common/enums/cipherType"; import { EventType } from "jslib-common/enums/eventType"; import { FieldType } from "jslib-common/enums/fieldType"; - import { Utils } from "jslib-common/misc/utils"; +import { CipherView } from "jslib-common/models/view/cipherView"; +import { FieldView } from "jslib-common/models/view/fieldView"; @Directive() export class AddEditCustomFieldsComponent implements OnChanges { diff --git a/angular/src/components/add-edit.component.ts b/angular/src/components/add-edit.component.ts index 4c19588c..193c5720 100644 --- a/angular/src/components/add-edit.component.ts +++ b/angular/src/components/add-edit.component.ts @@ -1,13 +1,5 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; -import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType"; -import { CipherType } from "jslib-common/enums/cipherType"; -import { EventType } from "jslib-common/enums/eventType"; -import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType"; -import { PolicyType } from "jslib-common/enums/policyType"; -import { SecureNoteType } from "jslib-common/enums/secureNoteType"; -import { UriMatchType } from "jslib-common/enums/uriMatchType"; - import { AuditService } from "jslib-common/abstractions/audit.service"; import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CollectionService } from "jslib-common/abstractions/collection.service"; @@ -21,9 +13,15 @@ import { PasswordRepromptService } from "jslib-common/abstractions/passwordRepro import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; - +import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType"; +import { CipherType } from "jslib-common/enums/cipherType"; +import { EventType } from "jslib-common/enums/eventType"; +import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType"; +import { PolicyType } from "jslib-common/enums/policyType"; +import { SecureNoteType } from "jslib-common/enums/secureNoteType"; +import { UriMatchType } from "jslib-common/enums/uriMatchType"; +import { Utils } from "jslib-common/misc/utils"; import { Cipher } from "jslib-common/models/domain/cipher"; - import { CardView } from "jslib-common/models/view/cardView"; import { CipherView } from "jslib-common/models/view/cipherView"; import { CollectionView } from "jslib-common/models/view/collectionView"; @@ -33,11 +31,9 @@ import { LoginUriView } from "jslib-common/models/view/loginUriView"; import { LoginView } from "jslib-common/models/view/loginView"; import { SecureNoteView } from "jslib-common/models/view/secureNoteView"; -import { Utils } from "jslib-common/misc/utils"; - @Directive() export class AddEditComponent implements OnInit { - @Input() cloneMode: boolean = false; + @Input() cloneMode = false; @Input() folderId: string = null; @Input() cipherId: string; @Input() type: CipherType; @@ -52,7 +48,7 @@ export class AddEditComponent implements OnInit { @Output() onEditCollections = new EventEmitter(); @Output() onGeneratePassword = new EventEmitter(); - editMode: boolean = false; + editMode = false; cipher: CipherView; folders: FolderView[]; collections: CollectionView[] = []; @@ -61,9 +57,9 @@ export class AddEditComponent implements OnInit { deletePromise: Promise; restorePromise: Promise; checkPasswordPromise: Promise; - showPassword: boolean = false; - showCardNumber: boolean = false; - showCardCode: boolean = false; + showPassword = false; + showCardNumber = false; + showCardCode = false; cipherType = CipherType; typeOptions: any[]; cardBrandOptions: any[]; @@ -74,8 +70,8 @@ export class AddEditComponent implements OnInit { autofillOnPageLoadOptions: any[]; currentDate = new Date(); allowPersonal = true; - reprompt: boolean = false; - canUseReprompt: boolean = true; + reprompt = false; + canUseReprompt = true; protected writeableCollections: CollectionView[]; private previousCipherId: string; diff --git a/angular/src/components/attachments.component.ts b/angular/src/components/attachments.component.ts index 6506cffc..ff76f6ab 100644 --- a/angular/src/components/attachments.component.ts +++ b/angular/src/components/attachments.component.ts @@ -7,10 +7,8 @@ import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Cipher } from "jslib-common/models/domain/cipher"; import { ErrorResponse } from "jslib-common/models/response/errorResponse"; - import { AttachmentView } from "jslib-common/models/view/attachmentView"; import { CipherView } from "jslib-common/models/view/cipherView"; diff --git a/angular/src/components/avatar.component.ts b/angular/src/components/avatar.component.ts index d433857a..bc029ea4 100644 --- a/angular/src/components/avatar.component.ts +++ b/angular/src/components/avatar.component.ts @@ -3,7 +3,6 @@ import { DomSanitizer } from "@angular/platform-browser"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Utils } from "jslib-common/misc/utils"; @Component({ @@ -81,12 +80,10 @@ export class AvatarComponent implements OnChanges, OnInit { private stringToColor(str: string): string { let hash = 0; for (let i = 0; i < str.length; i++) { - // tslint:disable-next-line hash = str.charCodeAt(i) + ((hash << 5) - hash); } let color = "#"; for (let i = 0; i < 3; i++) { - // tslint:disable-next-line const value = (hash >> (i * 8)) & 0xff; color += ("00" + value.toString(16)).substr(-2); } diff --git a/angular/src/components/callout.component.ts b/angular/src/components/callout.component.ts index b9685f0e..a1785fe5 100644 --- a/angular/src/components/callout.component.ts +++ b/angular/src/components/callout.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from "@angular/core"; import { I18nService } from "jslib-common/abstractions/i18n.service"; - import { MasterPasswordPolicyOptions } from "jslib-common/models/domain/masterPasswordPolicyOptions"; @Component({ diff --git a/angular/src/components/captchaProtected.component.ts b/angular/src/components/captchaProtected.component.ts index d13f7151..998970e4 100644 --- a/angular/src/components/captchaProtected.component.ts +++ b/angular/src/components/captchaProtected.component.ts @@ -3,9 +3,7 @@ import { Directive, Input } from "@angular/core"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { CaptchaIFrame } from "jslib-common/misc/captcha_iframe"; - import { Utils } from "jslib-common/misc/utils"; @Directive() diff --git a/angular/src/components/change-password.component.ts b/angular/src/components/change-password.component.ts index 2431ece2..4b2ea619 100644 --- a/angular/src/components/change-password.component.ts +++ b/angular/src/components/change-password.component.ts @@ -7,13 +7,11 @@ import { PasswordGenerationService } from "jslib-common/abstractions/passwordGen import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; - +import { KdfType } from "jslib-common/enums/kdfType"; import { EncString } from "jslib-common/models/domain/encString"; import { MasterPasswordPolicyOptions } from "jslib-common/models/domain/masterPasswordPolicyOptions"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; -import { KdfType } from "jslib-common/enums/kdfType"; - @Directive() export class ChangePasswordComponent implements OnInit { masterPassword: string; diff --git a/angular/src/components/ciphers.component.ts b/angular/src/components/ciphers.component.ts index 3f724bb5..7f8369ed 100644 --- a/angular/src/components/ciphers.component.ts +++ b/angular/src/components/ciphers.component.ts @@ -1,7 +1,6 @@ import { Directive, EventEmitter, Input, Output } from "@angular/core"; import { SearchService } from "jslib-common/abstractions/search.service"; - import { CipherView } from "jslib-common/models/view/cipherView"; @Directive() @@ -12,12 +11,12 @@ export class CiphersComponent { @Output() onAddCipher = new EventEmitter(); @Output() onAddCipherOptions = new EventEmitter(); - loaded: boolean = false; + loaded = false; ciphers: CipherView[] = []; searchText: string; searchPlaceholder: string = null; filter: (cipher: CipherView) => boolean = null; - deleted: boolean = false; + deleted = false; protected searchPending = false; @@ -25,13 +24,13 @@ export class CiphersComponent { constructor(protected searchService: SearchService) {} - async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) { + async load(filter: (cipher: CipherView) => boolean = null, deleted = false) { this.deleted = deleted || false; await this.applyFilter(filter); this.loaded = true; } - async reload(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) { + async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) { this.loaded = false; this.ciphers = []; await this.load(filter, deleted); diff --git a/angular/src/components/collections.component.ts b/angular/src/components/collections.component.ts index 8e55f5e2..284b97db 100644 --- a/angular/src/components/collections.component.ts +++ b/angular/src/components/collections.component.ts @@ -5,12 +5,10 @@ import { CollectionService } from "jslib-common/abstractions/collection.service" import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - +import { Cipher } from "jslib-common/models/domain/cipher"; import { CipherView } from "jslib-common/models/view/cipherView"; import { CollectionView } from "jslib-common/models/view/collectionView"; -import { Cipher } from "jslib-common/models/domain/cipher"; - @Directive() export class CollectionsComponent implements OnInit { @Input() cipherId: string; diff --git a/angular/src/components/export.component.ts b/angular/src/components/export.component.ts index 17a751fc..8f892045 100644 --- a/angular/src/components/export.component.ts +++ b/angular/src/components/export.component.ts @@ -9,7 +9,6 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; import { UserVerificationService } from "jslib-common/abstractions/userVerification.service"; - import { EventType } from "jslib-common/enums/eventType"; import { PolicyType } from "jslib-common/enums/policyType"; @@ -18,7 +17,7 @@ export class ExportComponent implements OnInit { @Output() onSaved = new EventEmitter(); formPromise: Promise; - disabledByPolicy: boolean = false; + disabledByPolicy = false; exportForm = this.formBuilder.group({ format: ["json"], diff --git a/angular/src/components/folder-add-edit.component.ts b/angular/src/components/folder-add-edit.component.ts index a3f0707b..ef1fa111 100644 --- a/angular/src/components/folder-add-edit.component.ts +++ b/angular/src/components/folder-add-edit.component.ts @@ -4,7 +4,6 @@ import { FolderService } from "jslib-common/abstractions/folder.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { FolderView } from "jslib-common/models/view/folderView"; @Directive() @@ -13,7 +12,7 @@ export class FolderAddEditComponent implements OnInit { @Output() onSavedFolder = new EventEmitter(); @Output() onDeletedFolder = new EventEmitter(); - editMode: boolean = false; + editMode = false; folder: FolderView = new FolderView(); title: string; formPromise: Promise; diff --git a/angular/src/components/groupings.component.ts b/angular/src/components/groupings.component.ts index 4176e291..aa5a743f 100644 --- a/angular/src/components/groupings.component.ts +++ b/angular/src/components/groupings.component.ts @@ -1,15 +1,12 @@ import { Directive, EventEmitter, Input, Output } from "@angular/core"; -import { CipherType } from "jslib-common/enums/cipherType"; - -import { CollectionView } from "jslib-common/models/view/collectionView"; -import { FolderView } from "jslib-common/models/view/folderView"; - -import { TreeNode } from "jslib-common/models/domain/treeNode"; - import { CollectionService } from "jslib-common/abstractions/collection.service"; import { FolderService } from "jslib-common/abstractions/folder.service"; import { StateService } from "jslib-common/abstractions/state.service"; +import { CipherType } from "jslib-common/enums/cipherType"; +import { TreeNode } from "jslib-common/models/domain/treeNode"; +import { CollectionView } from "jslib-common/models/view/collectionView"; +import { FolderView } from "jslib-common/models/view/folderView"; @Directive() export class GroupingsComponent { @@ -31,13 +28,13 @@ export class GroupingsComponent { nestedFolders: TreeNode[]; collections: CollectionView[]; nestedCollections: TreeNode[]; - loaded: boolean = false; + loaded = false; cipherType = CipherType; - selectedAll: boolean = false; - selectedFavorites: boolean = false; - selectedTrash: boolean = false; + selectedAll = false; + selectedFavorites = false; + selectedTrash = false; selectedType: CipherType = null; - selectedFolder: boolean = false; + selectedFolder = false; selectedFolderId: string = null; selectedCollectionId: string = null; diff --git a/angular/src/components/hint.component.ts b/angular/src/components/hint.component.ts index 9a3d7b2f..6ee007e7 100644 --- a/angular/src/components/hint.component.ts +++ b/angular/src/components/hint.component.ts @@ -1,14 +1,13 @@ import { Router } from "@angular/router"; -import { PasswordHintRequest } from "jslib-common/models/request/passwordHintRequest"; - import { ApiService } from "jslib-common/abstractions/api.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; +import { PasswordHintRequest } from "jslib-common/models/request/passwordHintRequest"; export class HintComponent { - email: string = ""; + email = ""; formPromise: Promise; protected successRoute = "login"; diff --git a/angular/src/components/icon.component.ts b/angular/src/components/icon.component.ts index c5704f27..9cb8e907 100644 --- a/angular/src/components/icon.component.ts +++ b/angular/src/components/icon.component.ts @@ -1,13 +1,10 @@ import { Component, Input, OnChanges } from "@angular/core"; -import { CipherType } from "jslib-common/enums/cipherType"; - -import { CipherView } from "jslib-common/models/view/cipherView"; - import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { StateService } from "jslib-common/abstractions/state.service"; - +import { CipherType } from "jslib-common/enums/cipherType"; import { Utils } from "jslib-common/misc/utils"; +import { CipherView } from "jslib-common/models/view/cipherView"; /** * Provides a mapping from supported card brands to diff --git a/angular/src/components/lock.component.ts b/angular/src/components/lock.component.ts index 2f4e639a..11ddba31 100644 --- a/angular/src/components/lock.component.ts +++ b/angular/src/components/lock.component.ts @@ -12,32 +12,28 @@ import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service"; - -import { EncString } from "jslib-common/models/domain/encString"; -import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; - -import { SecretVerificationRequest } from "jslib-common/models/request/secretVerificationRequest"; - -import { Utils } from "jslib-common/misc/utils"; - import { HashPurpose } from "jslib-common/enums/hashPurpose"; import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions"; +import { Utils } from "jslib-common/misc/utils"; +import { EncString } from "jslib-common/models/domain/encString"; +import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; +import { SecretVerificationRequest } from "jslib-common/models/request/secretVerificationRequest"; @Directive() export class LockComponent implements OnInit { - masterPassword: string = ""; - pin: string = ""; - showPassword: boolean = false; + masterPassword = ""; + pin = ""; + showPassword = false; email: string; - pinLock: boolean = false; - webVaultHostname: string = ""; + pinLock = false; + webVaultHostname = ""; formPromise: Promise; supportsBiometric: boolean; biometricLock: boolean; biometricText: string; hideInput: boolean; - protected successRoute: string = "vault"; + protected successRoute = "vault"; protected onSuccessfulSubmit: () => Promise; private invalidPinAttempts = 0; @@ -61,7 +57,7 @@ export class LockComponent implements OnInit { async ngOnInit() { // Load the first and observe updates await this.load(); - this.stateService.activeAccount.subscribe(async (_userId) => { + this.stateService.activeAccount.subscribe(async () => { await this.load(); }); } diff --git a/angular/src/components/login.component.ts b/angular/src/components/login.component.ts index f7192671..5d3f7cff 100644 --- a/angular/src/components/login.component.ts +++ b/angular/src/components/login.component.ts @@ -1,12 +1,7 @@ import { Directive, Input, NgZone, OnInit } from "@angular/core"; - import { Router } from "@angular/router"; - import { take } from "rxjs/operators"; -import { AuthResult } from "jslib-common/models/domain/authResult"; -import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; - import { AuthService } from "jslib-common/abstractions/auth.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; @@ -15,18 +10,19 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Utils } from "jslib-common/misc/utils"; +import { AuthResult } from "jslib-common/models/domain/authResult"; +import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; import { CaptchaProtectedComponent } from "./captchaProtected.component"; @Directive() export class LoginComponent extends CaptchaProtectedComponent implements OnInit { - @Input() email: string = ""; + @Input() email = ""; @Input() rememberEmail = true; - masterPassword: string = ""; - showPassword: boolean = false; + masterPassword = ""; + showPassword = false; formPromise: Promise; onSuccessfulLogin: () => Promise; onSuccessfulLoginNavigate: () => Promise; @@ -36,7 +32,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit protected twoFactorRoute = "2fa"; protected successRoute = "vault"; protected forcePasswordResetRoute = "update-temp-password"; - protected alwaysRememberEmail: boolean = false; + protected alwaysRememberEmail = false; constructor( protected authService: AuthService, diff --git a/angular/src/components/modal/dynamic-modal.component.ts b/angular/src/components/modal/dynamic-modal.component.ts index 4d529f34..46ad38c0 100644 --- a/angular/src/components/modal/dynamic-modal.component.ts +++ b/angular/src/components/modal/dynamic-modal.component.ts @@ -1,3 +1,4 @@ +import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from "@angular/cdk/a11y"; import { AfterViewInit, ChangeDetectorRef, @@ -10,8 +11,6 @@ import { ViewContainerRef, } from "@angular/core"; -import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from "@angular/cdk/a11y"; - import { ModalService } from "../../services/modal.service"; import { ModalRef } from "./modal.ref"; diff --git a/angular/src/components/password-generator-history.component.ts b/angular/src/components/password-generator-history.component.ts index 00f73a9f..15e6c7e4 100644 --- a/angular/src/components/password-generator-history.component.ts +++ b/angular/src/components/password-generator-history.component.ts @@ -3,7 +3,6 @@ import { Directive, OnInit } from "@angular/core"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { GeneratedPasswordHistory } from "jslib-common/models/domain/generatedPasswordHistory"; @Directive() diff --git a/angular/src/components/password-generator.component.ts b/angular/src/components/password-generator.component.ts index b46cda43..77d1341b 100644 --- a/angular/src/components/password-generator.component.ts +++ b/angular/src/components/password-generator.component.ts @@ -3,17 +3,16 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { PasswordGeneratorPolicyOptions } from "jslib-common/models/domain/passwordGeneratorPolicyOptions"; @Directive() export class PasswordGeneratorComponent implements OnInit { - @Input() showSelect: boolean = false; + @Input() showSelect = false; @Output() onSelected = new EventEmitter(); passTypeOptions: any[]; options: any = {}; - password: string = "-"; + password = "-"; showOptions = false; avoidAmbiguous = false; enforcedPolicyOptions: PasswordGeneratorPolicyOptions; @@ -50,7 +49,7 @@ export class PasswordGeneratorComponent implements OnInit { this.password = await this.passwordGenerationService.generatePassword(this.options); } - async saveOptions(regenerate: boolean = true) { + async saveOptions(regenerate = true) { this.normalizeOptions(); await this.passwordGenerationService.saveOptions(this.options); diff --git a/angular/src/components/password-history.component.ts b/angular/src/components/password-history.component.ts index d5d83b1c..94eb2f7c 100644 --- a/angular/src/components/password-history.component.ts +++ b/angular/src/components/password-history.component.ts @@ -3,7 +3,6 @@ import { Directive, OnInit } from "@angular/core"; import { CipherService } from "jslib-common/abstractions/cipher.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { PasswordHistoryView } from "jslib-common/models/view/passwordHistoryView"; @Directive() diff --git a/angular/src/components/password-reprompt.component.ts b/angular/src/components/password-reprompt.component.ts index f547aace..1220f555 100644 --- a/angular/src/components/password-reprompt.component.ts +++ b/angular/src/components/password-reprompt.component.ts @@ -3,6 +3,7 @@ import { Directive } from "@angular/core"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; + import { ModalRef } from "./modal/modal.ref"; @Directive() diff --git a/angular/src/components/premium.component.ts b/angular/src/components/premium.component.ts index 62e5d8f1..efad4986 100644 --- a/angular/src/components/premium.component.ts +++ b/angular/src/components/premium.component.ts @@ -8,8 +8,8 @@ import { StateService } from "jslib-common/abstractions/state.service"; @Directive() export class PremiumComponent implements OnInit { - isPremium: boolean = false; - price: number = 10; + isPremium = false; + price = 10; refreshPromise: Promise; constructor( diff --git a/angular/src/components/register.component.ts b/angular/src/components/register.component.ts index 16ccb6ea..f66800c9 100644 --- a/angular/src/components/register.component.ts +++ b/angular/src/components/register.component.ts @@ -1,10 +1,6 @@ import { Directive, OnInit } from "@angular/core"; import { Router } from "@angular/router"; -import { KeysRequest } from "jslib-common/models/request/keysRequest"; -import { ReferenceEventRequest } from "jslib-common/models/request/referenceEventRequest"; -import { RegisterRequest } from "jslib-common/models/request/registerRequest"; - import { ApiService } from "jslib-common/abstractions/api.service"; import { AuthService } from "jslib-common/abstractions/auth.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; @@ -14,24 +10,26 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { KdfType } from "jslib-common/enums/kdfType"; +import { KeysRequest } from "jslib-common/models/request/keysRequest"; +import { ReferenceEventRequest } from "jslib-common/models/request/referenceEventRequest"; +import { RegisterRequest } from "jslib-common/models/request/registerRequest"; import { CaptchaProtectedComponent } from "./captchaProtected.component"; @Directive() export class RegisterComponent extends CaptchaProtectedComponent implements OnInit { - name: string = ""; - email: string = ""; - masterPassword: string = ""; - confirmMasterPassword: string = ""; - hint: string = ""; - showPassword: boolean = false; + name = ""; + email = ""; + masterPassword = ""; + confirmMasterPassword = ""; + hint = ""; + showPassword = false; formPromise: Promise; masterPasswordScore: number; referenceData: ReferenceEventRequest; showTerms = true; - acceptPolicies: boolean = false; + acceptPolicies = false; protected successRoute = "login"; private masterPasswordStrengthTimeout: any; diff --git a/angular/src/components/remove-password.component.ts b/angular/src/components/remove-password.component.ts index 0359ad35..bce481e5 100644 --- a/angular/src/components/remove-password.component.ts +++ b/angular/src/components/remove-password.component.ts @@ -7,16 +7,15 @@ import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.serv import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { SyncService } from "jslib-common/abstractions/sync.service"; - import { Organization } from "jslib-common/models/domain/organization"; @Directive() export class RemovePasswordComponent implements OnInit { actionPromise: Promise; - continuing: boolean = false; - leaving: boolean = false; + continuing = false; + leaving = false; - loading: boolean = true; + loading = true; organization: Organization; email: string; diff --git a/angular/src/components/send/add-edit.component.ts b/angular/src/components/send/add-edit.component.ts index 3573260c..382adf35 100644 --- a/angular/src/components/send/add-edit.component.ts +++ b/angular/src/components/send/add-edit.component.ts @@ -1,9 +1,6 @@ import { DatePipe } from "@angular/common"; import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; -import { PolicyType } from "jslib-common/enums/policyType"; -import { SendType } from "jslib-common/enums/sendType"; - import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; @@ -12,14 +9,14 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { SendService } from "jslib-common/abstractions/send.service"; import { StateService } from "jslib-common/abstractions/state.service"; - +import { PolicyType } from "jslib-common/enums/policyType"; +import { SendType } from "jslib-common/enums/sendType"; +import { EncArrayBuffer } from "jslib-common/models/domain/encArrayBuffer"; +import { Send } from "jslib-common/models/domain/send"; import { SendFileView } from "jslib-common/models/view/sendFileView"; import { SendTextView } from "jslib-common/models/view/sendTextView"; import { SendView } from "jslib-common/models/view/sendView"; -import { EncArrayBuffer } from "jslib-common/models/domain/encArrayBuffer"; -import { Send } from "jslib-common/models/domain/send"; - @Directive() export class AddEditComponent implements OnInit { @Input() sendId: string; diff --git a/angular/src/components/send/efflux-dates.component.ts b/angular/src/components/send/efflux-dates.component.ts index 5f3aae13..15aec8a0 100644 --- a/angular/src/components/send/efflux-dates.component.ts +++ b/angular/src/components/send/efflux-dates.component.ts @@ -133,12 +133,13 @@ export class EffluxDatesComponent implements OnInit { default: return this.defaultDeletionDateTime.value; } - default: + default: { const now = new Date(); const miliseconds = now.setTime( now.getTime() + (this.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000 ); return new Date(miliseconds).toString(); + } } } @@ -163,12 +164,13 @@ export class EffluxDatesComponent implements OnInit { } return this.defaultExpirationDateTime.value; } - default: + default: { const now = new Date(); const miliseconds = now.setTime( now.getTime() + (this.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000 ); return new Date(miliseconds).toString(); + } } } // diff --git a/angular/src/components/send/send.component.ts b/angular/src/components/send/send.component.ts index 20b2c095..63831dcb 100644 --- a/angular/src/components/send/send.component.ts +++ b/angular/src/components/send/send.component.ts @@ -1,10 +1,5 @@ import { Directive, NgZone, OnInit } from "@angular/core"; -import { PolicyType } from "jslib-common/enums/policyType"; -import { SendType } from "jslib-common/enums/sendType"; - -import { SendView } from "jslib-common/models/view/sendView"; - import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; @@ -12,6 +7,9 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { SearchService } from "jslib-common/abstractions/search.service"; import { SendService } from "jslib-common/abstractions/send.service"; +import { PolicyType } from "jslib-common/enums/policyType"; +import { SendType } from "jslib-common/enums/sendType"; +import { SendView } from "jslib-common/models/view/sendView"; @Directive() export class SendComponent implements OnInit { @@ -20,7 +18,7 @@ export class SendComponent implements OnInit { loaded = false; loading = true; refreshing = false; - expired: boolean = false; + expired = false; type: SendType = null; sends: SendView[] = []; filteredSends: SendView[] = []; diff --git a/angular/src/components/set-password.component.ts b/angular/src/components/set-password.component.ts index 89f6e520..d87dffee 100644 --- a/angular/src/components/set-password.component.ts +++ b/angular/src/components/set-password.component.ts @@ -1,6 +1,5 @@ import { Directive } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; - import { first } from "rxjs/operators"; import { ApiService } from "jslib-common/abstractions/api.service"; @@ -12,26 +11,22 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { SyncService } from "jslib-common/abstractions/sync.service"; - +import { HashPurpose } from "jslib-common/enums/hashPurpose"; +import { KdfType } from "jslib-common/enums/kdfType"; +import { Utils } from "jslib-common/misc/utils"; import { EncString } from "jslib-common/models/domain/encString"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; - import { KeysRequest } from "jslib-common/models/request/keysRequest"; import { OrganizationUserResetPasswordEnrollmentRequest } from "jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest"; import { SetPasswordRequest } from "jslib-common/models/request/setPasswordRequest"; import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; -import { HashPurpose } from "jslib-common/enums/hashPurpose"; -import { KdfType } from "jslib-common/enums/kdfType"; - -import { Utils } from "jslib-common/misc/utils"; - @Directive() export class SetPasswordComponent extends BaseChangePasswordComponent { - syncLoading: boolean = true; - showPassword: boolean = false; - hint: string = ""; + syncLoading = true; + showPassword = false; + hint = ""; identifier: string = null; orgId: string; resetPasswordAutoEnroll = false; diff --git a/angular/src/components/set-pin.component.ts b/angular/src/components/set-pin.component.ts index bc1e804e..dd10e99d 100644 --- a/angular/src/components/set-pin.component.ts +++ b/angular/src/components/set-pin.component.ts @@ -3,7 +3,6 @@ import { Directive, OnInit } from "@angular/core"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Utils } from "jslib-common/misc/utils"; import { ModalRef } from "./modal/modal.ref"; diff --git a/angular/src/components/settings/vault-timeout-input.component.ts b/angular/src/components/settings/vault-timeout-input.component.ts index 2f63f97f..f2fe6d52 100644 --- a/angular/src/components/settings/vault-timeout-input.component.ts +++ b/angular/src/components/settings/vault-timeout-input.component.ts @@ -9,7 +9,6 @@ import { import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PolicyService } from "jslib-common/abstractions/policy.service"; - import { PolicyType } from "jslib-common/enums/policyType"; import { Policy } from "jslib-common/models/domain/policy"; @@ -120,11 +119,13 @@ export class VaultTimeoutInputComponent implements ControlValueAccessor, Validat this.onChange = onChange; } - // tslint:disable-next-line - registerOnTouched(onTouched: any): void {} + registerOnTouched(onTouched: any): void { + // Empty + } - // tslint:disable-next-line - setDisabledState?(isDisabled: boolean): void {} + setDisabledState?(isDisabled: boolean): void { + // Empty + } validate(control: AbstractControl): ValidationErrors { if (this.vaultTimeoutPolicy && this.vaultTimeoutPolicy?.data?.minutes < control.value) { diff --git a/angular/src/components/share.component.ts b/angular/src/components/share.component.ts index 6a13e0b2..0b1b3577 100644 --- a/angular/src/components/share.component.ts +++ b/angular/src/components/share.component.ts @@ -1,20 +1,17 @@ import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core"; -import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType"; - import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CollectionService } from "jslib-common/abstractions/collection.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { OrganizationService } from "jslib-common/abstractions/organization.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - +import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType"; +import { Utils } from "jslib-common/misc/utils"; import { Organization } from "jslib-common/models/domain/organization"; import { CipherView } from "jslib-common/models/view/cipherView"; import { CollectionView } from "jslib-common/models/view/collectionView"; -import { Utils } from "jslib-common/misc/utils"; - @Directive() export class ShareComponent implements OnInit { @Input() cipherId: string; diff --git a/angular/src/components/sso.component.ts b/angular/src/components/sso.component.ts index 06d0d037..8ca584be 100644 --- a/angular/src/components/sso.component.ts +++ b/angular/src/components/sso.component.ts @@ -1,6 +1,5 @@ import { Directive } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; - import { first } from "rxjs/operators"; import { ApiService } from "jslib-common/abstractions/api.service"; @@ -12,9 +11,7 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Utils } from "jslib-common/misc/utils"; - import { AuthResult } from "jslib-common/models/domain/authResult"; import { SsoLogInCredentials } from "jslib-common/models/domain/logInCredentials"; diff --git a/angular/src/components/two-factor-options.component.ts b/angular/src/components/two-factor-options.component.ts index 48dd7df6..a2aabc71 100644 --- a/angular/src/components/two-factor-options.component.ts +++ b/angular/src/components/two-factor-options.component.ts @@ -1,12 +1,10 @@ import { Directive, EventEmitter, OnInit, Output } from "@angular/core"; import { Router } from "@angular/router"; -import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; - -import { AuthService } from "jslib-common/abstractions/auth.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; +import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; @Directive() export class TwoFactorOptionsComponent implements OnInit { diff --git a/angular/src/components/two-factor.component.ts b/angular/src/components/two-factor.component.ts index 16a5873a..d6b8812c 100644 --- a/angular/src/components/two-factor.component.ts +++ b/angular/src/components/two-factor.component.ts @@ -1,15 +1,8 @@ import { Directive, OnDestroy, OnInit } from "@angular/core"; - import { ActivatedRoute, Router } from "@angular/router"; - +import * as DuoWebSDK from "duo_web_sdk"; import { first } from "rxjs/operators"; -import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; - -import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; - -import { AuthResult } from "jslib-common/models/domain/authResult"; - import { ApiService } from "jslib-common/abstractions/api.service"; import { AuthService } from "jslib-common/abstractions/auth.service"; import { EnvironmentService } from "jslib-common/abstractions/environment.service"; @@ -17,25 +10,25 @@ import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - -import { TwoFactorProviders } from "jslib-common/services/twoFactor.service"; - -import * as DuoWebSDK from "duo_web_sdk"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; +import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; import { WebAuthnIFrame } from "jslib-common/misc/webauthn_iframe"; +import { AuthResult } from "jslib-common/models/domain/authResult"; +import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; +import { TwoFactorProviders } from "jslib-common/services/twoFactor.service"; @Directive() export class TwoFactorComponent implements OnInit, OnDestroy { - token: string = ""; - remember: boolean = false; - webAuthnReady: boolean = false; - webAuthnNewTab: boolean = false; + token = ""; + remember = false; + webAuthnReady = false; + webAuthnNewTab = false; providers = TwoFactorProviders; providerType = TwoFactorProviderType; selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator; - webAuthnSupported: boolean = false; + webAuthnSupported = false; webAuthn: WebAuthnIFrame = null; - title: string = ""; + title = ""; twoFactorEmail: string = null; formPromise: Promise; emailPromise: Promise; diff --git a/angular/src/components/update-password.component.ts b/angular/src/components/update-password.component.ts index 909831c5..ce740b96 100644 --- a/angular/src/components/update-password.component.ts +++ b/angular/src/components/update-password.component.ts @@ -11,24 +11,21 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { UserVerificationService } from "jslib-common/abstractions/userVerification.service"; - -import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; - +import { VerificationType } from "jslib-common/enums/verificationType"; import { EncString } from "jslib-common/models/domain/encString"; import { MasterPasswordPolicyOptions } from "jslib-common/models/domain/masterPasswordPolicyOptions"; +import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; import { PasswordRequest } from "jslib-common/models/request/passwordRequest"; - -import { VerificationType } from "jslib-common/enums/verificationType"; import { Verification } from "jslib-common/types/verification"; -import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; +import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; @Directive() export class UpdatePasswordComponent extends BaseChangePasswordComponent { hint: string; key: string; enforcedPolicyOptions: MasterPasswordPolicyOptions; - showPassword: boolean = false; + showPassword = false; currentMasterPassword: string; onSuccessfulChangePassword: () => Promise; diff --git a/angular/src/components/update-temp-password.component.ts b/angular/src/components/update-temp-password.component.ts index bff997e7..70f75cb8 100644 --- a/angular/src/components/update-temp-password.component.ts +++ b/angular/src/components/update-temp-password.component.ts @@ -10,21 +10,19 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { SyncService } from "jslib-common/abstractions/sync.service"; - -import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; - import { EncString } from "jslib-common/models/domain/encString"; import { MasterPasswordPolicyOptions } from "jslib-common/models/domain/masterPasswordPolicyOptions"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; - import { UpdateTempPasswordRequest } from "jslib-common/models/request/updateTempPasswordRequest"; +import { ChangePasswordComponent as BaseChangePasswordComponent } from "./change-password.component"; + @Directive() export class UpdateTempPasswordComponent extends BaseChangePasswordComponent { hint: string; key: string; enforcedPolicyOptions: MasterPasswordPolicyOptions; - showPassword: boolean = false; + showPassword = false; onSuccessfulChangePassword: () => Promise; diff --git a/angular/src/components/verify-master-password.component.ts b/angular/src/components/verify-master-password.component.ts index 43b64eb2..45a61581 100644 --- a/angular/src/components/verify-master-password.component.ts +++ b/angular/src/components/verify-master-password.component.ts @@ -4,9 +4,7 @@ import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from "@angular/f import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service"; import { UserVerificationService } from "jslib-common/abstractions/userVerification.service"; - import { VerificationType } from "jslib-common/enums/verificationType"; - import { Verification } from "jslib-common/types/verification"; @Component({ @@ -26,9 +24,9 @@ import { Verification } from "jslib-common/types/verification"; ], }) export class VerifyMasterPasswordComponent implements ControlValueAccessor, OnInit { - usesKeyConnector: boolean = false; - disableRequestOTP: boolean = false; - sentCode: boolean = false; + usesKeyConnector = false; + disableRequestOTP = false; + sentCode = false; secret = new FormControl(""); diff --git a/angular/src/components/view-custom-fields.component.ts b/angular/src/components/view-custom-fields.component.ts index c955eeb8..0f67aa02 100644 --- a/angular/src/components/view-custom-fields.component.ts +++ b/angular/src/components/view-custom-fields.component.ts @@ -1,10 +1,8 @@ import { Directive, Input } from "@angular/core"; +import { EventService } from "jslib-common/abstractions/event.service"; import { EventType } from "jslib-common/enums/eventType"; import { FieldType } from "jslib-common/enums/fieldType"; - -import { EventService } from "jslib-common/abstractions/event.service"; - import { CipherView } from "jslib-common/models/view/cipherView"; import { FieldView } from "jslib-common/models/view/fieldView"; diff --git a/angular/src/components/view.component.ts b/angular/src/components/view.component.ts index 9e2ea818..c92e0b0c 100644 --- a/angular/src/components/view.component.ts +++ b/angular/src/components/view.component.ts @@ -9,11 +9,6 @@ import { Output, } from "@angular/core"; -import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType"; -import { CipherType } from "jslib-common/enums/cipherType"; -import { EventType } from "jslib-common/enums/eventType"; -import { FieldType } from "jslib-common/enums/fieldType"; - import { ApiService } from "jslib-common/abstractions/api.service"; import { AuditService } from "jslib-common/abstractions/audit.service"; import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service"; @@ -27,9 +22,11 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { StateService } from "jslib-common/abstractions/state.service"; import { TokenService } from "jslib-common/abstractions/token.service"; import { TotpService } from "jslib-common/abstractions/totp.service"; - +import { CipherRepromptType } from "jslib-common/enums/cipherRepromptType"; +import { CipherType } from "jslib-common/enums/cipherType"; +import { EventType } from "jslib-common/enums/eventType"; +import { FieldType } from "jslib-common/enums/fieldType"; import { ErrorResponse } from "jslib-common/models/response/errorResponse"; - import { AttachmentView } from "jslib-common/models/view/attachmentView"; import { CipherView } from "jslib-common/models/view/cipherView"; import { LoginUriView } from "jslib-common/models/view/loginUriView"; @@ -60,7 +57,7 @@ export class ViewComponent implements OnDestroy, OnInit { private totpInterval: any; private previousCipherId: string; - private passwordReprompted: boolean = false; + private passwordReprompted = false; constructor( protected cipherService: CipherService, diff --git a/angular/src/directives/api-action.directive.ts b/angular/src/directives/api-action.directive.ts index 64f209c9..8fb2574b 100644 --- a/angular/src/directives/api-action.directive.ts +++ b/angular/src/directives/api-action.directive.ts @@ -1,6 +1,6 @@ import { Directive, ElementRef, Input, OnChanges } from "@angular/core"; -import { LogService } from "jslib-common/abstractions/log.service"; +import { LogService } from "jslib-common/abstractions/log.service"; import { ErrorResponse } from "jslib-common/models/response/errorResponse"; import { ValidationService } from "../services/validation.service"; diff --git a/angular/src/directives/autofocus.directive.ts b/angular/src/directives/autofocus.directive.ts index a90a8075..5c5997fa 100644 --- a/angular/src/directives/autofocus.directive.ts +++ b/angular/src/directives/autofocus.directive.ts @@ -1,5 +1,4 @@ import { Directive, ElementRef, Input, NgZone } from "@angular/core"; - import { take } from "rxjs/operators"; import { Utils } from "jslib-common/misc/utils"; diff --git a/angular/src/directives/box-row.directive.ts b/angular/src/directives/box-row.directive.ts index 049f0434..9ae94314 100644 --- a/angular/src/directives/box-row.directive.ts +++ b/angular/src/directives/box-row.directive.ts @@ -7,7 +7,7 @@ export class BoxRowDirective implements OnInit { el: HTMLElement = null; formEls: Element[]; - constructor(private elRef: ElementRef) { + constructor(elRef: ElementRef) { this.el = elRef.nativeElement; } @@ -18,7 +18,7 @@ export class BoxRowDirective implements OnInit { this.formEls.forEach((formEl) => { formEl.addEventListener( "focus", - (event: Event) => { + () => { this.el.classList.add("active"); }, false @@ -26,7 +26,7 @@ export class BoxRowDirective implements OnInit { formEl.addEventListener( "blur", - (event: Event) => { + () => { this.el.classList.remove("active"); }, false diff --git a/angular/src/directives/true-false-value.directive.ts b/angular/src/directives/true-false-value.directive.ts index 6b553c61..9e35e77e 100644 --- a/angular/src/directives/true-false-value.directive.ts +++ b/angular/src/directives/true-false-value.directive.ts @@ -1,5 +1,5 @@ import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from "@angular/core"; -import { ControlValueAccessor, NgControl, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; // ref: https://juristr.com/blog/2018/02/ng-true-value-directive/ @Directive({ diff --git a/angular/src/pipes/color-password.pipe.ts b/angular/src/pipes/color-password.pipe.ts index f3a87d12..c888c16d 100644 --- a/angular/src/pipes/color-password.pipe.ts +++ b/angular/src/pipes/color-password.pipe.ts @@ -1,4 +1,5 @@ import { Pipe, PipeTransform } from "@angular/core"; + import { Utils } from "jslib-common/misc/utils"; /* diff --git a/angular/src/pipes/search-ciphers.pipe.ts b/angular/src/pipes/search-ciphers.pipe.ts index 0842954c..e8bdd13e 100644 --- a/angular/src/pipes/search-ciphers.pipe.ts +++ b/angular/src/pipes/search-ciphers.pipe.ts @@ -6,7 +6,7 @@ import { CipherView } from "jslib-common/models/view/cipherView"; name: "searchCiphers", }) export class SearchCiphersPipe implements PipeTransform { - transform(ciphers: CipherView[], searchText: string, deleted: boolean = false): CipherView[] { + transform(ciphers: CipherView[], searchText: string, deleted = false): CipherView[] { if (ciphers == null || ciphers.length === 0) { return []; } diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 6770ce14..54765078 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -1,37 +1,5 @@ import { Injector, LOCALE_ID, NgModule } from "@angular/core"; -import { ApiService } from "jslib-common/services/api.service"; -import { AppIdService } from "jslib-common/services/appId.service"; -import { AuditService } from "jslib-common/services/audit.service"; -import { AuthService } from "jslib-common/services/auth.service"; -import { CipherService } from "jslib-common/services/cipher.service"; -import { CollectionService } from "jslib-common/services/collection.service"; -import { ConsoleLogService } from "jslib-common/services/consoleLog.service"; -import { CryptoService } from "jslib-common/services/crypto.service"; -import { EnvironmentService } from "jslib-common/services/environment.service"; -import { EventService } from "jslib-common/services/event.service"; -import { ExportService } from "jslib-common/services/export.service"; -import { FileUploadService } from "jslib-common/services/fileUpload.service"; -import { FolderService } from "jslib-common/services/folder.service"; -import { KeyConnectorService } from "jslib-common/services/keyConnector.service"; -import { NotificationsService } from "jslib-common/services/notifications.service"; -import { OrganizationService } from "jslib-common/services/organization.service"; -import { PasswordGenerationService } from "jslib-common/services/passwordGeneration.service"; -import { PolicyService } from "jslib-common/services/policy.service"; -import { ProviderService } from "jslib-common/services/provider.service"; -import { SearchService } from "jslib-common/services/search.service"; -import { SendService } from "jslib-common/services/send.service"; -import { SettingsService } from "jslib-common/services/settings.service"; -import { StateService } from "jslib-common/services/state.service"; -import { StateMigrationService } from "jslib-common/services/stateMigration.service"; -import { SyncService } from "jslib-common/services/sync.service"; -import { TokenService } from "jslib-common/services/token.service"; -import { TotpService } from "jslib-common/services/totp.service"; -import { TwoFactorService } from "jslib-common/services/twoFactor.service"; -import { UserVerificationService } from "jslib-common/services/userVerification.service"; -import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service"; -import { WebCryptoFunctionService } from "jslib-common/services/webCryptoFunction.service"; - import { ApiService as ApiServiceAbstraction } from "jslib-common/abstractions/api.service"; import { AppIdService as AppIdServiceAbstraction } from "jslib-common/abstractions/appId.service"; import { AuditService as AuditServiceAbstraction } from "jslib-common/abstractions/audit.service"; @@ -69,6 +37,40 @@ import { TotpService as TotpServiceAbstraction } from "jslib-common/abstractions import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service"; import { UserVerificationService as UserVerificationServiceAbstraction } from "jslib-common/abstractions/userVerification.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service"; +import { StateFactory } from "jslib-common/factories/stateFactory"; +import { Account } from "jslib-common/models/domain/account"; +import { GlobalState } from "jslib-common/models/domain/globalState"; +import { ApiService } from "jslib-common/services/api.service"; +import { AppIdService } from "jslib-common/services/appId.service"; +import { AuditService } from "jslib-common/services/audit.service"; +import { AuthService } from "jslib-common/services/auth.service"; +import { CipherService } from "jslib-common/services/cipher.service"; +import { CollectionService } from "jslib-common/services/collection.service"; +import { ConsoleLogService } from "jslib-common/services/consoleLog.service"; +import { CryptoService } from "jslib-common/services/crypto.service"; +import { EnvironmentService } from "jslib-common/services/environment.service"; +import { EventService } from "jslib-common/services/event.service"; +import { ExportService } from "jslib-common/services/export.service"; +import { FileUploadService } from "jslib-common/services/fileUpload.service"; +import { FolderService } from "jslib-common/services/folder.service"; +import { KeyConnectorService } from "jslib-common/services/keyConnector.service"; +import { NotificationsService } from "jslib-common/services/notifications.service"; +import { OrganizationService } from "jslib-common/services/organization.service"; +import { PasswordGenerationService } from "jslib-common/services/passwordGeneration.service"; +import { PolicyService } from "jslib-common/services/policy.service"; +import { ProviderService } from "jslib-common/services/provider.service"; +import { SearchService } from "jslib-common/services/search.service"; +import { SendService } from "jslib-common/services/send.service"; +import { SettingsService } from "jslib-common/services/settings.service"; +import { StateService } from "jslib-common/services/state.service"; +import { StateMigrationService } from "jslib-common/services/stateMigration.service"; +import { SyncService } from "jslib-common/services/sync.service"; +import { TokenService } from "jslib-common/services/token.service"; +import { TotpService } from "jslib-common/services/totp.service"; +import { TwoFactorService } from "jslib-common/services/twoFactor.service"; +import { UserVerificationService } from "jslib-common/services/userVerification.service"; +import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service"; +import { WebCryptoFunctionService } from "jslib-common/services/webCryptoFunction.service"; import { AuthGuardService } from "./auth-guard.service"; import { BroadcasterService } from "./broadcaster.service"; @@ -78,12 +80,6 @@ import { PasswordRepromptService } from "./passwordReprompt.service"; import { UnauthGuardService } from "./unauth-guard.service"; import { ValidationService } from "./validation.service"; -import { Account } from "jslib-common/models/domain/account"; -import { GlobalState } from "jslib-common/models/domain/globalState"; - -import { GlobalStateFactory } from "jslib-common/factories/globalStateFactory"; -import { StateFactory } from "jslib-common/factories/stateFactory"; - @NgModule({ declarations: [], providers: [ diff --git a/angular/src/services/modal.service.ts b/angular/src/services/modal.service.ts index f487c579..aecc84c6 100644 --- a/angular/src/services/modal.service.ts +++ b/angular/src/services/modal.service.ts @@ -17,7 +17,7 @@ import { ModalRef } from "../components/modal/modal.ref"; export class ModalConfig { data?: D; - allowMultipleModals: boolean = false; + allowMultipleModals = false; } @Injectable() @@ -68,6 +68,7 @@ export class ModalService { return; } + // eslint-disable-next-line const [modalRef, _] = this.openInternal(componentType, config, true); return modalRef; @@ -145,7 +146,7 @@ export class ModalService { el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss="modal"]') ); for (const closeElement of modals) { - closeElement.addEventListener("click", (event) => { + closeElement.addEventListener("click", () => { modalRef.close(); }); } diff --git a/angular/src/services/passwordReprompt.service.ts b/angular/src/services/passwordReprompt.service.ts index 58ae5190..eb86c85d 100644 --- a/angular/src/services/passwordReprompt.service.ts +++ b/angular/src/services/passwordReprompt.service.ts @@ -4,6 +4,7 @@ import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.serv import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "jslib-common/abstractions/passwordReprompt.service"; import { PasswordRepromptComponent } from "../components/password-reprompt.component"; + import { ModalService } from "./modal.service"; @Injectable() diff --git a/angular/src/services/validation.service.ts b/angular/src/services/validation.service.ts index 9cb04b38..865f6458 100644 --- a/angular/src/services/validation.service.ts +++ b/angular/src/services/validation.service.ts @@ -2,7 +2,6 @@ import { Injectable } from "@angular/core"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - import { ErrorResponse } from "jslib-common/models/response/errorResponse"; @Injectable() diff --git a/common/package.json b/common/package.json index 95b2f817..d045ceae 100644 --- a/common/package.json +++ b/common/package.json @@ -15,9 +15,7 @@ "scripts": { "clean": "rimraf dist/**/*", "build": "npm run clean && tsc", - "build:watch": "npm run clean && tsc -watch", - "lint": "tslint 'src/**/*.ts' 'spec/**/*.ts'", - "lint:fix": "tslint 'src/**/*.ts' 'spec/**/*.ts' --fix" + "build:watch": "npm run clean && tsc -watch" }, "devDependencies": { "@types/lunr": "^2.3.3", diff --git a/common/src/abstractions/api.service.ts b/common/src/abstractions/api.service.ts index a23b311b..c9970ce8 100644 --- a/common/src/abstractions/api.service.ts +++ b/common/src/abstractions/api.service.ts @@ -1,9 +1,7 @@ import { PolicyType } from "../enums/policyType"; import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; import { VerifyOTPRequest } from "../models/request/account/verifyOTPRequest"; - import { AttachmentRequest } from "../models/request/attachmentRequest"; - import { BitPayInvoiceRequest } from "../models/request/bitPayInvoiceRequest"; import { CipherBulkDeleteRequest } from "../models/request/cipherBulkDeleteRequest"; import { CipherBulkMoveRequest } from "../models/request/cipherBulkMoveRequest"; @@ -26,6 +24,9 @@ import { EventRequest } from "../models/request/eventRequest"; import { FolderRequest } from "../models/request/folderRequest"; import { GroupRequest } from "../models/request/groupRequest"; import { IapCheckRequest } from "../models/request/iapCheckRequest"; +import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; +import { PasswordTokenRequest } from "../models/request/identityToken/passwordTokenRequest"; +import { SsoTokenRequest } from "../models/request/identityToken/ssoTokenRequest"; import { ImportCiphersRequest } from "../models/request/importCiphersRequest"; import { ImportDirectoryRequest } from "../models/request/importDirectoryRequest"; import { ImportOrganizationCiphersRequest } from "../models/request/importOrganizationCiphersRequest"; @@ -91,11 +92,6 @@ import { UpdateTwoFactorYubioOtpRequest } from "../models/request/updateTwoFacto import { VerifyBankRequest } from "../models/request/verifyBankRequest"; import { VerifyDeleteRecoverRequest } from "../models/request/verifyDeleteRecoverRequest"; import { VerifyEmailRequest } from "../models/request/verifyEmailRequest"; - -import { ApiTokenRequest } from "../models/request/identityToken/apiTokenRequest"; -import { PasswordTokenRequest } from "../models/request/identityToken/passwordTokenRequest"; -import { SsoTokenRequest } from "../models/request/identityToken/ssoTokenRequest"; - import { ApiKeyResponse } from "../models/response/apiKeyResponse"; import { AttachmentResponse } from "../models/response/attachmentResponse"; import { AttachmentUploadDataResponse } from "../models/response/attachmentUploadDataResponse"; @@ -169,7 +165,6 @@ import { } from "../models/response/twoFactorWebAuthnResponse"; import { TwoFactorYubiKeyResponse } from "../models/response/twoFactorYubiKeyResponse"; import { UserKeyResponse } from "../models/response/userKeyResponse"; - import { SendAccessView } from "../models/view/sendAccessView"; export abstract class ApiService { diff --git a/common/src/abstractions/auth.service.ts b/common/src/abstractions/auth.service.ts index ec36acc8..fddf5651 100644 --- a/common/src/abstractions/auth.service.ts +++ b/common/src/abstractions/auth.service.ts @@ -5,7 +5,6 @@ import { SsoLogInCredentials, } from "../models/domain/logInCredentials"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; export abstract class AuthService { @@ -15,7 +14,7 @@ export abstract class AuthService { credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials ) => Promise; logInTwoFactor: (twoFactor: TokenRequestTwoFactor) => Promise; - logOut: (callback: Function) => void; + logOut: (callback: () => void) => void; makePreloginKey: (masterPassword: string, email: string) => Promise; authingWithApiKey: () => boolean; authingWithSso: () => boolean; diff --git a/common/src/abstractions/cipher.service.ts b/common/src/abstractions/cipher.service.ts index c1c1437a..a87a6f0a 100644 --- a/common/src/abstractions/cipher.service.ts +++ b/common/src/abstractions/cipher.service.ts @@ -1,12 +1,9 @@ import { CipherType } from "../enums/cipherType"; import { UriMatchType } from "../enums/uriMatchType"; - import { CipherData } from "../models/data/cipherData"; - import { Cipher } from "../models/domain/cipher"; import { Field } from "../models/domain/field"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { CipherView } from "../models/view/cipherView"; import { FieldView } from "../models/view/fieldView"; diff --git a/common/src/abstractions/collection.service.ts b/common/src/abstractions/collection.service.ts index f5880e47..0673e906 100644 --- a/common/src/abstractions/collection.service.ts +++ b/common/src/abstractions/collection.service.ts @@ -1,8 +1,6 @@ import { CollectionData } from "../models/data/collectionData"; - import { Collection } from "../models/domain/collection"; import { TreeNode } from "../models/domain/treeNode"; - import { CollectionView } from "../models/view/collectionView"; export abstract class CollectionService { diff --git a/common/src/abstractions/crypto.service.ts b/common/src/abstractions/crypto.service.ts index 3397d0d5..bc61ba7e 100644 --- a/common/src/abstractions/crypto.service.ts +++ b/common/src/abstractions/crypto.service.ts @@ -1,14 +1,12 @@ -import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; -import { EncString } from "../models/domain/encString"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - -import { ProfileOrganizationResponse } from "../models/response/profileOrganizationResponse"; -import { ProfileProviderOrganizationResponse } from "../models/response/profileProviderOrganizationResponse"; -import { ProfileProviderResponse } from "../models/response/profileProviderResponse"; - import { HashPurpose } from "../enums/hashPurpose"; import { KdfType } from "../enums/kdfType"; import { KeySuffixOptions } from "../enums/keySuffixOptions"; +import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; +import { EncString } from "../models/domain/encString"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { ProfileOrganizationResponse } from "../models/response/profileOrganizationResponse"; +import { ProfileProviderOrganizationResponse } from "../models/response/profileProviderOrganizationResponse"; +import { ProfileProviderResponse } from "../models/response/profileProviderResponse"; export abstract class CryptoService { setKey: (key: SymmetricCryptoKey) => Promise; diff --git a/common/src/abstractions/folder.service.ts b/common/src/abstractions/folder.service.ts index 139525e0..574cebfc 100644 --- a/common/src/abstractions/folder.service.ts +++ b/common/src/abstractions/folder.service.ts @@ -1,9 +1,7 @@ import { FolderData } from "../models/data/folderData"; - import { Folder } from "../models/domain/folder"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; import { TreeNode } from "../models/domain/treeNode"; - import { FolderView } from "../models/view/folderView"; export abstract class FolderService { diff --git a/common/src/abstractions/keyConnector.service.ts b/common/src/abstractions/keyConnector.service.ts index 5b1ca3a3..b8f3bf7c 100644 --- a/common/src/abstractions/keyConnector.service.ts +++ b/common/src/abstractions/keyConnector.service.ts @@ -1,5 +1,4 @@ import { Organization } from "../models/domain/organization"; - import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; export abstract class KeyConnectorService { diff --git a/common/src/abstractions/organization.service.ts b/common/src/abstractions/organization.service.ts index a878335d..8c252430 100644 --- a/common/src/abstractions/organization.service.ts +++ b/common/src/abstractions/organization.service.ts @@ -1,5 +1,4 @@ import { OrganizationData } from "../models/data/organizationData"; - import { Organization } from "../models/domain/organization"; export abstract class OrganizationService { diff --git a/common/src/abstractions/policy.service.ts b/common/src/abstractions/policy.service.ts index f1f6b4e5..24dcc996 100644 --- a/common/src/abstractions/policy.service.ts +++ b/common/src/abstractions/policy.service.ts @@ -1,14 +1,11 @@ +import { PolicyType } from "../enums/policyType"; import { PolicyData } from "../models/data/policyData"; - import { MasterPasswordPolicyOptions } from "../models/domain/masterPasswordPolicyOptions"; import { Policy } from "../models/domain/policy"; import { ResetPasswordPolicyOptions } from "../models/domain/resetPasswordPolicyOptions"; - import { ListResponse } from "../models/response/listResponse"; import { PolicyResponse } from "../models/response/policyResponse"; -import { PolicyType } from "../enums/policyType"; - export abstract class PolicyService { clearCache: () => void; getAll: (type?: PolicyType, userId?: string) => Promise; diff --git a/common/src/abstractions/provider.service.ts b/common/src/abstractions/provider.service.ts index e3e86a1a..e4746369 100644 --- a/common/src/abstractions/provider.service.ts +++ b/common/src/abstractions/provider.service.ts @@ -1,5 +1,4 @@ import { ProviderData } from "../models/data/providerData"; - import { Provider } from "../models/domain/provider"; export abstract class ProviderService { diff --git a/common/src/abstractions/send.service.ts b/common/src/abstractions/send.service.ts index 37b806f2..3331e41e 100644 --- a/common/src/abstractions/send.service.ts +++ b/common/src/abstractions/send.service.ts @@ -1,9 +1,7 @@ import { SendData } from "../models/data/sendData"; - import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; import { Send } from "../models/domain/send"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { SendView } from "../models/view/sendView"; export abstract class SendService { diff --git a/common/src/abstractions/state.service.ts b/common/src/abstractions/state.service.ts index 49d3e2f6..66f4bada 100644 --- a/common/src/abstractions/state.service.ts +++ b/common/src/abstractions/state.service.ts @@ -3,7 +3,6 @@ import { BehaviorSubject } from "rxjs"; import { KdfType } from "../enums/kdfType"; import { ThemeType } from "../enums/themeType"; import { UriMatchType } from "../enums/uriMatchType"; - import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { EventData } from "../models/data/eventData"; @@ -12,7 +11,6 @@ import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; import { SendData } from "../models/data/sendData"; - import { Account } from "../models/domain/account"; import { EncString } from "../models/domain/encString"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; @@ -21,7 +19,6 @@ import { Policy } from "../models/domain/policy"; import { StorageOptions } from "../models/domain/storageOptions"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; import { WindowState } from "../models/domain/windowState"; - import { CipherView } from "../models/view/cipherView"; import { CollectionView } from "../models/view/collectionView"; import { FolderView } from "../models/view/folderView"; diff --git a/common/src/abstractions/twoFactor.service.ts b/common/src/abstractions/twoFactor.service.ts index 071f6e7e..74f09167 100644 --- a/common/src/abstractions/twoFactor.service.ts +++ b/common/src/abstractions/twoFactor.service.ts @@ -1,5 +1,4 @@ import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; - import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; export interface TwoFactorProviderDetails { diff --git a/common/src/abstractions/userVerification.service.ts b/common/src/abstractions/userVerification.service.ts index 42370ae1..ebd7d1f3 100644 --- a/common/src/abstractions/userVerification.service.ts +++ b/common/src/abstractions/userVerification.service.ts @@ -1,5 +1,4 @@ import { SecretVerificationRequest } from "../models/request/secretVerificationRequest"; - import { Verification } from "../types/verification"; export abstract class UserVerificationService { diff --git a/common/src/factories/stateFactory.ts b/common/src/factories/stateFactory.ts index 4672fa59..203ae672 100644 --- a/common/src/factories/stateFactory.ts +++ b/common/src/factories/stateFactory.ts @@ -1,5 +1,6 @@ import { Account } from "../models/domain/account"; import { GlobalState } from "../models/domain/globalState"; + import { AccountFactory } from "./accountFactory"; import { GlobalStateFactory } from "./globalStateFactory"; diff --git a/common/src/importers/ascendoCsvImporter.ts b/common/src/importers/ascendoCsvImporter.ts index aed1c3ab..75191a1c 100644 --- a/common/src/importers/ascendoCsvImporter.ts +++ b/common/src/importers/ascendoCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class AscendoCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/avastCsvImporter.ts b/common/src/importers/avastCsvImporter.ts index 9629fb2f..9bf10639 100644 --- a/common/src/importers/avastCsvImporter.ts +++ b/common/src/importers/avastCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class AvastCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/avastJsonImporter.ts b/common/src/importers/avastJsonImporter.ts index fe853539..0d424a71 100644 --- a/common/src/importers/avastJsonImporter.ts +++ b/common/src/importers/avastJsonImporter.ts @@ -1,10 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - -import { ImportResult } from "../models/domain/importResult"; - import { CipherType } from "../enums/cipherType"; import { SecureNoteType } from "../enums/secureNoteType"; +import { ImportResult } from "../models/domain/importResult"; + +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class AvastJsonImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/aviraCsvImporter.ts b/common/src/importers/aviraCsvImporter.ts index fa983080..f4c578b0 100644 --- a/common/src/importers/aviraCsvImporter.ts +++ b/common/src/importers/aviraCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class AviraCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/baseImporter.ts b/common/src/importers/baseImporter.ts index 65253c71..f24d1f19 100644 --- a/common/src/importers/baseImporter.ts +++ b/common/src/importers/baseImporter.ts @@ -1,25 +1,18 @@ import * as papa from "papaparse"; import { LogService } from "../abstractions/log.service"; - -import { ImportResult } from "../models/domain/importResult"; - -import { CipherView } from "../models/view/cipherView"; -import { CollectionView } from "../models/view/collectionView"; -import { LoginUriView } from "../models/view/loginUriView"; - -import { Utils } from "../misc/utils"; - -import { FieldView } from "../models/view/fieldView"; -import { FolderView } from "../models/view/folderView"; -import { LoginView } from "../models/view/loginView"; -import { SecureNoteView } from "../models/view/secureNoteView"; - -import { CipherRepromptType } from "../enums/cipherRepromptType"; import { CipherType } from "../enums/cipherType"; import { FieldType } from "../enums/fieldType"; import { SecureNoteType } from "../enums/secureNoteType"; - +import { Utils } from "../misc/utils"; +import { ImportResult } from "../models/domain/importResult"; +import { CipherView } from "../models/view/cipherView"; +import { CollectionView } from "../models/view/collectionView"; +import { FieldView } from "../models/view/fieldView"; +import { FolderView } from "../models/view/folderView"; +import { LoginUriView } from "../models/view/loginUriView"; +import { LoginView } from "../models/view/loginView"; +import { SecureNoteView } from "../models/view/secureNoteView"; import { ConsoleLogService } from "../services/consoleLog.service"; export abstract class BaseImporter { @@ -161,7 +154,6 @@ export abstract class BaseImporter { if (result.errors != null && result.errors.length > 0) { result.errors.forEach((e) => { if (e.row != null) { - // tslint:disable-next-line this.logService.warning("Error parsing row " + e.row + ": " + e.message); } }); diff --git a/common/src/importers/bitwardenCsvImporter.ts b/common/src/importers/bitwardenCsvImporter.ts index b7ec11c3..cc5419c3 100644 --- a/common/src/importers/bitwardenCsvImporter.ts +++ b/common/src/importers/bitwardenCsvImporter.ts @@ -1,19 +1,16 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - -import { ImportResult } from "../models/domain/importResult"; - -import { CipherView } from "../models/view/cipherView"; -import { CollectionView } from "../models/view/collectionView"; -import { FieldView } from "../models/view/fieldView"; -import { FolderView } from "../models/view/folderView"; -import { LoginView } from "../models/view/loginView"; -import { SecureNoteView } from "../models/view/secureNoteView"; - import { CipherRepromptType } from "../enums/cipherRepromptType"; import { CipherType } from "../enums/cipherType"; import { FieldType } from "../enums/fieldType"; import { SecureNoteType } from "../enums/secureNoteType"; +import { ImportResult } from "../models/domain/importResult"; +import { CipherView } from "../models/view/cipherView"; +import { CollectionView } from "../models/view/collectionView"; +import { FieldView } from "../models/view/fieldView"; +import { LoginView } from "../models/view/loginView"; +import { SecureNoteView } from "../models/view/secureNoteView"; + +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class BitwardenCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { @@ -63,7 +60,7 @@ export class BitwardenCsvImporter extends BaseImporter implements Importer { 10 ); } catch (e) { - // tslint:disable-next-line + // eslint-disable-next-line console.error("Unable to parse reprompt value", e); cipher.reprompt = CipherRepromptType.None; } @@ -102,7 +99,7 @@ export class BitwardenCsvImporter extends BaseImporter implements Importer { cipher.secureNote = new SecureNoteView(); cipher.secureNote.type = SecureNoteType.Generic; break; - default: + default: { cipher.type = CipherType.Login; cipher.login = new LoginView(); cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp); @@ -111,6 +108,7 @@ export class BitwardenCsvImporter extends BaseImporter implements Importer { const uris = this.parseSingleRowCsv(value.login_uri || value.uri); cipher.login.uris = this.makeUriArray(uris); break; + } } result.ciphers.push(cipher); diff --git a/common/src/importers/bitwardenJsonImporter.ts b/common/src/importers/bitwardenJsonImporter.ts index bef77860..52a4156b 100644 --- a/common/src/importers/bitwardenJsonImporter.ts +++ b/common/src/importers/bitwardenJsonImporter.ts @@ -1,15 +1,13 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CryptoService } from "../abstractions/crypto.service"; +import { I18nService } from "../abstractions/i18n.service"; import { EncString } from "../models/domain/encString"; import { ImportResult } from "../models/domain/importResult"; - import { CipherWithIds } from "../models/export/cipherWithIds"; import { CollectionWithId } from "../models/export/collectionWithId"; import { FolderWithId } from "../models/export/folderWithId"; -import { CryptoService } from "../abstractions/crypto.service"; -import { I18nService } from "../abstractions/i18n.service"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class BitwardenJsonImporter extends BaseImporter implements Importer { private results: any; diff --git a/common/src/importers/bitwardenPasswordProtectedImporter.ts b/common/src/importers/bitwardenPasswordProtectedImporter.ts index 1e193212..a08b36da 100644 --- a/common/src/importers/bitwardenPasswordProtectedImporter.ts +++ b/common/src/importers/bitwardenPasswordProtectedImporter.ts @@ -1,15 +1,14 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - -import { EncString } from "../models/domain/encString"; -import { ImportResult } from "../models/domain/importResult"; - import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; import { ImportService } from "../abstractions/import.service"; import { KdfType } from "../enums/kdfType"; +import { EncString } from "../models/domain/encString"; +import { ImportResult } from "../models/domain/importResult"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + class BitwardenPasswordProtectedFileFormat { encrypted: boolean; passwordProtected: boolean; @@ -17,7 +16,6 @@ class BitwardenPasswordProtectedFileFormat { salt: string; kdfIterations: number; kdfType: number; - // tslint:disable-next-line encKeyValidation_DO_NOT_EDIT: string; data: string; } diff --git a/common/src/importers/blackBerryCsvImporter.ts b/common/src/importers/blackBerryCsvImporter.ts index f54593b0..ea3d08eb 100644 --- a/common/src/importers/blackBerryCsvImporter.ts +++ b/common/src/importers/blackBerryCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class BlackBerryCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/blurCsvImporter.ts b/common/src/importers/blurCsvImporter.ts index 449ccb32..ca9ecd1c 100644 --- a/common/src/importers/blurCsvImporter.ts +++ b/common/src/importers/blurCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class BlurCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/buttercupCsvImporter.ts b/common/src/importers/buttercupCsvImporter.ts index 4961adbf..aa3dda2d 100644 --- a/common/src/importers/buttercupCsvImporter.ts +++ b/common/src/importers/buttercupCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - const OfficialProps = ["!group_id", "!group_name", "title", "username", "password", "URL", "id"]; export class ButtercupCsvImporter extends BaseImporter implements Importer { @@ -25,6 +25,7 @@ export class ButtercupCsvImporter extends BaseImporter implements Importer { let processingCustomFields = false; for (const prop in value) { + // eslint-disable-next-line if (value.hasOwnProperty(prop)) { if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) { processingCustomFields = true; diff --git a/common/src/importers/chromeCsvImporter.ts b/common/src/importers/chromeCsvImporter.ts index 41fbc251..35c72ac3 100644 --- a/common/src/importers/chromeCsvImporter.ts +++ b/common/src/importers/chromeCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class ChromeCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/clipperzHtmlImporter.ts b/common/src/importers/clipperzHtmlImporter.ts index 8646b267..c4f0402c 100644 --- a/common/src/importers/clipperzHtmlImporter.ts +++ b/common/src/importers/clipperzHtmlImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class ClipperzHtmlImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); @@ -31,6 +31,7 @@ export class ClipperzHtmlImporter extends BaseImporter implements Importer { if (entry.currentVersion != null && entry.currentVersion.fields != null) { for (const property in entry.currentVersion.fields) { + // eslint-disable-next-line if (!entry.currentVersion.fields.hasOwnProperty(property)) { continue; } @@ -50,7 +51,7 @@ export class ClipperzHtmlImporter extends BaseImporter implements Importer { case "url": cipher.login.uris = this.makeUriArray(field.value); break; - default: + default: { const labelLower = field.label != null ? field.label.toLowerCase() : null; if ( cipher.login.password == null && @@ -71,6 +72,7 @@ export class ClipperzHtmlImporter extends BaseImporter implements Importer { this.processKvp(cipher, field.label, field.value); } break; + } } } } diff --git a/common/src/importers/codebookCsvImporter.ts b/common/src/importers/codebookCsvImporter.ts index 4d7aeab8..f842f21c 100644 --- a/common/src/importers/codebookCsvImporter.ts +++ b/common/src/importers/codebookCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class CodebookCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/dashlaneJsonImporter.ts b/common/src/importers/dashlaneJsonImporter.ts index b3dff318..fea540ef 100644 --- a/common/src/importers/dashlaneJsonImporter.ts +++ b/common/src/importers/dashlaneJsonImporter.ts @@ -1,15 +1,13 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; import { CipherView } from "../models/view/cipherView"; import { IdentityView } from "../models/view/identityView"; import { SecureNoteView } from "../models/view/secureNoteView"; -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; const HandledResults = new Set([ "ADDRESS", @@ -53,6 +51,7 @@ export class DashlaneJsonImporter extends BaseImporter implements Importer { } for (const key in results) { + // eslint-disable-next-line if (results.hasOwnProperty(key) && !HandledResults.has(key)) { this.processNote(results[key], null, "Generic Note"); } @@ -161,6 +160,7 @@ export class DashlaneJsonImporter extends BaseImporter implements Importer { cipher.name = this.getValueOrDefault(obj[nameProperty]); } for (const key in obj) { + // eslint-disable-next-line if (obj.hasOwnProperty(key) && key !== nameProperty) { this.processKvp(cipher, key, obj[key].toString()); } diff --git a/common/src/importers/encryptrCsvImporter.ts b/common/src/importers/encryptrCsvImporter.ts index 84f55e09..8c3e9e08 100644 --- a/common/src/importers/encryptrCsvImporter.ts +++ b/common/src/importers/encryptrCsvImporter.ts @@ -1,11 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; -import { CipherType } from "../enums/cipherType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class EncryptrCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/enpassCsvImporter.ts b/common/src/importers/enpassCsvImporter.ts index 5f9ad54e..b5eb0b60 100644 --- a/common/src/importers/enpassCsvImporter.ts +++ b/common/src/importers/enpassCsvImporter.ts @@ -1,14 +1,12 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - -import { ImportResult } from "../models/domain/importResult"; - import { CipherType } from "../enums/cipherType"; import { SecureNoteType } from "../enums/secureNoteType"; - +import { ImportResult } from "../models/domain/importResult"; import { CardView } from "../models/view/cardView"; import { SecureNoteView } from "../models/view/secureNoteView"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + export class EnpassCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/enpassJsonImporter.ts b/common/src/importers/enpassJsonImporter.ts index 631fbc51..033c5995 100644 --- a/common/src/importers/enpassJsonImporter.ts +++ b/common/src/importers/enpassJsonImporter.ts @@ -1,14 +1,12 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { FieldType } from "../enums/fieldType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; import { CipherView } from "../models/view/cipherView"; import { FolderView } from "../models/view/folderView"; -import { CipherType } from "../enums/cipherType"; -import { FieldType } from "../enums/fieldType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class EnpassJsonImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/firefoxCsvImporter.ts b/common/src/importers/firefoxCsvImporter.ts index 3fc97a63..1b71aac9 100644 --- a/common/src/importers/firefoxCsvImporter.ts +++ b/common/src/importers/firefoxCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class FirefoxCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/fsecureFskImporter.ts b/common/src/importers/fsecureFskImporter.ts index 91564fe1..c81a0820 100644 --- a/common/src/importers/fsecureFskImporter.ts +++ b/common/src/importers/fsecureFskImporter.ts @@ -1,11 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; -import { CipherType } from "../enums/cipherType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class FSecureFskImporter extends BaseImporter implements Importer { parse(data: string): Promise { @@ -17,6 +15,7 @@ export class FSecureFskImporter extends BaseImporter implements Importer { } for (const key in results.data) { + // eslint-disable-next-line if (!results.data.hasOwnProperty(key)) { continue; } diff --git a/common/src/importers/gnomeJsonImporter.ts b/common/src/importers/gnomeJsonImporter.ts index 98dc79b5..1dfac675 100644 --- a/common/src/importers/gnomeJsonImporter.ts +++ b/common/src/importers/gnomeJsonImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class GnomeJsonImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); @@ -14,7 +14,7 @@ export class GnomeJsonImporter extends BaseImporter implements Importer { for (const keyRing in results) { if ( - !results.hasOwnProperty(keyRing) || + !results.hasOwnProperty(keyRing) || // eslint-disable-line this.isNullOrWhitespace(keyRing) || results[keyRing].length === 0 ) { @@ -45,7 +45,7 @@ export class GnomeJsonImporter extends BaseImporter implements Importer { : null; for (const attr in value.attributes) { if ( - !value.attributes.hasOwnProperty(attr) || + !value.attributes.hasOwnProperty(attr) || // eslint-disable-line attr === "username_value" || attr === "xdg:schema" ) { diff --git a/common/src/importers/kasperskyTxtImporter.ts b/common/src/importers/kasperskyTxtImporter.ts index b4745e1d..b049f2bb 100644 --- a/common/src/importers/kasperskyTxtImporter.ts +++ b/common/src/importers/kasperskyTxtImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - const NotesHeader = "Notes\n\n"; const ApplicationsHeader = "Applications\n\n"; const WebsitesHeader = "Websites\n\n"; diff --git a/common/src/importers/keepass2XmlImporter.ts b/common/src/importers/keepass2XmlImporter.ts index f6a61cf8..2ed5d0f9 100644 --- a/common/src/importers/keepass2XmlImporter.ts +++ b/common/src/importers/keepass2XmlImporter.ts @@ -1,12 +1,10 @@ +import { FieldType } from "../enums/fieldType"; +import { ImportResult } from "../models/domain/importResult"; +import { FolderView } from "../models/view/folderView"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { FieldType } from "../enums/fieldType"; - -import { ImportResult } from "../models/domain/importResult"; - -import { FolderView } from "../models/view/folderView"; - export class KeePass2XmlImporter extends BaseImporter implements Importer { result = new ImportResult(); diff --git a/common/src/importers/keepassxCsvImporter.ts b/common/src/importers/keepassxCsvImporter.ts index 6c5812bd..58640d5a 100644 --- a/common/src/importers/keepassxCsvImporter.ts +++ b/common/src/importers/keepassxCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class KeePassXCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/keeperImporters/keeperCsvImporter.ts b/common/src/importers/keeperImporters/keeperCsvImporter.ts index 56861b79..e9c65d71 100644 --- a/common/src/importers/keeperImporters/keeperCsvImporter.ts +++ b/common/src/importers/keeperImporters/keeperCsvImporter.ts @@ -1,10 +1,7 @@ +import { ImportResult } from "../../models/domain/importResult"; import { BaseImporter } from "../baseImporter"; import { Importer } from "../importer"; -import { ImportResult } from "../../models/domain/importResult"; - -import { FolderView } from "../../models/view/folderView"; - export class KeeperCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/keeperImporters/keeperJsonImporter.ts b/common/src/importers/keeperImporters/keeperJsonImporter.ts index 47e41114..7ee80b08 100644 --- a/common/src/importers/keeperImporters/keeperJsonImporter.ts +++ b/common/src/importers/keeperImporters/keeperJsonImporter.ts @@ -1,8 +1,7 @@ +import { ImportResult } from "../../models/domain/importResult"; import { BaseImporter } from "../baseImporter"; import { Importer } from "../importer"; -import { ImportResult } from "../../models/domain/importResult"; - import { KeeperJsonExport, RecordsEntity } from "./types/keeperJsonTypes"; export class KeeperJsonImporter extends BaseImporter implements Importer { diff --git a/common/src/importers/lastpassCsvImporter.ts b/common/src/importers/lastpassCsvImporter.ts index 2b8f0a4b..5c016028 100644 --- a/common/src/importers/lastpassCsvImporter.ts +++ b/common/src/importers/lastpassCsvImporter.ts @@ -1,8 +1,6 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; import { CipherView } from "../models/view/cipherView"; import { FolderView } from "../models/view/folderView"; @@ -10,8 +8,8 @@ import { IdentityView } from "../models/view/identityView"; import { LoginView } from "../models/view/loginView"; import { SecureNoteView } from "../models/view/secureNoteView"; -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class LastPassCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { @@ -22,11 +20,12 @@ export class LastPassCsvImporter extends BaseImporter implements Importer { return Promise.resolve(result); } - results.forEach((value, index) => { + results.forEach((value) => { const cipherIndex = result.ciphers.length; let folderIndex = result.folders.length; let grouping = value.grouping; if (grouping != null) { + // eslint-disable-next-line grouping = grouping.replace(/\\/g, "/").replace(/[\x00-\x1F\x7F-\x9F]/g, ""); } const hasFolder = this.getValueOrDefault(grouping, "(none)") !== "(none)"; @@ -90,6 +89,7 @@ export class LastPassCsvImporter extends BaseImporter implements Importer { private buildBaseCipher(value: any) { const cipher = new CipherView(); + // eslint-disable-next-line if (value.hasOwnProperty("profilename") && value.hasOwnProperty("profilelanguage")) { // form fill cipher.favorite = false; @@ -272,6 +272,7 @@ export class LastPassCsvImporter extends BaseImporter implements Importer { cipher.notes = val; } processingNotes = true; + // eslint-disable-next-line } else if (map.hasOwnProperty(key)) { dataObj[map[key]] = val; } else { diff --git a/common/src/importers/logMeOnceCsvImporter.ts b/common/src/importers/logMeOnceCsvImporter.ts index 611058a4..698ebc80 100644 --- a/common/src/importers/logMeOnceCsvImporter.ts +++ b/common/src/importers/logMeOnceCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class LogMeOnceCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/meldiumCsvImporter.ts b/common/src/importers/meldiumCsvImporter.ts index 89d2e0bd..79835a90 100644 --- a/common/src/importers/meldiumCsvImporter.ts +++ b/common/src/importers/meldiumCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class MeldiumCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/msecureCsvImporter.ts b/common/src/importers/msecureCsvImporter.ts index 4ae3ca90..583d13d7 100644 --- a/common/src/importers/msecureCsvImporter.ts +++ b/common/src/importers/msecureCsvImporter.ts @@ -1,13 +1,11 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - -import { ImportResult } from "../models/domain/importResult"; - import { CipherType } from "../enums/cipherType"; import { SecureNoteType } from "../enums/secureNoteType"; - +import { ImportResult } from "../models/domain/importResult"; import { SecureNoteView } from "../models/view/secureNoteView"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + export class MSecureCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/mykiCsvImporter.ts b/common/src/importers/mykiCsvImporter.ts index da440ad6..a40c9f0b 100644 --- a/common/src/importers/mykiCsvImporter.ts +++ b/common/src/importers/mykiCsvImporter.ts @@ -1,14 +1,12 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - import { CipherType } from "../enums/cipherType"; import { SecureNoteType } from "../enums/secureNoteType"; - +import { ImportResult } from "../models/domain/importResult"; import { CardView } from "../models/view/cardView"; import { IdentityView } from "../models/view/identityView"; import { SecureNoteView } from "../models/view/secureNoteView"; -import { ImportResult } from "../models/domain/importResult"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class MykiCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/nordpassCsvImporter.ts b/common/src/importers/nordpassCsvImporter.ts index 45e97edf..cca0ef03 100644 --- a/common/src/importers/nordpassCsvImporter.ts +++ b/common/src/importers/nordpassCsvImporter.ts @@ -1,13 +1,11 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; - import { CipherView } from "../models/view/cipherView"; import { LoginView } from "../models/view/loginView"; -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; type nodePassCsvParsed = { name: string; diff --git a/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts b/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts index fd202ba5..f261140e 100644 --- a/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts +++ b/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts @@ -1,17 +1,14 @@ -import { BaseImporter } from "../baseImporter"; -import { Importer } from "../importer"; - +import { CipherType } from "../../enums/cipherType"; +import { FieldType } from "../../enums/fieldType"; +import { SecureNoteType } from "../../enums/secureNoteType"; import { ImportResult } from "../../models/domain/importResult"; - import { CardView } from "../../models/view/cardView"; import { CipherView } from "../../models/view/cipherView"; import { IdentityView } from "../../models/view/identityView"; import { PasswordHistoryView } from "../../models/view/passwordHistoryView"; import { SecureNoteView } from "../../models/view/secureNoteView"; - -import { CipherType } from "../../enums/cipherType"; -import { FieldType } from "../../enums/fieldType"; -import { SecureNoteType } from "../../enums/secureNoteType"; +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; export class OnePassword1PifImporter extends BaseImporter implements Importer { result = new ImportResult(); diff --git a/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts b/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts index c4234022..d28bdccc 100644 --- a/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts +++ b/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts @@ -1,10 +1,10 @@ +import { CipherType } from "../../enums/cipherType"; +import { FieldType } from "../../enums/fieldType"; import { ImportResult } from "../../models/domain/importResult"; +import { CipherView } from "../../models/view/cipherView"; import { BaseImporter } from "../baseImporter"; import { Importer } from "../importer"; -import { CipherType } from "../../enums/cipherType"; -import { FieldType } from "../../enums/fieldType"; -import { CipherView } from "../../models/view/cipherView"; import { CipherImportContext } from "./cipherImportContext"; export const IgnoredProperties = [ @@ -68,6 +68,7 @@ export abstract class OnePasswordCsvImporter extends BaseImporter implements Imp let altUsername: string = null; for (const property in value) { + // eslint-disable-next-line if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) { continue; } diff --git a/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts b/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts index 4d91c1c0..2135c80a 100644 --- a/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts +++ b/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts @@ -1,10 +1,10 @@ -import { Importer } from "../importer"; -import { IgnoredProperties, OnePasswordCsvImporter } from "./onepasswordCsvImporter"; - import { CipherType } from "../../enums/cipherType"; import { CardView } from "../../models/view/cardView"; import { CipherView } from "../../models/view/cipherView"; import { IdentityView } from "../../models/view/identityView"; +import { Importer } from "../importer"; + +import { IgnoredProperties, OnePasswordCsvImporter } from "./onepasswordCsvImporter"; export class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer { setCipherType(value: any, cipher: CipherView) { @@ -23,6 +23,7 @@ export class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements case "Login": case "Secure Note": IgnoredProperties.push("type"); + break; default: break; } diff --git a/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts b/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts index ebc96b32..3b3d6454 100644 --- a/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts +++ b/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts @@ -1,12 +1,12 @@ -import { Importer } from "../importer"; -import { CipherImportContext } from "./cipherImportContext"; -import { OnePasswordCsvImporter } from "./onepasswordCsvImporter"; - import { CipherType } from "../../enums/cipherType"; import { CardView } from "../../models/view/cardView"; import { CipherView } from "../../models/view/cipherView"; import { IdentityView } from "../../models/view/identityView"; import { LoginView } from "../../models/view/loginView"; +import { Importer } from "../importer"; + +import { CipherImportContext } from "./cipherImportContext"; +import { OnePasswordCsvImporter } from "./onepasswordCsvImporter"; export class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer { constructor() { diff --git a/common/src/importers/padlockCsvImporter.ts b/common/src/importers/padlockCsvImporter.ts index 777d9822..821391cf 100644 --- a/common/src/importers/padlockCsvImporter.ts +++ b/common/src/importers/padlockCsvImporter.ts @@ -1,11 +1,9 @@ +import { ImportResult } from "../models/domain/importResult"; +import { CollectionView } from "../models/view/collectionView"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - -import { CollectionView } from "../models/view/collectionView"; -import { FolderView } from "../models/view/folderView"; - export class PadlockCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passkeepCsvImporter.ts b/common/src/importers/passkeepCsvImporter.ts index 434f7ded..c93b3a42 100644 --- a/common/src/importers/passkeepCsvImporter.ts +++ b/common/src/importers/passkeepCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PassKeepCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passmanJsonImporter.ts b/common/src/importers/passmanJsonImporter.ts index 22232aba..f8bc7106 100644 --- a/common/src/importers/passmanJsonImporter.ts +++ b/common/src/importers/passmanJsonImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PassmanJsonImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passpackCsvImporter.ts b/common/src/importers/passpackCsvImporter.ts index e1a02707..8efaa3c3 100644 --- a/common/src/importers/passpackCsvImporter.ts +++ b/common/src/importers/passpackCsvImporter.ts @@ -1,10 +1,9 @@ +import { ImportResult } from "../models/domain/importResult"; +import { CollectionView } from "../models/view/collectionView"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - -import { CollectionView } from "../models/view/collectionView"; - export class PasspackCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passwordAgentCsvImporter.ts b/common/src/importers/passwordAgentCsvImporter.ts index 9b673c3c..cc37f5dd 100644 --- a/common/src/importers/passwordAgentCsvImporter.ts +++ b/common/src/importers/passwordAgentCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PasswordAgentCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passwordBossJsonImporter.ts b/common/src/importers/passwordBossJsonImporter.ts index 73f74050..d60a84fb 100644 --- a/common/src/importers/passwordBossJsonImporter.ts +++ b/common/src/importers/passwordBossJsonImporter.ts @@ -1,12 +1,10 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; import { FolderView } from "../models/view/folderView"; -import { CipherType } from "../enums/cipherType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class PasswordBossJsonImporter extends BaseImporter implements Importer { parse(data: string): Promise { @@ -52,6 +50,7 @@ export class PasswordBossJsonImporter extends BaseImporter implements Importer { } for (const property in value.identifiers) { + // eslint-disable-next-line if (!value.identifiers.hasOwnProperty(property)) { continue; } diff --git a/common/src/importers/passwordDragonXmlImporter.ts b/common/src/importers/passwordDragonXmlImporter.ts index 74cbe960..433950ad 100644 --- a/common/src/importers/passwordDragonXmlImporter.ts +++ b/common/src/importers/passwordDragonXmlImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PasswordDragonXmlImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passwordSafeXmlImporter.ts b/common/src/importers/passwordSafeXmlImporter.ts index 55ae93ed..b7aa9358 100644 --- a/common/src/importers/passwordSafeXmlImporter.ts +++ b/common/src/importers/passwordSafeXmlImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PasswordSafeXmlImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/passwordWalletTxtImporter.ts b/common/src/importers/passwordWalletTxtImporter.ts index eff71957..b5940372 100644 --- a/common/src/importers/passwordWalletTxtImporter.ts +++ b/common/src/importers/passwordWalletTxtImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class PasswordWalletTxtImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/rememBearCsvImporter.ts b/common/src/importers/rememBearCsvImporter.ts index 2df49cfa..3f7dc464 100644 --- a/common/src/importers/rememBearCsvImporter.ts +++ b/common/src/importers/rememBearCsvImporter.ts @@ -1,12 +1,10 @@ +import { CipherType } from "../enums/cipherType"; +import { ImportResult } from "../models/domain/importResult"; +import { CardView } from "../models/view/cardView"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { CipherType } from "../enums/cipherType"; - -import { ImportResult } from "../models/domain/importResult"; - -import { CardView } from "../models/view/cardView"; - export class RememBearCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/roboformCsvImporter.ts b/common/src/importers/roboformCsvImporter.ts index 6c90dbfd..c5279e2b 100644 --- a/common/src/importers/roboformCsvImporter.ts +++ b/common/src/importers/roboformCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class RoboFormCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/safariCsvImporter.ts b/common/src/importers/safariCsvImporter.ts index 1d32c92a..156c2767 100644 --- a/common/src/importers/safariCsvImporter.ts +++ b/common/src/importers/safariCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class SafariCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/safeInCloudXmlImporter.ts b/common/src/importers/safeInCloudXmlImporter.ts index 82514e24..3e5a8199 100644 --- a/common/src/importers/safeInCloudXmlImporter.ts +++ b/common/src/importers/safeInCloudXmlImporter.ts @@ -1,17 +1,14 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { FieldType } from "../enums/fieldType"; +import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; - +import { CipherView } from "../models/view/cipherView"; +import { FieldView } from "../models/view/fieldView"; import { FolderView } from "../models/view/folderView"; import { SecureNoteView } from "../models/view/secureNoteView"; -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; - -import { FieldType } from "../enums/fieldType"; -import { CipherView } from "../models/view/cipherView"; -import { FieldView } from "../models/view/fieldView"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; export class SafeInCloudXmlImporter extends BaseImporter implements Importer { parse(data: string): Promise { diff --git a/common/src/importers/saferpassCsvImport.ts b/common/src/importers/saferpassCsvImport.ts index 435a1a37..6d962ba1 100644 --- a/common/src/importers/saferpassCsvImport.ts +++ b/common/src/importers/saferpassCsvImport.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class SaferPassCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/secureSafeCsvImporter.ts b/common/src/importers/secureSafeCsvImporter.ts index 540177a0..8d0ac1fe 100644 --- a/common/src/importers/secureSafeCsvImporter.ts +++ b/common/src/importers/secureSafeCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class SecureSafeCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/splashIdCsvImporter.ts b/common/src/importers/splashIdCsvImporter.ts index b38380a9..df1118d1 100644 --- a/common/src/importers/splashIdCsvImporter.ts +++ b/common/src/importers/splashIdCsvImporter.ts @@ -1,9 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - import { ImportResult } from "../models/domain/importResult"; import { CipherView } from "../models/view/cipherView"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + export class SplashIdCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/stickyPasswordXmlImporter.ts b/common/src/importers/stickyPasswordXmlImporter.ts index 1bfba5b6..caaa3370 100644 --- a/common/src/importers/stickyPasswordXmlImporter.ts +++ b/common/src/importers/stickyPasswordXmlImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class StickyPasswordXmlImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/truekeyCsvImporter.ts b/common/src/importers/truekeyCsvImporter.ts index 622ef89c..d28af7af 100644 --- a/common/src/importers/truekeyCsvImporter.ts +++ b/common/src/importers/truekeyCsvImporter.ts @@ -1,13 +1,11 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - +import { CipherType } from "../enums/cipherType"; +import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; - import { CardView } from "../models/view/cardView"; import { SecureNoteView } from "../models/view/secureNoteView"; -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; const PropertiesToIgnore = [ "kind", @@ -70,7 +68,7 @@ export class TrueKeyCsvImporter extends BaseImporter implements Importer { } for (const property in value) { if ( - value.hasOwnProperty(property) && + value.hasOwnProperty(property) && // eslint-disable-line PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 && !this.isNullOrWhitespace(value[property]) ) { diff --git a/common/src/importers/upmCsvImporter.ts b/common/src/importers/upmCsvImporter.ts index a13c5be6..ea092ffc 100644 --- a/common/src/importers/upmCsvImporter.ts +++ b/common/src/importers/upmCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class UpmCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/yotiCsvImporter.ts b/common/src/importers/yotiCsvImporter.ts index fedc1c81..526f7d69 100644 --- a/common/src/importers/yotiCsvImporter.ts +++ b/common/src/importers/yotiCsvImporter.ts @@ -1,8 +1,8 @@ +import { ImportResult } from "../models/domain/importResult"; + import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; -import { ImportResult } from "../models/domain/importResult"; - export class YotiCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/importers/zohoVaultCsvImporter.ts b/common/src/importers/zohoVaultCsvImporter.ts index 1a3e009c..18008e80 100644 --- a/common/src/importers/zohoVaultCsvImporter.ts +++ b/common/src/importers/zohoVaultCsvImporter.ts @@ -1,9 +1,9 @@ -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; - import { ImportResult } from "../models/domain/importResult"; import { CipherView } from "../models/view/cipherView"; +import { BaseImporter } from "./baseImporter"; +import { Importer } from "./importer"; + export class ZohoVaultCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); diff --git a/common/src/misc/captcha_iframe.ts b/common/src/misc/captcha_iframe.ts index b3b1af92..ca422fc0 100644 --- a/common/src/misc/captcha_iframe.ts +++ b/common/src/misc/captcha_iframe.ts @@ -1,4 +1,5 @@ import { I18nService } from "../abstractions/i18n.service"; + import { IFrameComponent } from "./iframe_component"; export class CaptchaIFrame extends IFrameComponent { diff --git a/common/src/misc/iframe_component.ts b/common/src/misc/iframe_component.ts index 7315e11b..2cd702ad 100644 --- a/common/src/misc/iframe_component.ts +++ b/common/src/misc/iframe_component.ts @@ -1,5 +1,3 @@ -import { I18nService } from "../abstractions/i18n.service"; - export abstract class IFrameComponent { iframe: HTMLIFrameElement; private connectorLink: HTMLAnchorElement; diff --git a/common/src/misc/linkedFieldOption.decorator.ts b/common/src/misc/linkedFieldOption.decorator.ts index 8f10709c..43836318 100644 --- a/common/src/misc/linkedFieldOption.decorator.ts +++ b/common/src/misc/linkedFieldOption.decorator.ts @@ -1,6 +1,5 @@ -import { ItemView } from "../models/view/itemView"; - import { LinkedIdType } from "../enums/linkedIdType"; +import { ItemView } from "../models/view/itemView"; export class LinkedMetadata { constructor(readonly propertyKey: string, private readonly _i18nKey?: string) {} diff --git a/common/src/misc/logInStrategies/apiLogin.strategy.ts b/common/src/misc/logInStrategies/apiLogin.strategy.ts index 65463cc0..89ebc379 100644 --- a/common/src/misc/logInStrategies/apiLogin.strategy.ts +++ b/common/src/misc/logInStrategies/apiLogin.strategy.ts @@ -1,5 +1,3 @@ -import { LogInStrategy } from "./logIn.strategy"; - import { ApiService } from "../../abstractions/api.service"; import { AppIdService } from "../../abstractions/appId.service"; import { CryptoService } from "../../abstractions/crypto.service"; @@ -11,12 +9,11 @@ import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; import { StateService } from "../../abstractions/state.service"; import { TokenService } from "../../abstractions/token.service"; import { TwoFactorService } from "../../abstractions/twoFactor.service"; - +import { ApiLogInCredentials } from "../../models/domain/logInCredentials"; import { ApiTokenRequest } from "../../models/request/identityToken/apiTokenRequest"; - import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; -import { ApiLogInCredentials } from "../../models/domain/logInCredentials"; +import { LogInStrategy } from "./logIn.strategy"; export class ApiLogInStrategy extends LogInStrategy { tokenRequest: ApiTokenRequest; diff --git a/common/src/misc/logInStrategies/logIn.strategy.ts b/common/src/misc/logInStrategies/logIn.strategy.ts index 9cb18aac..4bd25ac1 100644 --- a/common/src/misc/logInStrategies/logIn.strategy.ts +++ b/common/src/misc/logInStrategies/logIn.strategy.ts @@ -1,24 +1,3 @@ -import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; - -import { Account, AccountProfile, AccountTokens } from "../../models/domain/account"; -import { AuthResult } from "../../models/domain/authResult"; -import { - ApiLogInCredentials, - PasswordLogInCredentials, - SsoLogInCredentials, -} from "../../models/domain/logInCredentials"; - -import { DeviceRequest } from "../../models/request/deviceRequest"; -import { ApiTokenRequest } from "../../models/request/identityToken/apiTokenRequest"; -import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; -import { SsoTokenRequest } from "../../models/request/identityToken/ssoTokenRequest"; -import { TokenRequestTwoFactor } from "../../models/request/identityToken/tokenRequest"; -import { KeysRequest } from "../../models/request/keysRequest"; - -import { IdentityCaptchaResponse } from "../../models/response/identityCaptchaResponse"; -import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; -import { IdentityTwoFactorResponse } from "../../models/response/identityTwoFactorResponse"; - import { ApiService } from "../../abstractions/api.service"; import { AppIdService } from "../../abstractions/appId.service"; import { CryptoService } from "../../abstractions/crypto.service"; @@ -28,6 +7,23 @@ import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; import { StateService } from "../../abstractions/state.service"; import { TokenService } from "../../abstractions/token.service"; import { TwoFactorService } from "../../abstractions/twoFactor.service"; +import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; +import { Account, AccountProfile, AccountTokens } from "../../models/domain/account"; +import { AuthResult } from "../../models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "../../models/domain/logInCredentials"; +import { DeviceRequest } from "../../models/request/deviceRequest"; +import { ApiTokenRequest } from "../../models/request/identityToken/apiTokenRequest"; +import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; +import { SsoTokenRequest } from "../../models/request/identityToken/ssoTokenRequest"; +import { TokenRequestTwoFactor } from "../../models/request/identityToken/tokenRequest"; +import { KeysRequest } from "../../models/request/keysRequest"; +import { IdentityCaptchaResponse } from "../../models/response/identityCaptchaResponse"; +import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; +import { IdentityTwoFactorResponse } from "../../models/response/identityTwoFactorResponse"; export abstract class LogInStrategy { protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest; diff --git a/common/src/misc/logInStrategies/passwordLogin.strategy.ts b/common/src/misc/logInStrategies/passwordLogin.strategy.ts index cdbe3bdc..78e1a317 100644 --- a/common/src/misc/logInStrategies/passwordLogin.strategy.ts +++ b/common/src/misc/logInStrategies/passwordLogin.strategy.ts @@ -1,7 +1,3 @@ -import { LogInStrategy } from "./logIn.strategy"; - -import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; - import { ApiService } from "../../abstractions/api.service"; import { AppIdService } from "../../abstractions/appId.service"; import { AuthService } from "../../abstractions/auth.service"; @@ -12,11 +8,12 @@ import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; import { StateService } from "../../abstractions/state.service"; import { TokenService } from "../../abstractions/token.service"; import { TwoFactorService } from "../../abstractions/twoFactor.service"; - +import { HashPurpose } from "../../enums/hashPurpose"; import { PasswordLogInCredentials } from "../../models/domain/logInCredentials"; import { SymmetricCryptoKey } from "../../models/domain/symmetricCryptoKey"; +import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; -import { HashPurpose } from "../../enums/hashPurpose"; +import { LogInStrategy } from "./logIn.strategy"; export class PasswordLogInStrategy extends LogInStrategy { get email() { diff --git a/common/src/misc/logInStrategies/ssoLogin.strategy.ts b/common/src/misc/logInStrategies/ssoLogin.strategy.ts index d946764d..e56bd7a3 100644 --- a/common/src/misc/logInStrategies/ssoLogin.strategy.ts +++ b/common/src/misc/logInStrategies/ssoLogin.strategy.ts @@ -1,5 +1,3 @@ -import { LogInStrategy } from "./logIn.strategy"; - import { ApiService } from "../../abstractions/api.service"; import { AppIdService } from "../../abstractions/appId.service"; import { CryptoService } from "../../abstractions/crypto.service"; @@ -10,13 +8,12 @@ import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; import { StateService } from "../../abstractions/state.service"; import { TokenService } from "../../abstractions/token.service"; import { TwoFactorService } from "../../abstractions/twoFactor.service"; - import { SsoLogInCredentials } from "../../models/domain/logInCredentials"; - import { SsoTokenRequest } from "../../models/request/identityToken/ssoTokenRequest"; - import { IdentityTokenResponse } from "../../models/response/identityTokenResponse"; +import { LogInStrategy } from "./logIn.strategy"; + export class SsoLogInStrategy extends LogInStrategy { tokenRequest: SsoTokenRequest; orgId: string; diff --git a/common/src/misc/utils.ts b/common/src/misc/utils.ts index a91ccd5a..409c4c74 100644 --- a/common/src/misc/utils.ts +++ b/common/src/misc/utils.ts @@ -1,8 +1,8 @@ +/* eslint-disable no-useless-escape */ import * as tldjs from "tldjs"; import { I18nService } from "../abstractions/i18n.service"; -// tslint:disable-next-line const nodeURL = typeof window === "undefined" ? require("url") : null; export class Utils { @@ -176,9 +176,7 @@ export class Utils { // ref: http://stackoverflow.com/a/2117523/1090359 static newGuid(): string { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { - // tslint:disable-next-line const r = (Math.random() * 16) | 0; - // tslint:disable-next-line const v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); @@ -347,7 +345,6 @@ export class Utils { } private static validIpAddress(ipString: string): boolean { - // tslint:disable-next-line const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; return ipRegex.test(ipString); @@ -356,7 +353,6 @@ export class Utils { private static isMobile(win: Window) { let mobile = false; ((a) => { - // tslint:disable-next-line if ( /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( a diff --git a/common/src/misc/webauthn_iframe.ts b/common/src/misc/webauthn_iframe.ts index 712594ba..969dde04 100644 --- a/common/src/misc/webauthn_iframe.ts +++ b/common/src/misc/webauthn_iframe.ts @@ -12,9 +12,9 @@ export class WebAuthnIFrame { private webAuthnNewTab: boolean, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private successCallback: Function, - private errorCallback: Function, - private infoCallback: Function + private successCallback: Function, // eslint-disable-line + private errorCallback: Function, // eslint-disable-line + private infoCallback: Function // eslint-disable-line ) { this.connectorLink = win.document.createElement("a"); } diff --git a/common/src/models/api/fieldApi.ts b/common/src/models/api/fieldApi.ts index d7e603ea..cabdb7cc 100644 --- a/common/src/models/api/fieldApi.ts +++ b/common/src/models/api/fieldApi.ts @@ -1,7 +1,6 @@ -import { BaseResponse } from "../response/baseResponse"; - import { FieldType } from "../../enums/fieldType"; import { LinkedIdType } from "../../enums/linkedIdType"; +import { BaseResponse } from "../response/baseResponse"; export class FieldApi extends BaseResponse { name: string; diff --git a/common/src/models/api/loginUriApi.ts b/common/src/models/api/loginUriApi.ts index 9da6e0a7..50ffb0da 100644 --- a/common/src/models/api/loginUriApi.ts +++ b/common/src/models/api/loginUriApi.ts @@ -1,6 +1,5 @@ -import { BaseResponse } from "../response/baseResponse"; - import { UriMatchType } from "../../enums/uriMatchType"; +import { BaseResponse } from "../response/baseResponse"; export class LoginUriApi extends BaseResponse { uri: string; diff --git a/common/src/models/api/secureNoteApi.ts b/common/src/models/api/secureNoteApi.ts index dfb25134..80f18c61 100644 --- a/common/src/models/api/secureNoteApi.ts +++ b/common/src/models/api/secureNoteApi.ts @@ -1,6 +1,5 @@ -import { BaseResponse } from "../response/baseResponse"; - import { SecureNoteType } from "../../enums/secureNoteType"; +import { BaseResponse } from "../response/baseResponse"; export class SecureNoteApi extends BaseResponse { type: SecureNoteType; diff --git a/common/src/models/data/cipherData.ts b/common/src/models/data/cipherData.ts index cdda0e46..e541fee3 100644 --- a/common/src/models/data/cipherData.ts +++ b/common/src/models/data/cipherData.ts @@ -1,5 +1,6 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; +import { CipherResponse } from "../response/cipherResponse"; import { AttachmentData } from "./attachmentData"; import { CardData } from "./cardData"; @@ -9,8 +10,6 @@ import { LoginData } from "./loginData"; import { PasswordHistoryData } from "./passwordHistoryData"; import { SecureNoteData } from "./secureNoteData"; -import { CipherResponse } from "../response/cipherResponse"; - export class CipherData { id: string; organizationId: string; diff --git a/common/src/models/data/fieldData.ts b/common/src/models/data/fieldData.ts index 7b9fe197..6bec9def 100644 --- a/common/src/models/data/fieldData.ts +++ b/common/src/models/data/fieldData.ts @@ -1,6 +1,5 @@ import { FieldType } from "../../enums/fieldType"; import { LinkedIdType } from "../../enums/linkedIdType"; - import { FieldApi } from "../api/fieldApi"; export class FieldData { diff --git a/common/src/models/data/loginUriData.ts b/common/src/models/data/loginUriData.ts index 01cad0bf..874db4e8 100644 --- a/common/src/models/data/loginUriData.ts +++ b/common/src/models/data/loginUriData.ts @@ -1,5 +1,4 @@ import { UriMatchType } from "../../enums/uriMatchType"; - import { LoginUriApi } from "../api/loginUriApi"; export class LoginUriData { diff --git a/common/src/models/data/organizationData.ts b/common/src/models/data/organizationData.ts index 3903b0c2..fe190fff 100644 --- a/common/src/models/data/organizationData.ts +++ b/common/src/models/data/organizationData.ts @@ -1,10 +1,8 @@ -import { ProfileOrganizationResponse } from "../response/profileOrganizationResponse"; - import { OrganizationUserStatusType } from "../../enums/organizationUserStatusType"; import { OrganizationUserType } from "../../enums/organizationUserType"; import { ProductType } from "../../enums/productType"; - import { PermissionsApi } from "../api/permissionsApi"; +import { ProfileOrganizationResponse } from "../response/profileOrganizationResponse"; export class OrganizationData { id: string; diff --git a/common/src/models/data/policyData.ts b/common/src/models/data/policyData.ts index 46cbbeb9..c93b4040 100644 --- a/common/src/models/data/policyData.ts +++ b/common/src/models/data/policyData.ts @@ -1,6 +1,5 @@ -import { PolicyResponse } from "../response/policyResponse"; - import { PolicyType } from "../../enums/policyType"; +import { PolicyResponse } from "../response/policyResponse"; export class PolicyData { id: string; diff --git a/common/src/models/data/providerData.ts b/common/src/models/data/providerData.ts index 7efdab05..5d141ed1 100644 --- a/common/src/models/data/providerData.ts +++ b/common/src/models/data/providerData.ts @@ -1,7 +1,6 @@ -import { ProfileProviderResponse } from "../response/profileProviderResponse"; - import { ProviderUserStatusType } from "../../enums/providerUserStatusType"; import { ProviderUserType } from "../../enums/providerUserType"; +import { ProfileProviderResponse } from "../response/profileProviderResponse"; export class ProviderData { id: string; diff --git a/common/src/models/data/secureNoteData.ts b/common/src/models/data/secureNoteData.ts index 119c77b5..f536b2de 100644 --- a/common/src/models/data/secureNoteData.ts +++ b/common/src/models/data/secureNoteData.ts @@ -1,5 +1,4 @@ import { SecureNoteType } from "../../enums/secureNoteType"; - import { SecureNoteApi } from "../api/secureNoteApi"; export class SecureNoteData { diff --git a/common/src/models/data/sendData.ts b/common/src/models/data/sendData.ts index d07dc362..18c007e3 100644 --- a/common/src/models/data/sendData.ts +++ b/common/src/models/data/sendData.ts @@ -1,10 +1,9 @@ import { SendType } from "../../enums/sendType"; +import { SendResponse } from "../response/sendResponse"; import { SendFileData } from "./sendFileData"; import { SendTextData } from "./sendTextData"; -import { SendResponse } from "../response/sendResponse"; - export class SendData { id: string; accessId: string; diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 5c0337e5..3eb28631 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -1,28 +1,25 @@ -import { OrganizationData } from "../data/organizationData"; - import { AuthenticationStatus } from "../../enums/authenticationStatus"; import { KdfType } from "../../enums/kdfType"; import { UriMatchType } from "../../enums/uriMatchType"; - +import { CipherData } from "../data/cipherData"; +import { CollectionData } from "../data/collectionData"; +import { EventData } from "../data/eventData"; +import { FolderData } from "../data/folderData"; +import { OrganizationData } from "../data/organizationData"; +import { PolicyData } from "../data/policyData"; +import { ProviderData } from "../data/providerData"; +import { SendData } from "../data/sendData"; import { CipherView } from "../view/cipherView"; import { CollectionView } from "../view/collectionView"; import { FolderView } from "../view/folderView"; import { SendView } from "../view/sendView"; import { EncString } from "./encString"; +import { EnvironmentUrls } from "./environmentUrls"; import { GeneratedPasswordHistory } from "./generatedPasswordHistory"; import { Policy } from "./policy"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; -import { CipherData } from "../data/cipherData"; -import { CollectionData } from "../data/collectionData"; -import { EventData } from "../data/eventData"; -import { FolderData } from "../data/folderData"; -import { PolicyData } from "../data/policyData"; -import { ProviderData } from "../data/providerData"; -import { SendData } from "../data/sendData"; -import { EnvironmentUrls } from "./environmentUrls"; - export class EncryptionPair { encrypted?: TEncrypted; decrypted?: TDecrypted; diff --git a/common/src/models/domain/attachment.ts b/common/src/models/domain/attachment.ts index ceafce3e..aded9d25 100644 --- a/common/src/models/domain/attachment.ts +++ b/common/src/models/domain/attachment.ts @@ -1,15 +1,12 @@ +import { CryptoService } from "../../abstractions/crypto.service"; +import { Utils } from "../../misc/utils"; import { AttachmentData } from "../data/attachmentData"; - import { AttachmentView } from "../view/attachmentView"; import Domain from "./domainBase"; import { EncString } from "./encString"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; -import { CryptoService } from "../../abstractions/crypto.service"; - -import { Utils } from "../../misc/utils"; - export class Attachment extends Domain { id: string; url: string; @@ -18,7 +15,7 @@ export class Attachment extends Domain { key: EncString; fileName: EncString; - constructor(obj?: AttachmentData, alreadyEncrypted: boolean = false) { + constructor(obj?: AttachmentData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/authResult.ts b/common/src/models/domain/authResult.ts index bba3f7f3..0781f872 100644 --- a/common/src/models/domain/authResult.ts +++ b/common/src/models/domain/authResult.ts @@ -1,11 +1,10 @@ import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; - import { Utils } from "../../misc/utils"; export class AuthResult { - captchaSiteKey: string = ""; - resetMasterPassword: boolean = false; - forcePasswordReset: boolean = false; + captchaSiteKey = ""; + resetMasterPassword = false; + forcePasswordReset = false; twoFactorProviders: Map = null; get requiresCaptcha() { diff --git a/common/src/models/domain/card.ts b/common/src/models/domain/card.ts index 62315d63..170b7c1a 100644 --- a/common/src/models/domain/card.ts +++ b/common/src/models/domain/card.ts @@ -1,9 +1,8 @@ import { CardData } from "../data/cardData"; +import { CardView } from "../view/cardView"; import Domain from "./domainBase"; import { EncString } from "./encString"; - -import { CardView } from "../view/cardView"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class Card extends Domain { @@ -14,7 +13,7 @@ export class Card extends Domain { expYear: EncString; code: EncString; - constructor(obj?: CardData, alreadyEncrypted: boolean = false) { + constructor(obj?: CardData, alreadyEncrypted = false) { super(); if (obj == null) { return; @@ -38,7 +37,7 @@ export class Card extends Domain { decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise { return this.decryptObj( - new CardView(this), + new CardView(), { cardholderName: null, brand: null, diff --git a/common/src/models/domain/cipher.ts b/common/src/models/domain/cipher.ts index 14a7a14a..d548e673 100644 --- a/common/src/models/domain/cipher.ts +++ b/common/src/models/domain/cipher.ts @@ -1,8 +1,6 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; - import { CipherData } from "../data/cipherData"; - import { CipherView } from "../view/cipherView"; import { Attachment } from "./attachment"; @@ -40,7 +38,7 @@ export class Cipher extends Domain { deletedDate: Date; reprompt: CipherRepromptType; - constructor(obj?: CipherData, alreadyEncrypted: boolean = false, localData: any = null) { + constructor(obj?: CipherData, alreadyEncrypted = false, localData: any = null) { super(); if (obj == null) { return; @@ -81,7 +79,7 @@ export class Cipher extends Domain { this.login = new Login(obj.login, alreadyEncrypted); break; case CipherType.SecureNote: - this.secureNote = new SecureNote(obj.secureNote, alreadyEncrypted); + this.secureNote = new SecureNote(obj.secureNote); break; case CipherType.Card: this.card = new Card(obj.card, alreadyEncrypted); diff --git a/common/src/models/domain/collection.ts b/common/src/models/domain/collection.ts index b08ecd0f..740cada3 100644 --- a/common/src/models/domain/collection.ts +++ b/common/src/models/domain/collection.ts @@ -1,5 +1,4 @@ import { CollectionData } from "../data/collectionData"; - import { CollectionView } from "../view/collectionView"; import Domain from "./domainBase"; @@ -13,7 +12,7 @@ export class Collection extends Domain { readOnly: boolean; hidePasswords: boolean; - constructor(obj?: CollectionData, alreadyEncrypted: boolean = false) { + constructor(obj?: CollectionData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/domainBase.ts b/common/src/models/domain/domainBase.ts index a8c09abe..aa4d97e4 100644 --- a/common/src/models/domain/domainBase.ts +++ b/common/src/models/domain/domainBase.ts @@ -1,7 +1,6 @@ -import { EncString } from "./encString"; - import { View } from "../view/view"; +import { EncString } from "./encString"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export default class Domain { @@ -13,6 +12,7 @@ export default class Domain { notEncList: any[] = [] ) { for (const prop in map) { + // eslint-disable-next-line if (!map.hasOwnProperty(prop)) { continue; } @@ -32,6 +32,7 @@ export default class Domain { notEncStringList: any[] = [] ) { for (const prop in map) { + // eslint-disable-next-line if (!map.hasOwnProperty(prop)) { continue; } @@ -55,11 +56,11 @@ export default class Domain { const self: any = this; for (const prop in map) { + // eslint-disable-next-line if (!map.hasOwnProperty(prop)) { continue; } - // tslint:disable-next-line (function (theProp) { const p = Promise.resolve() .then(() => { diff --git a/common/src/models/domain/encString.ts b/common/src/models/domain/encString.ts index 9ce1c394..74ae8370 100644 --- a/common/src/models/domain/encString.ts +++ b/common/src/models/domain/encString.ts @@ -1,7 +1,5 @@ -import { EncryptionType } from "../../enums/encryptionType"; - import { CryptoService } from "../../abstractions/crypto.service"; - +import { EncryptionType } from "../../enums/encryptionType"; import { Utils } from "../../misc/utils"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; diff --git a/common/src/models/domain/field.ts b/common/src/models/domain/field.ts index 0aaf2a31..aab53c4b 100644 --- a/common/src/models/domain/field.ts +++ b/common/src/models/domain/field.ts @@ -1,12 +1,10 @@ import { FieldType } from "../../enums/fieldType"; import { LinkedIdType } from "../../enums/linkedIdType"; - import { FieldData } from "../data/fieldData"; +import { FieldView } from "../view/fieldView"; import Domain from "./domainBase"; import { EncString } from "./encString"; - -import { FieldView } from "../view/fieldView"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class Field extends Domain { @@ -15,7 +13,7 @@ export class Field extends Domain { type: FieldType; linkedId: LinkedIdType; - constructor(obj?: FieldData, alreadyEncrypted: boolean = false) { + constructor(obj?: FieldData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/folder.ts b/common/src/models/domain/folder.ts index 4e4a08f2..f27d1e5f 100644 --- a/common/src/models/domain/folder.ts +++ b/common/src/models/domain/folder.ts @@ -1,5 +1,4 @@ import { FolderData } from "../data/folderData"; - import { FolderView } from "../view/folderView"; import Domain from "./domainBase"; @@ -10,7 +9,7 @@ export class Folder extends Domain { name: EncString; revisionDate: Date; - constructor(obj?: FolderData, alreadyEncrypted: boolean = false) { + constructor(obj?: FolderData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/identity.ts b/common/src/models/domain/identity.ts index 8584c946..8bc3c8a6 100644 --- a/common/src/models/domain/identity.ts +++ b/common/src/models/domain/identity.ts @@ -1,11 +1,10 @@ import { IdentityData } from "../data/identityData"; +import { IdentityView } from "../view/identityView"; import Domain from "./domainBase"; import { EncString } from "./encString"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; -import { IdentityView } from "../view/identityView"; - export class Identity extends Domain { title: EncString; firstName: EncString; @@ -26,7 +25,7 @@ export class Identity extends Domain { passportNumber: EncString; licenseNumber: EncString; - constructor(obj?: IdentityData, alreadyEncrypted: boolean = false) { + constructor(obj?: IdentityData, alreadyEncrypted = false) { super(); if (obj == null) { return; @@ -62,7 +61,7 @@ export class Identity extends Domain { decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise { return this.decryptObj( - new IdentityView(this), + new IdentityView(), { title: null, firstName: null, diff --git a/common/src/models/domain/logInCredentials.ts b/common/src/models/domain/logInCredentials.ts index 91bb9a76..b89d2bac 100644 --- a/common/src/models/domain/logInCredentials.ts +++ b/common/src/models/domain/logInCredentials.ts @@ -1,5 +1,4 @@ import { AuthenticationType } from "../../enums/authenticationType"; - import { TokenRequestTwoFactor } from "../request/identityToken/tokenRequest"; export class PasswordLogInCredentials { diff --git a/common/src/models/domain/login.ts b/common/src/models/domain/login.ts index 8507e076..4ada7986 100644 --- a/common/src/models/domain/login.ts +++ b/common/src/models/domain/login.ts @@ -1,11 +1,9 @@ -import { LoginUri } from "./loginUri"; - import { LoginData } from "../data/loginData"; - import { LoginView } from "../view/loginView"; import Domain from "./domainBase"; import { EncString } from "./encString"; +import { LoginUri } from "./loginUri"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class Login extends Domain { @@ -16,7 +14,7 @@ export class Login extends Domain { totp: EncString; autofillOnPageLoad: boolean; - constructor(obj?: LoginData, alreadyEncrypted: boolean = false) { + constructor(obj?: LoginData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/loginUri.ts b/common/src/models/domain/loginUri.ts index a80f7d0e..15a51319 100644 --- a/common/src/models/domain/loginUri.ts +++ b/common/src/models/domain/loginUri.ts @@ -1,7 +1,5 @@ import { UriMatchType } from "../../enums/uriMatchType"; - import { LoginUriData } from "../data/loginUriData"; - import { LoginUriView } from "../view/loginUriView"; import Domain from "./domainBase"; @@ -12,7 +10,7 @@ export class LoginUri extends Domain { uri: EncString; match: UriMatchType; - constructor(obj?: LoginUriData, alreadyEncrypted: boolean = false) { + constructor(obj?: LoginUriData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/masterPasswordPolicyOptions.ts b/common/src/models/domain/masterPasswordPolicyOptions.ts index 4ffdc91f..2207d00c 100644 --- a/common/src/models/domain/masterPasswordPolicyOptions.ts +++ b/common/src/models/domain/masterPasswordPolicyOptions.ts @@ -1,10 +1,10 @@ import Domain from "./domainBase"; export class MasterPasswordPolicyOptions extends Domain { - minComplexity: number = 0; - minLength: number = 0; - requireUpper: boolean = false; - requireLower: boolean = false; - requireNumbers: boolean = false; - requireSpecial: boolean = false; + minComplexity = 0; + minLength = 0; + requireUpper = false; + requireLower = false; + requireNumbers = false; + requireSpecial = false; } diff --git a/common/src/models/domain/organization.ts b/common/src/models/domain/organization.ts index d21b49b9..8a682212 100644 --- a/common/src/models/domain/organization.ts +++ b/common/src/models/domain/organization.ts @@ -1,9 +1,8 @@ -import { OrganizationData } from "../data/organizationData"; - import { OrganizationUserStatusType } from "../../enums/organizationUserStatusType"; import { OrganizationUserType } from "../../enums/organizationUserType"; import { ProductType } from "../../enums/productType"; import { PermissionsApi } from "../api/permissionsApi"; +import { OrganizationData } from "../data/organizationData"; export class Organization { id: string; diff --git a/common/src/models/domain/password.ts b/common/src/models/domain/password.ts index 94e098c6..0408938a 100644 --- a/common/src/models/domain/password.ts +++ b/common/src/models/domain/password.ts @@ -1,16 +1,15 @@ import { PasswordHistoryData } from "../data/passwordHistoryData"; +import { PasswordHistoryView } from "../view/passwordHistoryView"; import Domain from "./domainBase"; import { EncString } from "./encString"; - -import { PasswordHistoryView } from "../view/passwordHistoryView"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class Password extends Domain { password: EncString; lastUsedDate: Date; - constructor(obj?: PasswordHistoryData, alreadyEncrypted: boolean = false) { + constructor(obj?: PasswordHistoryData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/passwordGeneratorPolicyOptions.ts b/common/src/models/domain/passwordGeneratorPolicyOptions.ts index 5e37bcec..19072a9f 100644 --- a/common/src/models/domain/passwordGeneratorPolicyOptions.ts +++ b/common/src/models/domain/passwordGeneratorPolicyOptions.ts @@ -1,17 +1,17 @@ import Domain from "./domainBase"; export class PasswordGeneratorPolicyOptions extends Domain { - defaultType: string = ""; - minLength: number = 0; - useUppercase: boolean = false; - useLowercase: boolean = false; - useNumbers: boolean = false; - numberCount: number = 0; - useSpecial: boolean = false; - specialCount: number = 0; - minNumberWords: number = 0; - capitalize: boolean = false; - includeNumber: boolean = false; + defaultType = ""; + minLength = 0; + useUppercase = false; + useLowercase = false; + useNumbers = false; + numberCount = 0; + useSpecial = false; + specialCount = 0; + minNumberWords = 0; + capitalize = false; + includeNumber = false; inEffect() { return ( diff --git a/common/src/models/domain/policy.ts b/common/src/models/domain/policy.ts index 174c2c7c..c4a113cc 100644 --- a/common/src/models/domain/policy.ts +++ b/common/src/models/domain/policy.ts @@ -1,9 +1,8 @@ +import { PolicyType } from "../../enums/policyType"; import { PolicyData } from "../data/policyData"; import Domain from "./domainBase"; -import { PolicyType } from "../../enums/policyType"; - export class Policy extends Domain { id: string; organizationId: string; diff --git a/common/src/models/domain/resetPasswordPolicyOptions.ts b/common/src/models/domain/resetPasswordPolicyOptions.ts index 8dbde376..2ee11a5c 100644 --- a/common/src/models/domain/resetPasswordPolicyOptions.ts +++ b/common/src/models/domain/resetPasswordPolicyOptions.ts @@ -1,5 +1,5 @@ import Domain from "./domainBase"; export class ResetPasswordPolicyOptions extends Domain { - autoEnrollEnabled: boolean = false; + autoEnrollEnabled = false; } diff --git a/common/src/models/domain/secureNote.ts b/common/src/models/domain/secureNote.ts index 42f31297..8bde3164 100644 --- a/common/src/models/domain/secureNote.ts +++ b/common/src/models/domain/secureNote.ts @@ -1,16 +1,14 @@ import { SecureNoteType } from "../../enums/secureNoteType"; - import { SecureNoteData } from "../data/secureNoteData"; +import { SecureNoteView } from "../view/secureNoteView"; import Domain from "./domainBase"; - -import { SecureNoteView } from "../view/secureNoteView"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class SecureNote extends Domain { type: SecureNoteType; - constructor(obj?: SecureNoteData, alreadyEncrypted: boolean = false) { + constructor(obj?: SecureNoteData) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/send.ts b/common/src/models/domain/send.ts index ab217f92..29809b29 100644 --- a/common/src/models/domain/send.ts +++ b/common/src/models/domain/send.ts @@ -1,11 +1,7 @@ import { CryptoService } from "../../abstractions/crypto.service"; - import { SendType } from "../../enums/sendType"; - import { Utils } from "../../misc/utils"; - import { SendData } from "../data/sendData"; - import { SendView } from "../view/sendView"; import Domain from "./domainBase"; @@ -32,7 +28,7 @@ export class Send extends Domain { disabled: boolean; hideEmail: boolean; - constructor(obj?: SendData, alreadyEncrypted: boolean = false) { + constructor(obj?: SendData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/sendAccess.ts b/common/src/models/domain/sendAccess.ts index 05ad9bde..dce6960c 100644 --- a/common/src/models/domain/sendAccess.ts +++ b/common/src/models/domain/sendAccess.ts @@ -1,7 +1,5 @@ import { SendType } from "../../enums/sendType"; - import { SendAccessResponse } from "../response/sendAccessResponse"; - import { SendAccessView } from "../view/sendAccessView"; import Domain from "./domainBase"; @@ -19,7 +17,7 @@ export class SendAccess extends Domain { expirationDate: Date; creatorIdentifier: string; - constructor(obj?: SendAccessResponse, alreadyEncrypted: boolean = false) { + constructor(obj?: SendAccessResponse, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/sendFile.ts b/common/src/models/domain/sendFile.ts index 76c566df..5c954044 100644 --- a/common/src/models/domain/sendFile.ts +++ b/common/src/models/domain/sendFile.ts @@ -1,18 +1,17 @@ +import { SendFileData } from "../data/sendFileData"; +import { SendFileView } from "../view/sendFileView"; + import Domain from "./domainBase"; import { EncString } from "./encString"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; -import { SendFileData } from "../data/sendFileData"; - -import { SendFileView } from "../view/sendFileView"; - export class SendFile extends Domain { id: string; size: string; sizeName: string; fileName: EncString; - constructor(obj?: SendFileData, alreadyEncrypted: boolean = false) { + constructor(obj?: SendFileData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/sendText.ts b/common/src/models/domain/sendText.ts index 7d45332f..a306c6c3 100644 --- a/common/src/models/domain/sendText.ts +++ b/common/src/models/domain/sendText.ts @@ -1,16 +1,15 @@ +import { SendTextData } from "../data/sendTextData"; +import { SendTextView } from "../view/sendTextView"; + import Domain from "./domainBase"; import { EncString } from "./encString"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; -import { SendTextData } from "../data/sendTextData"; - -import { SendTextView } from "../view/sendTextView"; - export class SendText extends Domain { text: EncString; hidden: boolean; - constructor(obj?: SendTextData, alreadyEncrypted: boolean = false) { + constructor(obj?: SendTextData, alreadyEncrypted = false) { super(); if (obj == null) { return; diff --git a/common/src/models/domain/symmetricCryptoKey.ts b/common/src/models/domain/symmetricCryptoKey.ts index c3c80f06..a58dc6fd 100644 --- a/common/src/models/domain/symmetricCryptoKey.ts +++ b/common/src/models/domain/symmetricCryptoKey.ts @@ -1,5 +1,4 @@ import { EncryptionType } from "../../enums/encryptionType"; - import { Utils } from "../../misc/utils"; export class SymmetricCryptoKey { diff --git a/common/src/models/export/card.ts b/common/src/models/export/card.ts index 853ce64b..b320ec8b 100644 --- a/common/src/models/export/card.ts +++ b/common/src/models/export/card.ts @@ -1,7 +1,6 @@ -import { CardView } from "../view/cardView"; - import { Card as CardDomain } from "../domain/card"; import { EncString } from "../domain/encString"; +import { CardView } from "../view/cardView"; export class Card { static template(): Card { diff --git a/common/src/models/export/cipher.ts b/common/src/models/export/cipher.ts index c433044d..5d650666 100644 --- a/common/src/models/export/cipher.ts +++ b/common/src/models/export/cipher.ts @@ -1,10 +1,8 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; - -import { CipherView } from "../view/cipherView"; - import { Cipher as CipherDomain } from "../domain/cipher"; import { EncString } from "../domain/encString"; +import { CipherView } from "../view/cipherView"; import { Card } from "./card"; import { Field } from "./field"; diff --git a/common/src/models/export/cipherWithIds.ts b/common/src/models/export/cipherWithIds.ts index fccf713e..a5698c6d 100644 --- a/common/src/models/export/cipherWithIds.ts +++ b/common/src/models/export/cipherWithIds.ts @@ -1,8 +1,7 @@ -import { Cipher } from "./cipher"; - +import { Cipher as CipherDomain } from "../domain/cipher"; import { CipherView } from "../view/cipherView"; -import { Cipher as CipherDomain } from "../domain/cipher"; +import { Cipher } from "./cipher"; export class CipherWithIds extends Cipher { id: string; diff --git a/common/src/models/export/collection.ts b/common/src/models/export/collection.ts index 70d52397..fba9af15 100644 --- a/common/src/models/export/collection.ts +++ b/common/src/models/export/collection.ts @@ -1,7 +1,6 @@ -import { CollectionView } from "../view/collectionView"; - import { Collection as CollectionDomain } from "../domain/collection"; import { EncString } from "../domain/encString"; +import { CollectionView } from "../view/collectionView"; export class Collection { static template(): Collection { diff --git a/common/src/models/export/collectionWithId.ts b/common/src/models/export/collectionWithId.ts index d5fcec58..7bc0707a 100644 --- a/common/src/models/export/collectionWithId.ts +++ b/common/src/models/export/collectionWithId.ts @@ -1,8 +1,7 @@ -import { Collection } from "./collection"; - +import { Collection as CollectionDomain } from "../domain/collection"; import { CollectionView } from "../view/collectionView"; -import { Collection as CollectionDomain } from "../domain/collection"; +import { Collection } from "./collection"; export class CollectionWithId extends Collection { id: string; diff --git a/common/src/models/export/field.ts b/common/src/models/export/field.ts index e4353a71..c8ce7581 100644 --- a/common/src/models/export/field.ts +++ b/common/src/models/export/field.ts @@ -1,10 +1,8 @@ import { FieldType } from "../../enums/fieldType"; import { LinkedIdType } from "../../enums/linkedIdType"; - -import { FieldView } from "../view/fieldView"; - import { EncString } from "../domain/encString"; import { Field as FieldDomain } from "../domain/field"; +import { FieldView } from "../view/fieldView"; export class Field { static template(): Field { diff --git a/common/src/models/export/folder.ts b/common/src/models/export/folder.ts index 9f015b56..e770f326 100644 --- a/common/src/models/export/folder.ts +++ b/common/src/models/export/folder.ts @@ -1,7 +1,6 @@ -import { FolderView } from "../view/folderView"; - import { EncString } from "../domain/encString"; import { Folder as FolderDomain } from "../domain/folder"; +import { FolderView } from "../view/folderView"; export class Folder { static template(): Folder { diff --git a/common/src/models/export/folderWithId.ts b/common/src/models/export/folderWithId.ts index 69983cab..a5507d51 100644 --- a/common/src/models/export/folderWithId.ts +++ b/common/src/models/export/folderWithId.ts @@ -1,8 +1,7 @@ -import { Folder } from "./folder"; - +import { Folder as FolderDomain } from "../domain/folder"; import { FolderView } from "../view/folderView"; -import { Folder as FolderDomain } from "../domain/folder"; +import { Folder } from "./folder"; export class FolderWithId extends Folder { id: string; diff --git a/common/src/models/export/identity.ts b/common/src/models/export/identity.ts index 42fb8865..144732db 100644 --- a/common/src/models/export/identity.ts +++ b/common/src/models/export/identity.ts @@ -1,7 +1,6 @@ -import { IdentityView } from "../view/identityView"; - import { EncString } from "../domain/encString"; import { Identity as IdentityDomain } from "../domain/identity"; +import { IdentityView } from "../view/identityView"; export class Identity { static template(): Identity { diff --git a/common/src/models/export/login.ts b/common/src/models/export/login.ts index d64263b3..6a07ff74 100644 --- a/common/src/models/export/login.ts +++ b/common/src/models/export/login.ts @@ -1,9 +1,8 @@ -import { LoginUri } from "./loginUri"; - -import { LoginView } from "../view/loginView"; - import { EncString } from "../domain/encString"; import { Login as LoginDomain } from "../domain/login"; +import { LoginView } from "../view/loginView"; + +import { LoginUri } from "./loginUri"; export class Login { static template(): Login { diff --git a/common/src/models/export/loginUri.ts b/common/src/models/export/loginUri.ts index 445b1a25..3e6d588b 100644 --- a/common/src/models/export/loginUri.ts +++ b/common/src/models/export/loginUri.ts @@ -1,9 +1,7 @@ import { UriMatchType } from "../../enums/uriMatchType"; - -import { LoginUriView } from "../view/loginUriView"; - import { EncString } from "../domain/encString"; import { LoginUri as LoginUriDomain } from "../domain/loginUri"; +import { LoginUriView } from "../view/loginUriView"; export class LoginUri { static template(): LoginUri { diff --git a/common/src/models/export/secureNote.ts b/common/src/models/export/secureNote.ts index 2dc75a9a..851ba8e4 100644 --- a/common/src/models/export/secureNote.ts +++ b/common/src/models/export/secureNote.ts @@ -1,8 +1,6 @@ import { SecureNoteType } from "../../enums/secureNoteType"; - -import { SecureNoteView } from "../view/secureNoteView"; - import { SecureNote as SecureNoteDomain } from "../domain/secureNote"; +import { SecureNoteView } from "../view/secureNoteView"; export class SecureNote { static template(): SecureNote { diff --git a/common/src/models/request/account/setKeyConnectorKeyRequest.ts b/common/src/models/request/account/setKeyConnectorKeyRequest.ts index b71ce290..a84cc7ef 100644 --- a/common/src/models/request/account/setKeyConnectorKeyRequest.ts +++ b/common/src/models/request/account/setKeyConnectorKeyRequest.ts @@ -1,6 +1,5 @@ -import { KeysRequest } from "../keysRequest"; - import { KdfType } from "../../../enums/kdfType"; +import { KeysRequest } from "../keysRequest"; export class SetKeyConnectorKeyRequest { key: string; diff --git a/common/src/models/request/cipherBulkShareRequest.ts b/common/src/models/request/cipherBulkShareRequest.ts index be36da9d..6e77ad56 100644 --- a/common/src/models/request/cipherBulkShareRequest.ts +++ b/common/src/models/request/cipherBulkShareRequest.ts @@ -1,7 +1,7 @@ -import { CipherWithIdRequest } from "./cipherWithIdRequest"; - import { Cipher } from "../domain/cipher"; +import { CipherWithIdRequest } from "./cipherWithIdRequest"; + export class CipherBulkShareRequest { ciphers: CipherWithIdRequest[]; collectionIds: string[]; diff --git a/common/src/models/request/cipherCreateRequest.ts b/common/src/models/request/cipherCreateRequest.ts index 443ef318..d7ff5128 100644 --- a/common/src/models/request/cipherCreateRequest.ts +++ b/common/src/models/request/cipherCreateRequest.ts @@ -1,7 +1,7 @@ -import { CipherRequest } from "./cipherRequest"; - import { Cipher } from "../domain/cipher"; +import { CipherRequest } from "./cipherRequest"; + export class CipherCreateRequest { cipher: CipherRequest; collectionIds: string[]; diff --git a/common/src/models/request/cipherRequest.ts b/common/src/models/request/cipherRequest.ts index c14274d9..4ed58850 100644 --- a/common/src/models/request/cipherRequest.ts +++ b/common/src/models/request/cipherRequest.ts @@ -1,14 +1,12 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; - -import { Cipher } from "../domain/cipher"; - import { CardApi } from "../api/cardApi"; import { FieldApi } from "../api/fieldApi"; import { IdentityApi } from "../api/identityApi"; import { LoginApi } from "../api/loginApi"; import { LoginUriApi } from "../api/loginUriApi"; import { SecureNoteApi } from "../api/secureNoteApi"; +import { Cipher } from "../domain/cipher"; import { AttachmentRequest } from "./attachmentRequest"; import { PasswordHistoryRequest } from "./passwordHistoryRequest"; diff --git a/common/src/models/request/cipherShareRequest.ts b/common/src/models/request/cipherShareRequest.ts index 430e4ef8..4cf6dfde 100644 --- a/common/src/models/request/cipherShareRequest.ts +++ b/common/src/models/request/cipherShareRequest.ts @@ -1,7 +1,7 @@ -import { CipherRequest } from "./cipherRequest"; - import { Cipher } from "../domain/cipher"; +import { CipherRequest } from "./cipherRequest"; + export class CipherShareRequest { cipher: CipherRequest; collectionIds: string[]; diff --git a/common/src/models/request/cipherWithIdRequest.ts b/common/src/models/request/cipherWithIdRequest.ts index a722e4a9..0f22322f 100644 --- a/common/src/models/request/cipherWithIdRequest.ts +++ b/common/src/models/request/cipherWithIdRequest.ts @@ -1,7 +1,7 @@ -import { CipherRequest } from "./cipherRequest"; - import { Cipher } from "../domain/cipher"; +import { CipherRequest } from "./cipherRequest"; + export class CipherWithIdRequest extends CipherRequest { id: string; diff --git a/common/src/models/request/deviceRequest.ts b/common/src/models/request/deviceRequest.ts index 06da38a1..66c17b57 100644 --- a/common/src/models/request/deviceRequest.ts +++ b/common/src/models/request/deviceRequest.ts @@ -1,6 +1,5 @@ -import { DeviceType } from "../../enums/deviceType"; - import { PlatformUtilsService } from "../../abstractions/platformUtils.service"; +import { DeviceType } from "../../enums/deviceType"; export class DeviceRequest { type: DeviceType; diff --git a/common/src/models/request/folderWithIdRequest.ts b/common/src/models/request/folderWithIdRequest.ts index 1c83e73f..a36c2b70 100644 --- a/common/src/models/request/folderWithIdRequest.ts +++ b/common/src/models/request/folderWithIdRequest.ts @@ -1,7 +1,7 @@ -import { FolderRequest } from "./folderRequest"; - import { Folder } from "../domain/folder"; +import { FolderRequest } from "./folderRequest"; + export class FolderWithIdRequest extends FolderRequest { id: string; diff --git a/common/src/models/request/identityToken/apiTokenRequest.ts b/common/src/models/request/identityToken/apiTokenRequest.ts index b8f2c21f..dabaead9 100644 --- a/common/src/models/request/identityToken/apiTokenRequest.ts +++ b/common/src/models/request/identityToken/apiTokenRequest.ts @@ -1,7 +1,7 @@ -import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; - import { DeviceRequest } from "../deviceRequest"; +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; + export class ApiTokenRequest extends TokenRequest { constructor( public clientId: string, diff --git a/common/src/models/request/identityToken/passwordTokenRequest.ts b/common/src/models/request/identityToken/passwordTokenRequest.ts index 59f28ecd..0cafd147 100644 --- a/common/src/models/request/identityToken/passwordTokenRequest.ts +++ b/common/src/models/request/identityToken/passwordTokenRequest.ts @@ -1,10 +1,9 @@ -import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; - +import { ClientType } from "../../../enums/clientType"; +import { Utils } from "../../../misc/utils"; import { CaptchaProtectedRequest } from "../captchaProtectedRequest"; import { DeviceRequest } from "../deviceRequest"; -import { ClientType } from "../../../enums/clientType"; -import { Utils } from "../../../misc/utils"; +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; export class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest { constructor( diff --git a/common/src/models/request/identityToken/ssoTokenRequest.ts b/common/src/models/request/identityToken/ssoTokenRequest.ts index 009b8cf8..267de2ed 100644 --- a/common/src/models/request/identityToken/ssoTokenRequest.ts +++ b/common/src/models/request/identityToken/ssoTokenRequest.ts @@ -1,7 +1,7 @@ -import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; - import { DeviceRequest } from "../deviceRequest"; +import { TokenRequest, TokenRequestTwoFactor } from "./tokenRequest"; + export class SsoTokenRequest extends TokenRequest { constructor( public code: string, diff --git a/common/src/models/request/identityToken/tokenRequest.ts b/common/src/models/request/identityToken/tokenRequest.ts index 4e193cc0..36a61e1d 100644 --- a/common/src/models/request/identityToken/tokenRequest.ts +++ b/common/src/models/request/identityToken/tokenRequest.ts @@ -1,5 +1,4 @@ import { TwoFactorProviderType } from "../../../enums/twoFactorProviderType"; - import { DeviceRequest } from "../deviceRequest"; export interface TokenRequestTwoFactor { @@ -15,6 +14,7 @@ export abstract class TokenRequest { this.device = device != null ? device : null; } + // eslint-disable-next-line alterIdentityTokenHeaders(headers: Headers) { // Implemented in subclass if required } diff --git a/common/src/models/request/kdfRequest.ts b/common/src/models/request/kdfRequest.ts index 82a031b1..47c1ce07 100644 --- a/common/src/models/request/kdfRequest.ts +++ b/common/src/models/request/kdfRequest.ts @@ -1,7 +1,7 @@ -import { PasswordRequest } from "./passwordRequest"; - import { KdfType } from "../../enums/kdfType"; +import { PasswordRequest } from "./passwordRequest"; + export class KdfRequest extends PasswordRequest { kdf: KdfType; kdfIterations: number; diff --git a/common/src/models/request/organization/organizationSsoRequest.ts b/common/src/models/request/organization/organizationSsoRequest.ts index 8a2cbab9..e7fdb61c 100644 --- a/common/src/models/request/organization/organizationSsoRequest.ts +++ b/common/src/models/request/organization/organizationSsoRequest.ts @@ -1,6 +1,6 @@ import { SsoConfigApi } from "../../api/ssoConfigApi"; export class OrganizationSsoRequest { - enabled: boolean = false; + enabled = false; data: SsoConfigApi; } diff --git a/common/src/models/request/organizationImportRequest.ts b/common/src/models/request/organizationImportRequest.ts index 4ff23df7..af7db2be 100644 --- a/common/src/models/request/organizationImportRequest.ts +++ b/common/src/models/request/organizationImportRequest.ts @@ -5,8 +5,8 @@ import { OrganizationImportMemberRequest } from "./organizationImportMemberReque export class OrganizationImportRequest { groups: OrganizationImportGroupRequest[] = []; members: OrganizationImportMemberRequest[] = []; - overwriteExisting: boolean = false; - largeImport: boolean = false; + overwriteExisting = false; + largeImport = false; constructor( model: diff --git a/common/src/models/request/organizationUserInviteRequest.ts b/common/src/models/request/organizationUserInviteRequest.ts index 5c4046af..7d037004 100644 --- a/common/src/models/request/organizationUserInviteRequest.ts +++ b/common/src/models/request/organizationUserInviteRequest.ts @@ -1,8 +1,8 @@ -import { SelectionReadOnlyRequest } from "./selectionReadOnlyRequest"; - import { OrganizationUserType } from "../../enums/organizationUserType"; import { PermissionsApi } from "../api/permissionsApi"; +import { SelectionReadOnlyRequest } from "./selectionReadOnlyRequest"; + export class OrganizationUserInviteRequest { emails: string[] = []; type: OrganizationUserType; diff --git a/common/src/models/request/organizationUserUpdateRequest.ts b/common/src/models/request/organizationUserUpdateRequest.ts index 2bd9dd62..ec9ae3bc 100644 --- a/common/src/models/request/organizationUserUpdateRequest.ts +++ b/common/src/models/request/organizationUserUpdateRequest.ts @@ -1,8 +1,8 @@ -import { SelectionReadOnlyRequest } from "./selectionReadOnlyRequest"; - import { OrganizationUserType } from "../../enums/organizationUserType"; import { PermissionsApi } from "../api/permissionsApi"; +import { SelectionReadOnlyRequest } from "./selectionReadOnlyRequest"; + export class OrganizationUserUpdateRequest { type: OrganizationUserType; accessAll: boolean; diff --git a/common/src/models/request/registerRequest.ts b/common/src/models/request/registerRequest.ts index 5c53ce59..8650c5c5 100644 --- a/common/src/models/request/registerRequest.ts +++ b/common/src/models/request/registerRequest.ts @@ -1,9 +1,8 @@ -import { KeysRequest } from "./keysRequest"; -import { ReferenceEventRequest } from "./referenceEventRequest"; - import { KdfType } from "../../enums/kdfType"; import { CaptchaProtectedRequest } from "./captchaProtectedRequest"; +import { KeysRequest } from "./keysRequest"; +import { ReferenceEventRequest } from "./referenceEventRequest"; export class RegisterRequest implements CaptchaProtectedRequest { masterPasswordHint: string; diff --git a/common/src/models/request/sendRequest.ts b/common/src/models/request/sendRequest.ts index 6fa481ee..1c77204c 100644 --- a/common/src/models/request/sendRequest.ts +++ b/common/src/models/request/sendRequest.ts @@ -1,8 +1,6 @@ import { SendType } from "../../enums/sendType"; - import { SendFileApi } from "../api/sendFileApi"; import { SendTextApi } from "../api/sendTextApi"; - import { Send } from "../domain/send"; export class SendRequest { diff --git a/common/src/models/request/sendWithIdRequest.ts b/common/src/models/request/sendWithIdRequest.ts index 903151e3..8591a57e 100644 --- a/common/src/models/request/sendWithIdRequest.ts +++ b/common/src/models/request/sendWithIdRequest.ts @@ -1,7 +1,7 @@ -import { SendRequest } from "./sendRequest"; - import { Send } from "../domain/send"; +import { SendRequest } from "./sendRequest"; + export class SendWithIdRequest extends SendRequest { id: string; diff --git a/common/src/models/request/setPasswordRequest.ts b/common/src/models/request/setPasswordRequest.ts index de3b8489..919a132f 100644 --- a/common/src/models/request/setPasswordRequest.ts +++ b/common/src/models/request/setPasswordRequest.ts @@ -1,7 +1,7 @@ -import { KeysRequest } from "./keysRequest"; - import { KdfType } from "../../enums/kdfType"; +import { KeysRequest } from "./keysRequest"; + export class SetPasswordRequest { masterPasswordHash: string; key: string; diff --git a/common/src/models/request/twoFactorProviderRequest.ts b/common/src/models/request/twoFactorProviderRequest.ts index d80ba5ba..9d606bc9 100644 --- a/common/src/models/request/twoFactorProviderRequest.ts +++ b/common/src/models/request/twoFactorProviderRequest.ts @@ -1,7 +1,7 @@ -import { SecretVerificationRequest } from "./secretVerificationRequest"; - import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; +import { SecretVerificationRequest } from "./secretVerificationRequest"; + export class TwoFactorProviderRequest extends SecretVerificationRequest { type: TwoFactorProviderType; } diff --git a/common/src/models/response/attachmentUploadDataResponse.ts b/common/src/models/response/attachmentUploadDataResponse.ts index e9651452..4520c309 100644 --- a/common/src/models/response/attachmentUploadDataResponse.ts +++ b/common/src/models/response/attachmentUploadDataResponse.ts @@ -1,4 +1,5 @@ import { FileUploadType } from "../../enums/fileUploadType"; + import { BaseResponse } from "./baseResponse"; import { CipherResponse } from "./cipherResponse"; diff --git a/common/src/models/response/billingResponse.ts b/common/src/models/response/billingResponse.ts index 91905cb2..8d09cf93 100644 --- a/common/src/models/response/billingResponse.ts +++ b/common/src/models/response/billingResponse.ts @@ -1,8 +1,8 @@ -import { BaseResponse } from "./baseResponse"; - import { PaymentMethodType } from "../../enums/paymentMethodType"; import { TransactionType } from "../../enums/transactionType"; +import { BaseResponse } from "./baseResponse"; + export class BillingResponse extends BaseResponse { balance: number; paymentSource: BillingSourceResponse; diff --git a/common/src/models/response/cipherResponse.ts b/common/src/models/response/cipherResponse.ts index 0be26463..5b461438 100644 --- a/common/src/models/response/cipherResponse.ts +++ b/common/src/models/response/cipherResponse.ts @@ -1,7 +1,3 @@ -import { AttachmentResponse } from "./attachmentResponse"; -import { BaseResponse } from "./baseResponse"; -import { PasswordHistoryResponse } from "./passwordHistoryResponse"; - import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CardApi } from "../api/cardApi"; import { FieldApi } from "../api/fieldApi"; @@ -9,6 +5,10 @@ import { IdentityApi } from "../api/identityApi"; import { LoginApi } from "../api/loginApi"; import { SecureNoteApi } from "../api/secureNoteApi"; +import { AttachmentResponse } from "./attachmentResponse"; +import { BaseResponse } from "./baseResponse"; +import { PasswordHistoryResponse } from "./passwordHistoryResponse"; + export class CipherResponse extends BaseResponse { id: string; organizationId: string; diff --git a/common/src/models/response/deviceResponse.ts b/common/src/models/response/deviceResponse.ts index e3857cc1..aac9ac6c 100644 --- a/common/src/models/response/deviceResponse.ts +++ b/common/src/models/response/deviceResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { DeviceType } from "../../enums/deviceType"; +import { BaseResponse } from "./baseResponse"; + export class DeviceResponse extends BaseResponse { id: string; name: number; diff --git a/common/src/models/response/emergencyAccessResponse.ts b/common/src/models/response/emergencyAccessResponse.ts index 703543b2..9ac5380d 100644 --- a/common/src/models/response/emergencyAccessResponse.ts +++ b/common/src/models/response/emergencyAccessResponse.ts @@ -1,6 +1,7 @@ import { EmergencyAccessStatusType } from "../../enums/emergencyAccessStatusType"; import { EmergencyAccessType } from "../../enums/emergencyAccessType"; import { KdfType } from "../../enums/kdfType"; + import { BaseResponse } from "./baseResponse"; import { CipherResponse } from "./cipherResponse"; diff --git a/common/src/models/response/errorResponse.ts b/common/src/models/response/errorResponse.ts index 6e19ace9..3a0d22e6 100644 --- a/common/src/models/response/errorResponse.ts +++ b/common/src/models/response/errorResponse.ts @@ -39,6 +39,7 @@ export class ErrorResponse extends BaseResponse { return this.message; } for (const key in this.validationErrors) { + // eslint-disable-next-line if (!this.validationErrors.hasOwnProperty(key)) { continue; } @@ -55,6 +56,7 @@ export class ErrorResponse extends BaseResponse { return messages; } for (const key in this.validationErrors) { + // eslint-disable-next-line if (!this.validationErrors.hasOwnProperty(key)) { continue; } diff --git a/common/src/models/response/eventResponse.ts b/common/src/models/response/eventResponse.ts index b56e172c..93e31955 100644 --- a/common/src/models/response/eventResponse.ts +++ b/common/src/models/response/eventResponse.ts @@ -1,8 +1,8 @@ -import { BaseResponse } from "./baseResponse"; - import { DeviceType } from "../../enums/deviceType"; import { EventType } from "../../enums/eventType"; +import { BaseResponse } from "./baseResponse"; + export class EventResponse extends BaseResponse { type: EventType; userId: string; diff --git a/common/src/models/response/identityTokenResponse.ts b/common/src/models/response/identityTokenResponse.ts index f17e144a..87b5d396 100644 --- a/common/src/models/response/identityTokenResponse.ts +++ b/common/src/models/response/identityTokenResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { KdfType } from "../../enums/kdfType"; +import { BaseResponse } from "./baseResponse"; + export class IdentityTokenResponse extends BaseResponse { accessToken: string; expiresIn: number; diff --git a/common/src/models/response/identityTwoFactorResponse.ts b/common/src/models/response/identityTwoFactorResponse.ts index bb826537..dc7dfde7 100644 --- a/common/src/models/response/identityTwoFactorResponse.ts +++ b/common/src/models/response/identityTwoFactorResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; +import { BaseResponse } from "./baseResponse"; + export class IdentityTwoFactorResponse extends BaseResponse { twoFactorProviders: TwoFactorProviderType[]; twoFactorProviders2 = new Map(); @@ -14,6 +14,7 @@ export class IdentityTwoFactorResponse extends BaseResponse { const twoFactorProviders2 = this.getResponseProperty("TwoFactorProviders2"); if (twoFactorProviders2 != null) { for (const prop in twoFactorProviders2) { + // eslint-disable-next-line if (twoFactorProviders2.hasOwnProperty(prop)) { this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]); } diff --git a/common/src/models/response/notificationResponse.ts b/common/src/models/response/notificationResponse.ts index 79bbdb0e..f23de8fe 100644 --- a/common/src/models/response/notificationResponse.ts +++ b/common/src/models/response/notificationResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { NotificationType } from "../../enums/notificationType"; +import { BaseResponse } from "./baseResponse"; + export class NotificationResponse extends BaseResponse { contextId: string; type: NotificationType; @@ -36,6 +36,7 @@ export class NotificationResponse extends BaseResponse { case NotificationType.SyncSendUpdate: case NotificationType.SyncSendDelete: this.payload = new SyncSendNotification(payload); + break; default: break; } diff --git a/common/src/models/response/organizationResponse.ts b/common/src/models/response/organizationResponse.ts index c1938253..addb2a28 100644 --- a/common/src/models/response/organizationResponse.ts +++ b/common/src/models/response/organizationResponse.ts @@ -1,8 +1,8 @@ +import { PlanType } from "../../enums/planType"; + import { BaseResponse } from "./baseResponse"; import { PlanResponse } from "./planResponse"; -import { PlanType } from "../../enums/planType"; - export class OrganizationResponse extends BaseResponse { id: string; identifier: string; diff --git a/common/src/models/response/organizationUserResponse.ts b/common/src/models/response/organizationUserResponse.ts index 493d2661..3e49375b 100644 --- a/common/src/models/response/organizationUserResponse.ts +++ b/common/src/models/response/organizationUserResponse.ts @@ -1,11 +1,10 @@ -import { BaseResponse } from "./baseResponse"; -import { SelectionReadOnlyResponse } from "./selectionReadOnlyResponse"; - -import { PermissionsApi } from "../api/permissionsApi"; - import { KdfType } from "../../enums/kdfType"; import { OrganizationUserStatusType } from "../../enums/organizationUserStatusType"; import { OrganizationUserType } from "../../enums/organizationUserType"; +import { PermissionsApi } from "../api/permissionsApi"; + +import { BaseResponse } from "./baseResponse"; +import { SelectionReadOnlyResponse } from "./selectionReadOnlyResponse"; export class OrganizationUserResponse extends BaseResponse { id: string; diff --git a/common/src/models/response/policyResponse.ts b/common/src/models/response/policyResponse.ts index 328491cf..d38375ef 100644 --- a/common/src/models/response/policyResponse.ts +++ b/common/src/models/response/policyResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { PolicyType } from "../../enums/policyType"; +import { BaseResponse } from "./baseResponse"; + export class PolicyResponse extends BaseResponse { id: string; organizationId: string; diff --git a/common/src/models/response/preloginResponse.ts b/common/src/models/response/preloginResponse.ts index d5396830..7756f8ed 100644 --- a/common/src/models/response/preloginResponse.ts +++ b/common/src/models/response/preloginResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { KdfType } from "../../enums/kdfType"; +import { BaseResponse } from "./baseResponse"; + export class PreloginResponse extends BaseResponse { kdf: KdfType; kdfIterations: number; diff --git a/common/src/models/response/profileOrganizationResponse.ts b/common/src/models/response/profileOrganizationResponse.ts index efa2e3f8..9c992e54 100644 --- a/common/src/models/response/profileOrganizationResponse.ts +++ b/common/src/models/response/profileOrganizationResponse.ts @@ -1,10 +1,10 @@ -import { BaseResponse } from "./baseResponse"; - import { OrganizationUserStatusType } from "../../enums/organizationUserStatusType"; import { OrganizationUserType } from "../../enums/organizationUserType"; import { ProductType } from "../../enums/productType"; import { PermissionsApi } from "../api/permissionsApi"; +import { BaseResponse } from "./baseResponse"; + export class ProfileOrganizationResponse extends BaseResponse { id: string; name: string; diff --git a/common/src/models/response/profileProviderResponse.ts b/common/src/models/response/profileProviderResponse.ts index 04610080..84e8bbf6 100644 --- a/common/src/models/response/profileProviderResponse.ts +++ b/common/src/models/response/profileProviderResponse.ts @@ -1,10 +1,9 @@ -import { BaseResponse } from "./baseResponse"; - import { ProviderUserStatusType } from "../../enums/providerUserStatusType"; import { ProviderUserType } from "../../enums/providerUserType"; - import { PermissionsApi } from "../api/permissionsApi"; +import { BaseResponse } from "./baseResponse"; + export class ProfileProviderResponse extends BaseResponse { id: string; name: string; diff --git a/common/src/models/response/provider/providerUserResponse.ts b/common/src/models/response/provider/providerUserResponse.ts index 4aad5814..cf1a181c 100644 --- a/common/src/models/response/provider/providerUserResponse.ts +++ b/common/src/models/response/provider/providerUserResponse.ts @@ -1,9 +1,7 @@ -import { BaseResponse } from "../baseResponse"; - -import { PermissionsApi } from "../../api/permissionsApi"; - import { ProviderUserStatusType } from "../../../enums/providerUserStatusType"; import { ProviderUserType } from "../../../enums/providerUserType"; +import { PermissionsApi } from "../../api/permissionsApi"; +import { BaseResponse } from "../baseResponse"; export class ProviderUserResponse extends BaseResponse { id: string; diff --git a/common/src/models/response/sendAccessResponse.ts b/common/src/models/response/sendAccessResponse.ts index 2742c7f9..e98a9d05 100644 --- a/common/src/models/response/sendAccessResponse.ts +++ b/common/src/models/response/sendAccessResponse.ts @@ -1,10 +1,9 @@ -import { BaseResponse } from "./baseResponse"; - import { SendType } from "../../enums/sendType"; - import { SendFileApi } from "../api/sendFileApi"; import { SendTextApi } from "../api/sendTextApi"; +import { BaseResponse } from "./baseResponse"; + export class SendAccessResponse extends BaseResponse { id: string; type: SendType; diff --git a/common/src/models/response/sendResponse.ts b/common/src/models/response/sendResponse.ts index edb009c3..28750725 100644 --- a/common/src/models/response/sendResponse.ts +++ b/common/src/models/response/sendResponse.ts @@ -1,10 +1,9 @@ -import { BaseResponse } from "./baseResponse"; - import { SendType } from "../../enums/sendType"; - import { SendFileApi } from "../api/sendFileApi"; import { SendTextApi } from "../api/sendTextApi"; +import { BaseResponse } from "./baseResponse"; + export class SendResponse extends BaseResponse { id: string; accessId: string; diff --git a/common/src/models/response/twoFactorProviderResponse.ts b/common/src/models/response/twoFactorProviderResponse.ts index 6f149136..4ccd86cb 100644 --- a/common/src/models/response/twoFactorProviderResponse.ts +++ b/common/src/models/response/twoFactorProviderResponse.ts @@ -1,7 +1,7 @@ -import { BaseResponse } from "./baseResponse"; - import { TwoFactorProviderType } from "../../enums/twoFactorProviderType"; +import { BaseResponse } from "./baseResponse"; + export class TwoFactorProviderResponse extends BaseResponse { enabled: boolean; type: TwoFactorProviderType; diff --git a/common/src/models/response/twoFactorWebAuthnResponse.ts b/common/src/models/response/twoFactorWebAuthnResponse.ts index 9c855b76..21ab66a0 100644 --- a/common/src/models/response/twoFactorWebAuthnResponse.ts +++ b/common/src/models/response/twoFactorWebAuthnResponse.ts @@ -1,4 +1,5 @@ import { Utils } from "../../misc/utils"; + import { BaseResponse } from "./baseResponse"; export class TwoFactorWebAuthnResponse extends BaseResponse { diff --git a/common/src/models/view/attachmentView.ts b/common/src/models/view/attachmentView.ts index 7bf8186f..4ebbec7e 100644 --- a/common/src/models/view/attachmentView.ts +++ b/common/src/models/view/attachmentView.ts @@ -1,8 +1,8 @@ -import { View } from "./view"; - import { Attachment } from "../domain/attachment"; import { SymmetricCryptoKey } from "../domain/symmetricCryptoKey"; +import { View } from "./view"; + export class AttachmentView implements View { id: string = null; url: string = null; diff --git a/common/src/models/view/cardView.ts b/common/src/models/view/cardView.ts index 4aa3a999..769fa440 100644 --- a/common/src/models/view/cardView.ts +++ b/common/src/models/view/cardView.ts @@ -1,11 +1,8 @@ -import { ItemView } from "./itemView"; - -import { Card } from "../domain/card"; - import { CardLinkedId as LinkedId } from "../../enums/linkedIdType"; - import { linkedFieldOption } from "../../misc/linkedFieldOption.decorator"; +import { ItemView } from "./itemView"; + export class CardView extends ItemView { @linkedFieldOption(LinkedId.CardholderName) cardholderName: string = null; @@ -16,13 +13,11 @@ export class CardView extends ItemView { @linkedFieldOption(LinkedId.Code, "securityCode") code: string = null; - // tslint:disable private _brand: string = null; private _number: string = null; private _subTitle: string = null; - // tslint:enable - constructor(c?: Card) { + constructor() { super(); } diff --git a/common/src/models/view/cipherView.ts b/common/src/models/view/cipherView.ts index 073b2a2c..3d1f16c1 100644 --- a/common/src/models/view/cipherView.ts +++ b/common/src/models/view/cipherView.ts @@ -1,14 +1,12 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; import { LinkedIdType } from "../../enums/linkedIdType"; - import { Cipher } from "../domain/cipher"; import { AttachmentView } from "./attachmentView"; import { CardView } from "./cardView"; import { FieldView } from "./fieldView"; import { IdentityView } from "./identityView"; -import { ItemView } from "./itemView"; import { LoginView } from "./loginView"; import { PasswordHistoryView } from "./passwordHistoryView"; import { SecureNoteView } from "./secureNoteView"; diff --git a/common/src/models/view/collectionView.ts b/common/src/models/view/collectionView.ts index 0f580837..d230e591 100644 --- a/common/src/models/view/collectionView.ts +++ b/common/src/models/view/collectionView.ts @@ -1,10 +1,9 @@ -import { View } from "./view"; - import { Collection } from "../domain/collection"; import { ITreeNodeObject } from "../domain/treeNode"; - import { CollectionGroupDetailsResponse } from "../response/collectionResponse"; +import { View } from "./view"; + export class CollectionView implements View, ITreeNodeObject { id: string = null; organizationId: string = null; diff --git a/common/src/models/view/fieldView.ts b/common/src/models/view/fieldView.ts index c1c1b1e4..46d42018 100644 --- a/common/src/models/view/fieldView.ts +++ b/common/src/models/view/fieldView.ts @@ -1,16 +1,15 @@ import { FieldType } from "../../enums/fieldType"; import { LinkedIdType } from "../../enums/linkedIdType"; +import { Field } from "../domain/field"; import { View } from "./view"; -import { Field } from "../domain/field"; - export class FieldView implements View { name: string = null; value: string = null; type: FieldType = null; - newField: boolean = false; // Marks if the field is new and hasn't been saved - showValue: boolean = false; + newField = false; // Marks if the field is new and hasn't been saved + showValue = false; linkedId: LinkedIdType = null; constructor(f?: Field) { diff --git a/common/src/models/view/folderView.ts b/common/src/models/view/folderView.ts index 5ecd8822..731acffb 100644 --- a/common/src/models/view/folderView.ts +++ b/common/src/models/view/folderView.ts @@ -1,8 +1,8 @@ -import { View } from "./view"; - import { Folder } from "../domain/folder"; import { ITreeNodeObject } from "../domain/treeNode"; +import { View } from "./view"; + export class FolderView implements View, ITreeNodeObject { id: string = null; name: string = null; diff --git a/common/src/models/view/identityView.ts b/common/src/models/view/identityView.ts index 10e6616e..26305636 100644 --- a/common/src/models/view/identityView.ts +++ b/common/src/models/view/identityView.ts @@ -1,12 +1,8 @@ -import { ItemView } from "./itemView"; - -import { Identity } from "../domain/identity"; - +import { IdentityLinkedId as LinkedId } from "../../enums/linkedIdType"; +import { linkedFieldOption } from "../../misc/linkedFieldOption.decorator"; import { Utils } from "../../misc/utils"; -import { IdentityLinkedId as LinkedId } from "../../enums/linkedIdType"; - -import { linkedFieldOption } from "../../misc/linkedFieldOption.decorator"; +import { ItemView } from "./itemView"; export class IdentityView extends ItemView { @linkedFieldOption(LinkedId.Title) @@ -42,13 +38,11 @@ export class IdentityView extends ItemView { @linkedFieldOption(LinkedId.LicenseNumber) licenseNumber: string = null; - // tslint:disable private _firstName: string = null; private _lastName: string = null; private _subTitle: string = null; - // tslint:enable - constructor(i?: Identity) { + constructor() { super(); } diff --git a/common/src/models/view/itemView.ts b/common/src/models/view/itemView.ts index edd85b7d..3a557ffa 100644 --- a/common/src/models/view/itemView.ts +++ b/common/src/models/view/itemView.ts @@ -1,7 +1,7 @@ -import { View } from "./view"; - import { LinkedMetadata } from "../../misc/linkedFieldOption.decorator"; +import { View } from "./view"; + export abstract class ItemView implements View { linkedFieldOptions: Map; abstract get subTitle(): string; diff --git a/common/src/models/view/loginUriView.ts b/common/src/models/view/loginUriView.ts index cd5dc2b8..cca9520d 100644 --- a/common/src/models/view/loginUriView.ts +++ b/common/src/models/view/loginUriView.ts @@ -1,10 +1,8 @@ import { UriMatchType } from "../../enums/uriMatchType"; - -import { View } from "./view"; - +import { Utils } from "../../misc/utils"; import { LoginUri } from "../domain/loginUri"; -import { Utils } from "../../misc/utils"; +import { View } from "./view"; const CanLaunchWhitelist = [ "https://", @@ -25,13 +23,11 @@ const CanLaunchWhitelist = [ export class LoginUriView implements View { match: UriMatchType = null; - // tslint:disable private _uri: string = null; private _domain: string = null; private _hostname: string = null; private _host: string = null; private _canLaunch: boolean = null; - // tslint:enable constructor(u?: LoginUri) { if (!u) { diff --git a/common/src/models/view/loginView.ts b/common/src/models/view/loginView.ts index b301f532..e86dd14b 100644 --- a/common/src/models/view/loginView.ts +++ b/common/src/models/view/loginView.ts @@ -1,13 +1,10 @@ -import { ItemView } from "./itemView"; -import { LoginUriView } from "./loginUriView"; - +import { LoginLinkedId as LinkedId } from "../../enums/linkedIdType"; +import { linkedFieldOption } from "../../misc/linkedFieldOption.decorator"; import { Utils } from "../../misc/utils"; - import { Login } from "../domain/login"; -import { LoginLinkedId as LinkedId } from "../../enums/linkedIdType"; - -import { linkedFieldOption } from "../../misc/linkedFieldOption.decorator"; +import { ItemView } from "./itemView"; +import { LoginUriView } from "./loginUriView"; export class LoginView extends ItemView { @linkedFieldOption(LinkedId.Username) diff --git a/common/src/models/view/passwordHistoryView.ts b/common/src/models/view/passwordHistoryView.ts index 637b9b4f..aa780079 100644 --- a/common/src/models/view/passwordHistoryView.ts +++ b/common/src/models/view/passwordHistoryView.ts @@ -1,7 +1,7 @@ -import { View } from "./view"; - import { Password } from "../domain/password"; +import { View } from "./view"; + export class PasswordHistoryView implements View { password: string = null; lastUsedDate: Date = null; diff --git a/common/src/models/view/secureNoteView.ts b/common/src/models/view/secureNoteView.ts index c660ac9f..c324b07e 100644 --- a/common/src/models/view/secureNoteView.ts +++ b/common/src/models/view/secureNoteView.ts @@ -1,9 +1,8 @@ import { SecureNoteType } from "../../enums/secureNoteType"; +import { SecureNote } from "../domain/secureNote"; import { ItemView } from "./itemView"; -import { SecureNote } from "../domain/secureNote"; - export class SecureNoteView extends ItemView { type: SecureNoteType = null; diff --git a/common/src/models/view/sendAccessView.ts b/common/src/models/view/sendAccessView.ts index 1b848169..71e5276a 100644 --- a/common/src/models/view/sendAccessView.ts +++ b/common/src/models/view/sendAccessView.ts @@ -1,5 +1,4 @@ import { SendType } from "../../enums/sendType"; - import { SendAccess } from "../domain/sendAccess"; import { SendFileView } from "./sendFileView"; diff --git a/common/src/models/view/sendFileView.ts b/common/src/models/view/sendFileView.ts index deff8700..7d37f2de 100644 --- a/common/src/models/view/sendFileView.ts +++ b/common/src/models/view/sendFileView.ts @@ -1,7 +1,7 @@ -import { View } from "./view"; - import { SendFile } from "../domain/sendFile"; +import { View } from "./view"; + export class SendFileView implements View { id: string = null; size: string = null; diff --git a/common/src/models/view/sendTextView.ts b/common/src/models/view/sendTextView.ts index 5c1f018e..a2c6b571 100644 --- a/common/src/models/view/sendTextView.ts +++ b/common/src/models/view/sendTextView.ts @@ -1,7 +1,7 @@ -import { View } from "./view"; - import { SendText } from "../domain/sendText"; +import { View } from "./view"; + export class SendTextView implements View { text: string = null; hidden: boolean; diff --git a/common/src/models/view/sendView.ts b/common/src/models/view/sendView.ts index 48aa887e..1a2a214f 100644 --- a/common/src/models/view/sendView.ts +++ b/common/src/models/view/sendView.ts @@ -1,6 +1,5 @@ import { SendType } from "../../enums/sendType"; import { Utils } from "../../misc/utils"; - import { Send } from "../domain/send"; import { SymmetricCryptoKey } from "../domain/symmetricCryptoKey"; @@ -19,13 +18,13 @@ export class SendView implements View { text = new SendTextView(); file = new SendFileView(); maxAccessCount?: number = null; - accessCount: number = 0; + accessCount = 0; revisionDate: Date = null; deletionDate: Date = null; expirationDate: Date = null; password: string = null; - disabled: boolean = false; - hideEmail: boolean = false; + disabled = false; + hideEmail = false; constructor(s?: Send) { if (!s) { diff --git a/common/src/services/api.service.ts b/common/src/services/api.service.ts index 5c51e449..5e51b448 100644 --- a/common/src/services/api.service.ts +++ b/common/src/services/api.service.ts @@ -1,12 +1,12 @@ -import { ClientType } from "../enums/clientType"; -import { DeviceType } from "../enums/deviceType"; -import { PolicyType } from "../enums/policyType"; - import { ApiService as ApiServiceAbstraction } from "../abstractions/api.service"; import { EnvironmentService } from "../abstractions/environment.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { TokenService } from "../abstractions/token.service"; - +import { DeviceType } from "../enums/deviceType"; +import { PolicyType } from "../enums/policyType"; +import { Utils } from "../misc/utils"; +import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; +import { VerifyOTPRequest } from "../models/request/account/verifyOTPRequest"; import { AttachmentRequest } from "../models/request/attachmentRequest"; import { BitPayInvoiceRequest } from "../models/request/bitPayInvoiceRequest"; import { CipherBulkDeleteRequest } from "../models/request/cipherBulkDeleteRequest"; @@ -36,6 +36,7 @@ import { ImportCiphersRequest } from "../models/request/importCiphersRequest"; import { ImportDirectoryRequest } from "../models/request/importDirectoryRequest"; import { ImportOrganizationCiphersRequest } from "../models/request/importOrganizationCiphersRequest"; import { KdfRequest } from "../models/request/kdfRequest"; +import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKeyRequest"; import { KeysRequest } from "../models/request/keysRequest"; import { OrganizationSponsorshipCreateRequest } from "../models/request/organization/organizationSponsorshipCreateRequest"; import { OrganizationSponsorshipRedeemRequest } from "../models/request/organization/organizationSponsorshipRedeemRequest"; @@ -96,9 +97,6 @@ import { UpdateTwoFactorYubioOtpRequest } from "../models/request/updateTwoFacto import { VerifyBankRequest } from "../models/request/verifyBankRequest"; import { VerifyDeleteRecoverRequest } from "../models/request/verifyDeleteRecoverRequest"; import { VerifyEmailRequest } from "../models/request/verifyEmailRequest"; - -import { Utils } from "../misc/utils"; - import { ApiKeyResponse } from "../models/response/apiKeyResponse"; import { AttachmentResponse } from "../models/response/attachmentResponse"; import { AttachmentUploadDataResponse } from "../models/response/attachmentUploadDataResponse"; @@ -123,6 +121,7 @@ import { GroupDetailsResponse, GroupResponse } from "../models/response/groupRes import { IdentityCaptchaResponse } from "../models/response/identityCaptchaResponse"; import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; +import { KeyConnectorUserKeyResponse } from "../models/response/keyConnectorUserKeyResponse"; import { ListResponse } from "../models/response/listResponse"; import { OrganizationSsoResponse } from "../models/response/organization/organizationSsoResponse"; import { OrganizationAutoEnrollStatusResponse } from "../models/response/organizationAutoEnrollStatusResponse"; @@ -166,15 +165,12 @@ import { TwoFactorDuoResponse } from "../models/response/twoFactorDuoResponse"; import { TwoFactorEmailResponse } from "../models/response/twoFactorEmailResponse"; import { TwoFactorProviderResponse } from "../models/response/twoFactorProviderResponse"; import { TwoFactorRecoverResponse } from "../models/response/twoFactorRescoverResponse"; -import { TwoFactorWebAuthnResponse } from "../models/response/twoFactorWebAuthnResponse"; -import { ChallengeResponse } from "../models/response/twoFactorWebAuthnResponse"; +import { + TwoFactorWebAuthnResponse, + ChallengeResponse, +} from "../models/response/twoFactorWebAuthnResponse"; import { TwoFactorYubiKeyResponse } from "../models/response/twoFactorYubiKeyResponse"; import { UserKeyResponse } from "../models/response/userKeyResponse"; - -import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; -import { VerifyOTPRequest } from "../models/request/account/verifyOTPRequest"; -import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKeyRequest"; -import { KeyConnectorUserKeyResponse } from "../models/response/keyConnectorUserKeyResponse"; import { SendAccessView } from "../models/view/sendAccessView"; export class ApiService implements ApiServiceAbstraction { @@ -1620,7 +1616,7 @@ export class ApiService implements ApiServiceAbstraction { id: string, request: EmergencyAccessPasswordRequest ): Promise { - const r = await this.send("POST", "/emergency-access/" + id + "/password", request, true, true); + await this.send("POST", "/emergency-access/" + id + "/password", request, true, true); } async postEmergencyAccessView(id: string): Promise { diff --git a/common/src/services/appId.service.ts b/common/src/services/appId.service.ts index f1841a4c..a6406fdc 100644 --- a/common/src/services/appId.service.ts +++ b/common/src/services/appId.service.ts @@ -1,8 +1,7 @@ -import { Utils } from "../misc/utils"; - import { AppIdService as AppIdServiceAbstraction } from "../abstractions/appId.service"; import { StorageService } from "../abstractions/storage.service"; import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; +import { Utils } from "../misc/utils"; export class AppIdService implements AppIdServiceAbstraction { constructor(private storageService: StorageService) {} diff --git a/common/src/services/audit.service.ts b/common/src/services/audit.service.ts index 2136b442..4ceebf67 100644 --- a/common/src/services/audit.service.ts +++ b/common/src/services/audit.service.ts @@ -1,10 +1,8 @@ import { ApiService } from "../abstractions/api.service"; import { AuditService as AuditServiceAbstraction } from "../abstractions/audit.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; - import { throttle } from "../misc/throttle"; import { Utils } from "../misc/utils"; - import { BreachAccountResponse } from "../models/response/breachAccountResponse"; import { ErrorResponse } from "../models/response/errorResponse"; diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 3bd4f34d..44bf539f 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -1,20 +1,3 @@ -import { KdfType } from "../enums/kdfType"; - -import { ApiLogInStrategy } from "../misc/logInStrategies/apiLogin.strategy"; -import { PasswordLogInStrategy } from "../misc/logInStrategies/passwordLogin.strategy"; -import { SsoLogInStrategy } from "../misc/logInStrategies/ssoLogin.strategy"; -import { AuthResult } from "../models/domain/authResult"; -import { - ApiLogInCredentials, - PasswordLogInCredentials, - SsoLogInCredentials, -} from "../models/domain/logInCredentials"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - -import { PreloginRequest } from "../models/request/preloginRequest"; - -import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; - import { ApiService } from "../abstractions/api.service"; import { AppIdService } from "../abstractions/appId.service"; import { AuthService as AuthServiceAbstraction } from "../abstractions/auth.service"; @@ -27,8 +10,20 @@ import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { StateService } from "../abstractions/state.service"; import { TokenService } from "../abstractions/token.service"; import { TwoFactorService } from "../abstractions/twoFactor.service"; - import { AuthenticationType } from "../enums/authenticationType"; +import { KdfType } from "../enums/kdfType"; +import { ApiLogInStrategy } from "../misc/logInStrategies/apiLogin.strategy"; +import { PasswordLogInStrategy } from "../misc/logInStrategies/passwordLogin.strategy"; +import { SsoLogInStrategy } from "../misc/logInStrategies/ssoLogin.strategy"; +import { AuthResult } from "../models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "../models/domain/logInCredentials"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; +import { PreloginRequest } from "../models/request/preloginRequest"; export class AuthService implements AuthServiceAbstraction { get email(): string { @@ -122,7 +117,7 @@ export class AuthService implements AuthServiceAbstraction { } } - logOut(callback: Function) { + logOut(callback: () => void) { callback(); this.messagingService.send("loggedOut"); } diff --git a/common/src/services/azureFileUpload.service.ts b/common/src/services/azureFileUpload.service.ts index 300ee7b7..d7017bfb 100644 --- a/common/src/services/azureFileUpload.service.ts +++ b/common/src/services/azureFileUpload.service.ts @@ -1,7 +1,5 @@ import { LogService } from "../abstractions/log.service"; - import { Utils } from "../misc/utils"; - import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; const MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB @@ -56,6 +54,7 @@ export class AzureFileUploadService { ); } + // eslint-disable-next-line try { while (blockIndex < numBlocks) { url = await this.renewUrlIfNecessary(url, renewalCallback); diff --git a/common/src/services/bitwardenFileUpload.service.ts b/common/src/services/bitwardenFileUpload.service.ts index 3f54f73e..dd189e3e 100644 --- a/common/src/services/bitwardenFileUpload.service.ts +++ b/common/src/services/bitwardenFileUpload.service.ts @@ -1,8 +1,6 @@ import { ApiService } from "../abstractions/api.service"; - -import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; - import { Utils } from "../misc/utils"; +import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; export class BitwardenFileUploadService { constructor(private apiService: ApiService) {} diff --git a/common/src/services/cipher.service.ts b/common/src/services/cipher.service.ts index e9002146..91cfb464 100644 --- a/common/src/services/cipher.service.ts +++ b/common/src/services/cipher.service.ts @@ -1,9 +1,18 @@ +import { ApiService } from "../abstractions/api.service"; +import { CipherService as CipherServiceAbstraction } from "../abstractions/cipher.service"; +import { CryptoService } from "../abstractions/crypto.service"; +import { FileUploadService } from "../abstractions/fileUpload.service"; +import { I18nService } from "../abstractions/i18n.service"; +import { LogService } from "../abstractions/log.service"; +import { SearchService } from "../abstractions/search.service"; +import { SettingsService } from "../abstractions/settings.service"; +import { StateService } from "../abstractions/state.service"; import { CipherType } from "../enums/cipherType"; import { FieldType } from "../enums/fieldType"; import { UriMatchType } from "../enums/uriMatchType"; - +import { sequentialize } from "../misc/sequentialize"; +import { Utils } from "../misc/utils"; import { CipherData } from "../models/data/cipherData"; - import { Attachment } from "../models/domain/attachment"; import { Card } from "../models/domain/card"; import { Cipher } from "../models/domain/cipher"; @@ -16,8 +25,8 @@ import { Login } from "../models/domain/login"; import { LoginUri } from "../models/domain/loginUri"; import { Password } from "../models/domain/password"; import { SecureNote } from "../models/domain/secureNote"; +import { SortedCiphersCache } from "../models/domain/sortedCiphersCache"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { AttachmentRequest } from "../models/request/attachmentRequest"; import { CipherBulkDeleteRequest } from "../models/request/cipherBulkDeleteRequest"; import { CipherBulkMoveRequest } from "../models/request/cipherBulkMoveRequest"; @@ -27,31 +36,14 @@ import { CipherCollectionsRequest } from "../models/request/cipherCollectionsReq import { CipherCreateRequest } from "../models/request/cipherCreateRequest"; import { CipherRequest } from "../models/request/cipherRequest"; import { CipherShareRequest } from "../models/request/cipherShareRequest"; - import { CipherResponse } from "../models/response/cipherResponse"; import { ErrorResponse } from "../models/response/errorResponse"; - import { AttachmentView } from "../models/view/attachmentView"; import { CipherView } from "../models/view/cipherView"; import { FieldView } from "../models/view/fieldView"; import { PasswordHistoryView } from "../models/view/passwordHistoryView"; import { View } from "../models/view/view"; -import { SortedCiphersCache } from "../models/domain/sortedCiphersCache"; - -import { ApiService } from "../abstractions/api.service"; -import { CipherService as CipherServiceAbstraction } from "../abstractions/cipher.service"; -import { CryptoService } from "../abstractions/crypto.service"; -import { FileUploadService } from "../abstractions/fileUpload.service"; -import { I18nService } from "../abstractions/i18n.service"; -import { SearchService } from "../abstractions/search.service"; -import { SettingsService } from "../abstractions/settings.service"; -import { StateService } from "../abstractions/state.service"; - -import { LogService } from "../abstractions/log.service"; -import { sequentialize } from "../misc/sequentialize"; -import { Utils } from "../misc/utils"; - const DomainMatchBlacklist = new Map>([ ["google.com", new Set(["script.google.com"])], ]); @@ -308,6 +300,7 @@ export class CipherService implements CipherServiceAbstraction { async get(id: string): Promise { const ciphers = await this.stateService.getEncryptedCiphers(); + // eslint-disable-next-line if (ciphers == null || !ciphers.hasOwnProperty(id)) { return null; } @@ -321,6 +314,7 @@ export class CipherService implements CipherServiceAbstraction { const ciphers = await this.stateService.getEncryptedCiphers(); const response: Cipher[] = []; for (const id in ciphers) { + // eslint-disable-next-line if (ciphers.hasOwnProperty(id)) { response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null)); } @@ -359,10 +353,7 @@ export class CipherService implements CipherServiceAbstraction { return decCiphers; } - async getAllDecryptedForGrouping( - groupingId: string, - folder: boolean = true - ): Promise { + async getAllDecryptedForGrouping(groupingId: string, folder = true): Promise { const ciphers = await this.getAllDecrypted(); return ciphers.filter((cipher) => { @@ -451,12 +442,13 @@ export class CipherService implements CipherServiceAbstraction { } } break; - case UriMatchType.Host: + case UriMatchType.Host: { const urlHost = Utils.getHost(url); if (urlHost != null && urlHost === Utils.getHost(u.uri)) { return true; } break; + } case UriMatchType.Exact: if (url === u.uri) { return true; @@ -506,14 +498,11 @@ export class CipherService implements CipherServiceAbstraction { } } - async getLastUsedForUrl(url: string, autofillOnPageLoad: boolean = false): Promise { + async getLastUsedForUrl(url: string, autofillOnPageLoad = false): Promise { return this.getCipherForUrl(url, true, false, autofillOnPageLoad); } - async getLastLaunchedForUrl( - url: string, - autofillOnPageLoad: boolean = false - ): Promise { + async getLastLaunchedForUrl(url: string, autofillOnPageLoad = false): Promise { return this.getCipherForUrl(url, false, true, autofillOnPageLoad); } @@ -690,7 +679,7 @@ export class CipherService implements CipherServiceAbstraction { reject(e); } }; - reader.onerror = (_evt) => { + reader.onerror = () => { reject("Error reading file."); }; }); @@ -845,6 +834,7 @@ export class CipherService implements CipherServiceAbstraction { } ids.forEach((id) => { + // eslint-disable-next-line if (ciphers.hasOwnProperty(id)) { ciphers[id].folderId = folderId; } @@ -888,6 +878,7 @@ export class CipherService implements CipherServiceAbstraction { async deleteAttachment(id: string, attachmentId: string): Promise { const ciphers = await this.stateService.getEncryptedCiphers(); + // eslint-disable-next-line if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) { return; } @@ -1119,11 +1110,11 @@ export class CipherService implements CipherServiceAbstraction { const self = this; for (const prop in map) { + // eslint-disable-next-line if (!map.hasOwnProperty(prop)) { continue; } - // tslint:disable-next-line (function (theProp, theObj) { const p = Promise.resolve() .then(() => { diff --git a/common/src/services/collection.service.ts b/common/src/services/collection.service.ts index 7f555e63..4d3563d7 100644 --- a/common/src/services/collection.service.ts +++ b/common/src/services/collection.service.ts @@ -1,17 +1,13 @@ -import { CollectionData } from "../models/data/collectionData"; - -import { Collection } from "../models/domain/collection"; -import { TreeNode } from "../models/domain/treeNode"; - -import { CollectionView } from "../models/view/collectionView"; - import { CollectionService as CollectionServiceAbstraction } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; import { StateService } from "../abstractions/state.service"; - import { ServiceUtils } from "../misc/serviceUtils"; import { Utils } from "../misc/utils"; +import { CollectionData } from "../models/data/collectionData"; +import { Collection } from "../models/domain/collection"; +import { TreeNode } from "../models/domain/treeNode"; +import { CollectionView } from "../models/view/collectionView"; const NestingDelimiter = "/"; @@ -57,6 +53,7 @@ export class CollectionService implements CollectionServiceAbstraction { async get(id: string): Promise { const collections = await this.stateService.getEncryptedCollections(); + // eslint-disable-next-line if (collections == null || !collections.hasOwnProperty(id)) { return null; } @@ -68,6 +65,7 @@ export class CollectionService implements CollectionServiceAbstraction { const collections = await this.stateService.getEncryptedCollections(); const response: Collection[] = []; for (const id in collections) { + // eslint-disable-next-line if (collections.hasOwnProperty(id)) { response.push(new Collection(collections[id])); } diff --git a/common/src/services/consoleLog.service.ts b/common/src/services/consoleLog.service.ts index 1ecd2499..9959ef62 100644 --- a/common/src/services/consoleLog.service.ts +++ b/common/src/services/consoleLog.service.ts @@ -1,8 +1,7 @@ -import { LogLevelType } from "../enums/logLevelType"; +import * as hrtime from "browser-hrtime"; import { LogService as LogServiceAbstraction } from "../abstractions/log.service"; - -import * as hrtime from "browser-hrtime"; +import { LogLevelType } from "../enums/logLevelType"; export class ConsoleLogService implements LogServiceAbstraction { protected timersMap: Map = new Map(); @@ -38,19 +37,19 @@ export class ConsoleLogService implements LogServiceAbstraction { switch (level) { case LogLevelType.Debug: - // tslint:disable-next-line + // eslint-disable-next-line console.log(message); break; case LogLevelType.Info: - // tslint:disable-next-line + // eslint-disable-next-line console.log(message); break; case LogLevelType.Warning: - // tslint:disable-next-line + // eslint-disable-next-line console.warn(message); break; case LogLevelType.Error: - // tslint:disable-next-line + // eslint-disable-next-line console.error(message); break; default: @@ -58,13 +57,13 @@ export class ConsoleLogService implements LogServiceAbstraction { } } - time(label: string = "default") { + time(label = "default") { if (!this.timersMap.has(label)) { this.timersMap.set(label, hrtime()); } } - timeEnd(label: string = "default"): [number, number] { + timeEnd(label = "default"): [number, number] { const elapsed = hrtime(this.timersMap.get(label)); this.timersMap.delete(label); this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`); diff --git a/common/src/services/crypto.service.ts b/common/src/services/crypto.service.ts index 654af3bb..c49d7763 100644 --- a/common/src/services/crypto.service.ts +++ b/common/src/services/crypto.service.ts @@ -1,25 +1,21 @@ import * as bigInt from "big-integer"; -import { EncryptionType } from "../enums/encryptionType"; -import { HashPurpose } from "../enums/hashPurpose"; -import { KdfType } from "../enums/kdfType"; -import { KeySuffixOptions } from "../enums/keySuffixOptions"; - -import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; -import { EncryptedObject } from "../models/domain/encryptedObject"; -import { EncString } from "../models/domain/encString"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { CryptoService as CryptoServiceAbstraction } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { LogService } from "../abstractions/log.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { StateService } from "../abstractions/state.service"; - +import { EncryptionType } from "../enums/encryptionType"; +import { HashPurpose } from "../enums/hashPurpose"; +import { KdfType } from "../enums/kdfType"; +import { KeySuffixOptions } from "../enums/keySuffixOptions"; import { sequentialize } from "../misc/sequentialize"; import { Utils } from "../misc/utils"; import { EEFLongWordList } from "../misc/wordlist"; - +import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; +import { EncString } from "../models/domain/encString"; +import { EncryptedObject } from "../models/domain/encryptedObject"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; import { ProfileOrganizationResponse } from "../models/response/profileOrganizationResponse"; import { ProfileProviderOrganizationResponse } from "../models/response/profileProviderOrganizationResponse"; import { ProfileProviderResponse } from "../models/response/profileProviderResponse"; @@ -227,6 +223,7 @@ export class CryptoService implements CryptoServiceAbstraction { let setKey = false; for (const orgId in encOrgKeys) { + // eslint-disable-next-line if (!encOrgKeys.hasOwnProperty(orgId)) { continue; } @@ -272,6 +269,7 @@ export class CryptoService implements CryptoServiceAbstraction { let setKey = false; for (const orgId in encProviderKeys) { + // eslint-disable-next-line if (!encProviderKeys.hasOwnProperty(orgId)) { continue; } @@ -328,7 +326,7 @@ export class CryptoService implements CryptoServiceAbstraction { return (await this.stateService.getEncryptedCryptoSymmetricKey()) != null; } - async clearKey(clearSecretStorage: boolean = true, userId?: string): Promise { + async clearKey(clearSecretStorage = true, userId?: string): Promise { await this.stateService.setCryptoMasterKey(null, { userId: userId }); await this.stateService.setLegacyEtmKey(null, { userId: userId }); if (clearSecretStorage) { @@ -574,8 +572,7 @@ export class CryptoService implements CryptoServiceAbstraction { switch (encType) { case EncryptionType.Rsa2048_OaepSha256_B64: case EncryptionType.Rsa2048_OaepSha1_B64: - // HmacSha256 types are deprecated - case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: + case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: // HmacSha256 types are deprecated case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64: break; default: @@ -699,7 +696,6 @@ export class CryptoService implements CryptoServiceAbstraction { } // Use & to apply the mask and reduce the number of recursive lookups - // tslint:disable-next-line rval = rval & mask; if (rval >= range) { @@ -894,7 +890,7 @@ export class CryptoService implements CryptoServiceAbstraction { return new SymmetricCryptoKey(newKey.buffer); } - private async hashPhrase(hash: ArrayBuffer, minimumEntropy: number = 64) { + private async hashPhrase(hash: ArrayBuffer, minimumEntropy = 64) { const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2); let numWords = Math.ceil(minimumEntropy / entropyPerWord); diff --git a/common/src/services/environment.service.ts b/common/src/services/environment.service.ts index 28caaf47..b13afd59 100644 --- a/common/src/services/environment.service.ts +++ b/common/src/services/environment.service.ts @@ -1,16 +1,15 @@ import { Observable, Subject } from "rxjs"; -import { EnvironmentUrls } from "../models/domain/environmentUrls"; - import { EnvironmentService as EnvironmentServiceAbstraction, Urls, } from "../abstractions/environment.service"; import { StateService } from "../abstractions/state.service"; +import { EnvironmentUrls } from "../models/domain/environmentUrls"; export class EnvironmentService implements EnvironmentServiceAbstraction { private readonly urlsSubject = new Subject(); - urls: Observable = this.urlsSubject; // tslint:disable-line + urls: Observable = this.urlsSubject; private baseUrl: string; private webVaultUrl: string; @@ -22,7 +21,7 @@ export class EnvironmentService implements EnvironmentServiceAbstraction { private keyConnectorUrl: string; constructor(private stateService: StateService) { - this.stateService.activeAccount.subscribe(async (_userId) => { + this.stateService.activeAccount.subscribe(async () => { await this.setUrlsFromStorage(); }); } diff --git a/common/src/services/event.service.ts b/common/src/services/event.service.ts index ca5bb59f..c0024d49 100644 --- a/common/src/services/event.service.ts +++ b/common/src/services/event.service.ts @@ -1,15 +1,12 @@ -import { EventType } from "../enums/eventType"; - -import { EventData } from "../models/data/eventData"; - -import { EventRequest } from "../models/request/eventRequest"; - import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { EventService as EventServiceAbstraction } from "../abstractions/event.service"; import { LogService } from "../abstractions/log.service"; import { OrganizationService } from "../abstractions/organization.service"; import { StateService } from "../abstractions/state.service"; +import { EventType } from "../enums/eventType"; +import { EventData } from "../models/data/eventData"; +import { EventRequest } from "../models/request/eventRequest"; export class EventService implements EventServiceAbstraction { private inited = false; diff --git a/common/src/services/export.service.ts b/common/src/services/export.service.ts index cbc18fe4..7bbd574b 100644 --- a/common/src/services/export.service.ts +++ b/common/src/services/export.service.ts @@ -1,34 +1,28 @@ import * as papa from "papaparse"; -import { CipherType } from "../enums/cipherType"; -import { KdfType } from "../enums/kdfType"; - import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CryptoService } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { ExportService as ExportServiceAbstraction } from "../abstractions/export.service"; import { FolderService } from "../abstractions/folder.service"; - -import { CipherView } from "../models/view/cipherView"; -import { CollectionView } from "../models/view/collectionView"; -import { FolderView } from "../models/view/folderView"; - +import { CipherType } from "../enums/cipherType"; +import { KdfType } from "../enums/kdfType"; +import { Utils } from "../misc/utils"; +import { CipherData } from "../models/data/cipherData"; +import { CollectionData } from "../models/data/collectionData"; import { Cipher } from "../models/domain/cipher"; import { Collection } from "../models/domain/collection"; import { Folder } from "../models/domain/folder"; - -import { CipherData } from "../models/data/cipherData"; -import { CollectionData } from "../models/data/collectionData"; -import { CollectionDetailsResponse } from "../models/response/collectionResponse"; - import { CipherWithIds as CipherExport } from "../models/export/cipherWithIds"; import { CollectionWithId as CollectionExport } from "../models/export/collectionWithId"; import { Event } from "../models/export/event"; import { FolderWithId as FolderExport } from "../models/export/folderWithId"; +import { CollectionDetailsResponse } from "../models/response/collectionResponse"; +import { CipherView } from "../models/view/cipherView"; +import { CollectionView } from "../models/view/collectionView"; import { EventView } from "../models/view/eventView"; - -import { Utils } from "../misc/utils"; +import { FolderView } from "../models/view/folderView"; export class ExportService implements ExportServiceAbstraction { constructor( @@ -97,7 +91,7 @@ export class ExportService implements ExportServiceAbstraction { return papa.unparse(events.map((e) => new Event(e))); } - getFileName(prefix: string = null, extension: string = "csv"): string { + getFileName(prefix: string = null, extension = "csv"): string { const now = new Date(); const dateString = now.getFullYear() + @@ -391,7 +385,7 @@ export class ExportService implements ExportServiceAbstraction { return JSON.stringify(jsonDoc, null, " "); } - private padNumber(num: number, width: number, padCharacter: string = "0"): string { + private padNumber(num: number, width: number, padCharacter = "0"): string { const numString = num.toString(); return numString.length >= width ? numString diff --git a/common/src/services/fileUpload.service.ts b/common/src/services/fileUpload.service.ts index 516011dd..6fc0af35 100644 --- a/common/src/services/fileUpload.service.ts +++ b/common/src/services/fileUpload.service.ts @@ -1,12 +1,9 @@ import { ApiService } from "../abstractions/api.service"; import { FileUploadService as FileUploadServiceAbstraction } from "../abstractions/fileUpload.service"; import { LogService } from "../abstractions/log.service"; - import { FileUploadType } from "../enums/fileUploadType"; - import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; import { EncString } from "../models/domain/encString"; - import { AttachmentUploadDataResponse } from "../models/response/attachmentUploadDataResponse"; import { SendFileUploadDataResponse } from "../models/response/sendFileUploadDataResponse"; @@ -41,7 +38,7 @@ export class FileUploadService implements FileUploadServiceAbstraction { ) ); break; - case FileUploadType.Azure: + case FileUploadType.Azure: { const renewalCallback = async () => { const renewalResponse = await this.apiService.renewSendFileUploadUrl( uploadData.sendResponse.id, @@ -55,6 +52,7 @@ export class FileUploadService implements FileUploadServiceAbstraction { renewalCallback ); break; + } default: throw new Error("Unknown file upload type"); } @@ -80,7 +78,7 @@ export class FileUploadService implements FileUploadServiceAbstraction { (fd) => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd) ); break; - case FileUploadType.Azure: + case FileUploadType.Azure: { const renewalCallback = async () => { const renewalResponse = await this.apiService.renewAttachmentUploadUrl( response.id, @@ -94,6 +92,7 @@ export class FileUploadService implements FileUploadServiceAbstraction { renewalCallback ); break; + } default: throw new Error("Unknown file upload type."); } diff --git a/common/src/services/folder.service.ts b/common/src/services/folder.service.ts index 225c03aa..666ca6d2 100644 --- a/common/src/services/folder.service.ts +++ b/common/src/services/folder.service.ts @@ -1,26 +1,19 @@ -import { FolderData } from "../models/data/folderData"; - -import { Folder } from "../models/domain/folder"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -import { TreeNode } from "../models/domain/treeNode"; - -import { FolderRequest } from "../models/request/folderRequest"; - -import { FolderResponse } from "../models/response/folderResponse"; - -import { FolderView } from "../models/view/folderView"; - import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CryptoService } from "../abstractions/crypto.service"; import { FolderService as FolderServiceAbstraction } from "../abstractions/folder.service"; import { I18nService } from "../abstractions/i18n.service"; import { StateService } from "../abstractions/state.service"; - -import { CipherData } from "../models/data/cipherData"; - import { ServiceUtils } from "../misc/serviceUtils"; import { Utils } from "../misc/utils"; +import { CipherData } from "../models/data/cipherData"; +import { FolderData } from "../models/data/folderData"; +import { Folder } from "../models/domain/folder"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { TreeNode } from "../models/domain/treeNode"; +import { FolderRequest } from "../models/request/folderRequest"; +import { FolderResponse } from "../models/response/folderResponse"; +import { FolderView } from "../models/view/folderView"; const NestingDelimiter = "/"; @@ -46,6 +39,7 @@ export class FolderService implements FolderServiceAbstraction { async get(id: string): Promise { const folders = await this.stateService.getEncryptedFolders(); + // eslint-disable-next-line if (folders == null || !folders.hasOwnProperty(id)) { return null; } @@ -57,6 +51,7 @@ export class FolderService implements FolderServiceAbstraction { const folders = await this.stateService.getEncryptedFolders(); const response: Folder[] = []; for (const id in folders) { + // eslint-disable-next-line if (folders.hasOwnProperty(id)) { response.push(new Folder(folders[id])); } diff --git a/common/src/services/i18n.service.ts b/common/src/services/i18n.service.ts index 698bc297..1fdea202 100644 --- a/common/src/services/i18n.service.ts +++ b/common/src/services/i18n.service.ts @@ -103,8 +103,10 @@ export class I18nService implements I18nServiceAbstraction { translate(id: string, p1?: string, p2?: string, p3?: string): string { let result: string; + // eslint-disable-next-line if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) { result = this.localeMessages[id]; + // eslint-disable-next-line } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) { result = this.defaultMessages[id]; } else { @@ -130,6 +132,7 @@ export class I18nService implements I18nServiceAbstraction { const formattedLocale = locale.replace("-", "_"); const locales = await this.getLocalesJson(formattedLocale); for (const prop in locales) { + // eslint-disable-next-line if (!locales.hasOwnProperty(prop)) { continue; } @@ -138,7 +141,7 @@ export class I18nService implements I18nServiceAbstraction { if (locales[prop].placeholders) { for (const placeProp in locales[prop].placeholders) { if ( - !locales[prop].placeholders.hasOwnProperty(placeProp) || + !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line !locales[prop].placeholders[placeProp].content ) { continue; diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 332e5815..4e122932 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -9,23 +9,7 @@ import { ImportService as ImportServiceAbstraction, } from "../abstractions/import.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; - -import { ImportResult } from "../models/domain/importResult"; - import { CipherType } from "../enums/cipherType"; - -import { Utils } from "../misc/utils"; - -import { CipherRequest } from "../models/request/cipherRequest"; -import { CollectionRequest } from "../models/request/collectionRequest"; -import { FolderRequest } from "../models/request/folderRequest"; -import { ImportCiphersRequest } from "../models/request/importCiphersRequest"; -import { ImportOrganizationCiphersRequest } from "../models/request/importOrganizationCiphersRequest"; -import { KvpRequest } from "../models/request/kvpRequest"; - -import { ErrorResponse } from "../models/response/errorResponse"; -import { CipherView } from "../models/view/cipherView"; - import { AscendoCsvImporter } from "../importers/ascendoCsvImporter"; import { AvastCsvImporter } from "../importers/avastCsvImporter"; import { AvastJsonImporter } from "../importers/avastJsonImporter"; @@ -51,7 +35,6 @@ import { KasperskyTxtImporter } from "../importers/kasperskyTxtImporter"; import { KeePass2XmlImporter } from "../importers/keepass2XmlImporter"; import { KeePassXCsvImporter } from "../importers/keepassxCsvImporter"; import { KeeperCsvImporter } from "../importers/keeperImporters/keeperCsvImporter"; -import { KeeperJsonImporter } from "../importers/keeperImporters/keeperJsonImporter"; import { LastPassCsvImporter } from "../importers/lastpassCsvImporter"; import { LogMeOnceCsvImporter } from "../importers/logMeOnceCsvImporter"; import { MeldiumCsvImporter } from "../importers/meldiumCsvImporter"; @@ -82,6 +65,16 @@ import { TrueKeyCsvImporter } from "../importers/truekeyCsvImporter"; import { UpmCsvImporter } from "../importers/upmCsvImporter"; import { YotiCsvImporter } from "../importers/yotiCsvImporter"; import { ZohoVaultCsvImporter } from "../importers/zohoVaultCsvImporter"; +import { Utils } from "../misc/utils"; +import { ImportResult } from "../models/domain/importResult"; +import { CipherRequest } from "../models/request/cipherRequest"; +import { CollectionRequest } from "../models/request/collectionRequest"; +import { FolderRequest } from "../models/request/folderRequest"; +import { ImportCiphersRequest } from "../models/request/importCiphersRequest"; +import { ImportOrganizationCiphersRequest } from "../models/request/importOrganizationCiphersRequest"; +import { KvpRequest } from "../models/request/kvpRequest"; +import { ErrorResponse } from "../models/response/errorResponse"; +import { CipherView } from "../models/view/cipherView"; const featuredImportOptions = [ { id: "bitwardenjson", name: "Bitwarden (json)" }, diff --git a/common/src/services/keyConnector.service.ts b/common/src/services/keyConnector.service.ts index 847f4862..c7e8b991 100644 --- a/common/src/services/keyConnector.service.ts +++ b/common/src/services/keyConnector.service.ts @@ -6,17 +6,12 @@ import { LogService } from "../abstractions/log.service"; import { OrganizationService } from "../abstractions/organization.service"; import { StateService } from "../abstractions/state.service"; import { TokenService } from "../abstractions/token.service"; - import { OrganizationUserType } from "../enums/organizationUserType"; - import { Utils } from "../misc/utils"; - import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest"; import { KeyConnectorUserKeyRequest } from "../models/request/keyConnectorUserKeyRequest"; import { KeysRequest } from "../models/request/keysRequest"; - import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; export class KeyConnectorService implements KeyConnectorServiceAbstraction { diff --git a/common/src/services/notifications.service.ts b/common/src/services/notifications.service.ts index 4974b282..d4e3fef4 100644 --- a/common/src/services/notifications.service.ts +++ b/common/src/services/notifications.service.ts @@ -1,8 +1,6 @@ import * as signalR from "@microsoft/signalr"; import * as signalRMsgPack from "@microsoft/signalr-protocol-msgpack"; -import { NotificationType } from "../enums/notificationType"; - import { ApiService } from "../abstractions/api.service"; import { AppIdService } from "../abstractions/appId.service"; import { EnvironmentService } from "../abstractions/environment.service"; @@ -11,7 +9,7 @@ import { NotificationsService as NotificationsServiceAbstraction } from "../abst import { StateService } from "../abstractions/state.service"; import { SyncService } from "../abstractions/sync.service"; import { VaultTimeoutService } from "../abstractions/vaultTimeout.service"; - +import { NotificationType } from "../enums/notificationType"; import { NotificationResponse, SyncCipherNotification, @@ -77,6 +75,7 @@ export class NotificationsService implements NotificationsServiceAbstraction { this.signalrConnection.on("ReceiveMessage", (data: any) => this.processNotification(new NotificationResponse(data)) ); + // eslint-disable-next-line this.signalrConnection.on("Heartbeat", (data: any) => { /*console.log('Heartbeat!');*/ }); @@ -182,6 +181,7 @@ export class NotificationsService implements NotificationsServiceAbstraction { break; case NotificationType.SyncSendDelete: await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification); + break; default: break; } diff --git a/common/src/services/organization.service.ts b/common/src/services/organization.service.ts index 10a86632..08adb072 100644 --- a/common/src/services/organization.service.ts +++ b/common/src/services/organization.service.ts @@ -1,8 +1,6 @@ import { OrganizationService as OrganizationServiceAbstraction } from "../abstractions/organization.service"; import { StateService } from "../abstractions/state.service"; - import { OrganizationData } from "../models/data/organizationData"; - import { Organization } from "../models/domain/organization"; export class OrganizationService implements OrganizationServiceAbstraction { @@ -10,6 +8,7 @@ export class OrganizationService implements OrganizationServiceAbstraction { async get(id: string): Promise { const organizations = await this.stateService.getOrganizations(); + // eslint-disable-next-line if (organizations == null || !organizations.hasOwnProperty(id)) { return null; } @@ -30,6 +29,7 @@ export class OrganizationService implements OrganizationServiceAbstraction { const organizations = await this.stateService.getOrganizations({ userId: userId }); const response: Organization[] = []; for (const id in organizations) { + // eslint-disable-next-line if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) { response.push(new Organization(organizations[id])); } diff --git a/common/src/services/passwordGeneration.service.ts b/common/src/services/passwordGeneration.service.ts index 2cc6f6d0..fa03446f 100644 --- a/common/src/services/passwordGeneration.service.ts +++ b/common/src/services/passwordGeneration.service.ts @@ -1,18 +1,15 @@ import * as zxcvbn from "zxcvbn"; -import { EncString } from "../models/domain/encString"; -import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; -import { PasswordGeneratorPolicyOptions } from "../models/domain/passwordGeneratorPolicyOptions"; -import { Policy } from "../models/domain/policy"; - import { CryptoService } from "../abstractions/crypto.service"; import { PasswordGenerationService as PasswordGenerationServiceAbstraction } from "../abstractions/passwordGeneration.service"; import { PolicyService } from "../abstractions/policy.service"; import { StateService } from "../abstractions/state.service"; - -import { EEFLongWordList } from "../misc/wordlist"; - import { PolicyType } from "../enums/policyType"; +import { EEFLongWordList } from "../misc/wordlist"; +import { EncString } from "../models/domain/encString"; +import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; +import { PasswordGeneratorPolicyOptions } from "../models/domain/passwordGeneratorPolicyOptions"; +import { Policy } from "../models/domain/policy"; const DefaultOptions = { length: 14, diff --git a/common/src/services/policy.service.ts b/common/src/services/policy.service.ts index dce9af6f..91ab864b 100644 --- a/common/src/services/policy.service.ts +++ b/common/src/services/policy.service.ts @@ -1,19 +1,15 @@ +import { ApiService } from "../abstractions/api.service"; import { OrganizationService } from "../abstractions/organization.service"; import { PolicyService as PolicyServiceAbstraction } from "../abstractions/policy.service"; import { StateService } from "../abstractions/state.service"; - +import { OrganizationUserStatusType } from "../enums/organizationUserStatusType"; +import { OrganizationUserType } from "../enums/organizationUserType"; +import { PolicyType } from "../enums/policyType"; import { PolicyData } from "../models/data/policyData"; - import { MasterPasswordPolicyOptions } from "../models/domain/masterPasswordPolicyOptions"; import { Organization } from "../models/domain/organization"; import { Policy } from "../models/domain/policy"; import { ResetPasswordPolicyOptions } from "../models/domain/resetPasswordPolicyOptions"; - -import { OrganizationUserStatusType } from "../enums/organizationUserStatusType"; -import { OrganizationUserType } from "../enums/organizationUserType"; -import { PolicyType } from "../enums/policyType"; - -import { ApiService } from "../abstractions/api.service"; import { ListResponse } from "../models/response/listResponse"; import { PolicyResponse } from "../models/response/policyResponse"; @@ -38,6 +34,7 @@ export class PolicyService implements PolicyServiceAbstraction { } else { const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId }); for (const id in diskPolicies) { + // eslint-disable-next-line if (diskPolicies.hasOwnProperty(id)) { response.push(new Policy(diskPolicies[id])); } @@ -178,6 +175,7 @@ export class PolicyService implements PolicyServiceAbstraction { return false; } + // eslint-disable-next-line if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\^&*]/g.test(newPassword)) { return false; } diff --git a/common/src/services/provider.service.ts b/common/src/services/provider.service.ts index 349e2082..53f09542 100644 --- a/common/src/services/provider.service.ts +++ b/common/src/services/provider.service.ts @@ -1,8 +1,6 @@ import { ProviderService as ProviderServiceAbstraction } from "../abstractions/provider.service"; import { StateService } from "../abstractions/state.service"; - import { ProviderData } from "../models/data/providerData"; - import { Provider } from "../models/domain/provider"; export class ProviderService implements ProviderServiceAbstraction { @@ -10,6 +8,7 @@ export class ProviderService implements ProviderServiceAbstraction { async get(id: string): Promise { const providers = await this.stateService.getProviders(); + // eslint-disable-next-line if (providers == null || !providers.hasOwnProperty(id)) { return null; } @@ -21,6 +20,7 @@ export class ProviderService implements ProviderServiceAbstraction { const providers = await this.stateService.getProviders(); const response: Provider[] = []; for (const id in providers) { + // eslint-disable-next-line if (providers.hasOwnProperty(id)) { response.push(new Provider(providers[id])); } diff --git a/common/src/services/search.service.ts b/common/src/services/search.service.ts index 97b0d247..e1c54ceb 100644 --- a/common/src/services/search.service.ts +++ b/common/src/services/search.service.ts @@ -1,15 +1,13 @@ import * as lunr from "lunr"; -import { CipherView } from "../models/view/cipherView"; - import { CipherService } from "../abstractions/cipher.service"; import { I18nService } from "../abstractions/i18n.service"; import { LogService } from "../abstractions/log.service"; import { SearchService as SearchServiceAbstraction } from "../abstractions/search.service"; - import { CipherType } from "../enums/cipherType"; import { FieldType } from "../enums/fieldType"; import { UriMatchType } from "../enums/uriMatchType"; +import { CipherView } from "../models/view/cipherView"; import { SendView } from "../models/view/sendView"; export class SearchService implements SearchServiceAbstraction { @@ -139,7 +137,6 @@ export class SearchService implements SearchServiceAbstraction { this.logService.error(e); } } else { - // tslint:disable-next-line const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING; searchResults = index.query((q) => { lunr.tokenizer(query).forEach((token) => { @@ -162,7 +159,7 @@ export class SearchService implements SearchServiceAbstraction { return results; } - searchCiphersBasic(ciphers: CipherView[], query: string, deleted: boolean = false) { + searchCiphersBasic(ciphers: CipherView[], query: string, deleted = false) { query = query.trim().toLowerCase(); return ciphers.filter((c) => { if (deleted !== c.isDeleted) { diff --git a/common/src/services/send.service.ts b/common/src/services/send.service.ts index 630511d4..2baf45d9 100644 --- a/common/src/services/send.service.ts +++ b/common/src/services/send.service.ts @@ -1,21 +1,3 @@ -import { SendData } from "../models/data/sendData"; - -import { SendRequest } from "../models/request/sendRequest"; - -import { ErrorResponse } from "../models/response/errorResponse"; -import { SendResponse } from "../models/response/sendResponse"; - -import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; -import { EncString } from "../models/domain/encString"; -import { Send } from "../models/domain/send"; -import { SendFile } from "../models/domain/sendFile"; -import { SendText } from "../models/domain/sendText"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - -import { SendType } from "../enums/sendType"; - -import { SendView } from "../models/view/sendView"; - import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; @@ -23,8 +5,19 @@ import { FileUploadService } from "../abstractions/fileUpload.service"; import { I18nService } from "../abstractions/i18n.service"; import { SendService as SendServiceAbstraction } from "../abstractions/send.service"; import { StateService } from "../abstractions/state.service"; - +import { SendType } from "../enums/sendType"; import { Utils } from "../misc/utils"; +import { SendData } from "../models/data/sendData"; +import { EncArrayBuffer } from "../models/domain/encArrayBuffer"; +import { EncString } from "../models/domain/encString"; +import { Send } from "../models/domain/send"; +import { SendFile } from "../models/domain/sendFile"; +import { SendText } from "../models/domain/sendText"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; +import { SendRequest } from "../models/request/sendRequest"; +import { ErrorResponse } from "../models/response/errorResponse"; +import { SendResponse } from "../models/response/sendResponse"; +import { SendView } from "../models/view/sendView"; export class SendService implements SendServiceAbstraction { constructor( @@ -95,6 +88,7 @@ export class SendService implements SendServiceAbstraction { async get(id: string): Promise { const sends = await this.stateService.getEncryptedSends(); + // eslint-disable-next-line if (sends == null || !sends.hasOwnProperty(id)) { return null; } @@ -106,6 +100,7 @@ export class SendService implements SendServiceAbstraction { const sends = await this.stateService.getEncryptedSends(); const response: Send[] = []; for (const id in sends) { + // eslint-disable-next-line if (sends.hasOwnProperty(id)) { response.push(new Send(sends[id])); } diff --git a/common/src/services/settings.service.ts b/common/src/services/settings.service.ts index a8fdf333..7f5131b0 100644 --- a/common/src/services/settings.service.ts +++ b/common/src/services/settings.service.ts @@ -30,6 +30,7 @@ export class SettingsService implements SettingsServiceAbstraction { private async getSettings(): Promise { const settings = await this.stateService.getSettings(); if (settings == null) { + // eslint-disable-next-line const userId = await this.stateService.getUserId(); } return settings; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 30f908f7..6a27d224 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -1,29 +1,15 @@ -import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; - -import { Account, AccountData } from "../models/domain/account"; +import { BehaviorSubject } from "rxjs"; import { LogService } from "../abstractions/log.service"; +import { StateService as StateServiceAbstraction } from "../abstractions/state.service"; +import { StateMigrationService } from "../abstractions/stateMigration.service"; import { StorageService } from "../abstractions/storage.service"; - import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; import { KdfType } from "../enums/kdfType"; import { StorageLocation } from "../enums/storageLocation"; import { ThemeType } from "../enums/themeType"; import { UriMatchType } from "../enums/uriMatchType"; - -import { CipherView } from "../models/view/cipherView"; -import { CollectionView } from "../models/view/collectionView"; -import { FolderView } from "../models/view/folderView"; -import { SendView } from "../models/view/sendView"; - -import { EncString } from "../models/domain/encString"; -import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; -import { GlobalState } from "../models/domain/globalState"; -import { Policy } from "../models/domain/policy"; -import { State } from "../models/domain/state"; -import { StorageOptions } from "../models/domain/storageOptions"; -import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; - +import { StateFactory } from "../factories/stateFactory"; import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { EventData } from "../models/data/eventData"; @@ -32,14 +18,20 @@ import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; import { SendData } from "../models/data/sendData"; - -import { BehaviorSubject } from "rxjs"; - -import { StateMigrationService } from "../abstractions/stateMigration.service"; +import { Account, AccountData } from "../models/domain/account"; +import { EncString } from "../models/domain/encString"; import { EnvironmentUrls } from "../models/domain/environmentUrls"; +import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; +import { GlobalState } from "../models/domain/globalState"; +import { Policy } from "../models/domain/policy"; +import { State } from "../models/domain/state"; +import { StorageOptions } from "../models/domain/storageOptions"; +import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; import { WindowState } from "../models/domain/windowState"; - -import { StateFactory } from "../factories/stateFactory"; +import { CipherView } from "../models/view/cipherView"; +import { CollectionView } from "../models/view/collectionView"; +import { FolderView } from "../models/view/folderView"; +import { SendView } from "../models/view/sendView"; const keys = { global: "global", @@ -67,7 +59,7 @@ export class StateService< this.createGlobals() ); - private hasBeenInited: boolean = false; + private hasBeenInited = false; private accountDiskCache: Map; diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index f585b0cd..584173d4 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -1,9 +1,9 @@ import { StorageService } from "../abstractions/storage.service"; - -import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; -import { GlobalState } from "../models/domain/globalState"; -import { StorageOptions } from "../models/domain/storageOptions"; - +import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; +import { KdfType } from "../enums/kdfType"; +import { StateVersion } from "../enums/stateVersion"; +import { ThemeType } from "../enums/themeType"; +import { StateFactory } from "../factories/stateFactory"; import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { EventData } from "../models/data/eventData"; @@ -12,17 +12,11 @@ import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; import { SendData } from "../models/data/sendData"; - -import { HtmlStorageLocation } from "../enums/htmlStorageLocation"; -import { KdfType } from "../enums/kdfType"; -import { StateVersion } from "../enums/stateVersion"; -import { ThemeType } from "../enums/themeType"; - -import { EnvironmentUrls } from "../models/domain/environmentUrls"; - -import { GlobalStateFactory } from "../factories/globalStateFactory"; -import { StateFactory } from "../factories/stateFactory"; import { Account, AccountSettings } from "../models/domain/account"; +import { EnvironmentUrls } from "../models/domain/environmentUrls"; +import { GeneratedPasswordHistory } from "../models/domain/generatedPasswordHistory"; +import { GlobalState } from "../models/domain/globalState"; +import { StorageOptions } from "../models/domain/storageOptions"; import { TokenService } from "./token.service"; diff --git a/common/src/services/sync.service.ts b/common/src/services/sync.service.ts index 17895326..cc512e50 100644 --- a/common/src/services/sync.service.ts +++ b/common/src/services/sync.service.ts @@ -13,7 +13,6 @@ import { SendService } from "../abstractions/send.service"; import { SettingsService } from "../abstractions/settings.service"; import { StateService } from "../abstractions/state.service"; import { SyncService as SyncServiceAbstraction } from "../abstractions/sync.service"; - import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { FolderData } from "../models/data/folderData"; @@ -21,7 +20,6 @@ import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; import { SendData } from "../models/data/sendData"; - import { CipherResponse } from "../models/response/cipherResponse"; import { CollectionDetailsResponse } from "../models/response/collectionResponse"; import { DomainsResponse } from "../models/response/domainsResponse"; @@ -36,7 +34,7 @@ import { ProfileResponse } from "../models/response/profileResponse"; import { SendResponse } from "../models/response/sendResponse"; export class SyncService implements SyncServiceAbstraction { - syncInProgress: boolean = false; + syncInProgress = false; constructor( private apiService: ApiService, diff --git a/common/src/services/system.service.ts b/common/src/services/system.service.ts index 4c84b792..949b8ca4 100644 --- a/common/src/services/system.service.ts +++ b/common/src/services/system.service.ts @@ -2,7 +2,6 @@ import { MessagingService } from "../abstractions/messaging.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { StateService } from "../abstractions/state.service"; import { SystemService as SystemServiceAbstraction } from "../abstractions/system.service"; - import { Utils } from "../misc/utils"; export class SystemService implements SystemServiceAbstraction { diff --git a/common/src/services/token.service.ts b/common/src/services/token.service.ts index ad39aed5..a47cca7c 100644 --- a/common/src/services/token.service.ts +++ b/common/src/services/token.service.ts @@ -1,8 +1,6 @@ import { StateService } from "../abstractions/state.service"; import { TokenService as TokenServiceAbstraction } from "../abstractions/token.service"; - import { Utils } from "../misc/utils"; - import { IdentityTokenResponse } from "../models/response/identityTokenResponse"; export class TokenService implements TokenServiceAbstraction { @@ -120,7 +118,7 @@ export class TokenService implements TokenServiceAbstraction { return d; } - async tokenSecondsRemaining(offsetSeconds: number = 0): Promise { + async tokenSecondsRemaining(offsetSeconds = 0): Promise { const d = await this.getTokenExpirationDate(); if (d == null) { return 0; @@ -130,7 +128,7 @@ export class TokenService implements TokenServiceAbstraction { return Math.round(msRemaining / 1000); } - async tokenNeedsRefresh(minutes: number = 5): Promise { + async tokenNeedsRefresh(minutes = 5): Promise { const sRemaining = await this.tokenSecondsRemaining(); return sRemaining < 60 * minutes; } diff --git a/common/src/services/totp.service.ts b/common/src/services/totp.service.ts index e3d653c0..730587c7 100644 --- a/common/src/services/totp.service.ts +++ b/common/src/services/totp.service.ts @@ -2,7 +2,6 @@ import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { LogService } from "../abstractions/log.service"; import { StateService } from "../abstractions/state.service"; import { TotpService as TotpServiceAbstraction } from "../abstractions/totp.service"; - import { Utils } from "../misc/utils"; const B32Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; @@ -77,18 +76,15 @@ export class TotpService implements TotpServiceAbstraction { return null; } - /* tslint:disable */ const offset = hash[hash.length - 1] & 0xf; const binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) | ((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff); - /* tslint:enable */ let otp = ""; if (isSteamAuth) { - // tslint:disable-next-line let fullCode = binary & 0x7fffffff; for (let i = 0; i < digits; i++) { otp += SteamChars[fullCode % SteamChars.length]; diff --git a/common/src/services/twoFactor.service.ts b/common/src/services/twoFactor.service.ts index facd8510..7720d9be 100644 --- a/common/src/services/twoFactor.service.ts +++ b/common/src/services/twoFactor.service.ts @@ -4,9 +4,7 @@ import { TwoFactorProviderDetails, TwoFactorService as TwoFactorServiceAbstraction, } from "../abstractions/twoFactor.service"; - import { TwoFactorProviderType } from "../enums/twoFactorProviderType"; - import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse"; export const TwoFactorProviders: Partial> = diff --git a/common/src/services/userVerification.service.ts b/common/src/services/userVerification.service.ts index f5189a4d..68f44019 100644 --- a/common/src/services/userVerification.service.ts +++ b/common/src/services/userVerification.service.ts @@ -1,14 +1,10 @@ -import { UserVerificationService as UserVerificationServiceAbstraction } from "../abstractions/userVerification.service"; - import { ApiService } from "../abstractions/api.service"; import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; - +import { UserVerificationService as UserVerificationServiceAbstraction } from "../abstractions/userVerification.service"; import { VerificationType } from "../enums/verificationType"; - import { VerifyOTPRequest } from "../models/request/account/verifyOTPRequest"; import { SecretVerificationRequest } from "../models/request/secretVerificationRequest"; - import { Verification } from "../types/verification"; export class UserVerificationService implements UserVerificationServiceAbstraction { diff --git a/common/src/services/vaultTimeout.service.ts b/common/src/services/vaultTimeout.service.ts index 65654bca..a6513d65 100644 --- a/common/src/services/vaultTimeout.service.ts +++ b/common/src/services/vaultTimeout.service.ts @@ -11,7 +11,6 @@ import { StateService } from "../abstractions/state.service"; import { TokenService } from "../abstractions/token.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "../abstractions/vaultTimeout.service"; import { KeySuffixOptions } from "../enums/keySuffixOptions"; - import { PolicyType } from "../enums/policyType"; export class VaultTimeoutService implements VaultTimeoutServiceAbstraction { diff --git a/common/src/services/webCryptoFunction.service.ts b/common/src/services/webCryptoFunction.service.ts index 8f7a8019..c90f06f6 100644 --- a/common/src/services/webCryptoFunction.service.ts +++ b/common/src/services/webCryptoFunction.service.ts @@ -2,9 +2,7 @@ import * as forge from "node-forge"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; - import { Utils } from "../misc/utils"; - import { DecryptParameters } from "../models/domain/decryptParameters"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; diff --git a/electron/package.json b/electron/package.json index 88bedfb9..f4b3cdac 100644 --- a/electron/package.json +++ b/electron/package.json @@ -15,9 +15,7 @@ "scripts": { "clean": "rimraf dist/**/*", "build": "npm run clean && tsc", - "build:watch": "npm run clean && tsc -watch", - "lint": "tslint 'src/**/*.ts' 'spec/**/*.ts'", - "lint:fix": "tslint 'src/**/*.ts' 'spec/**/*.ts' --fix" + "build:watch": "npm run clean && tsc -watch" }, "devDependencies": { "@types/node": "^16.11.12", diff --git a/electron/src/baseMenu.ts b/electron/src/baseMenu.ts index f52db2a5..09d47f7e 100644 --- a/electron/src/baseMenu.ts +++ b/electron/src/baseMenu.ts @@ -1,6 +1,7 @@ -import { app, clipboard, dialog, Menu, MenuItemConstructorOptions } from "electron"; +import { Menu, MenuItemConstructorOptions } from "electron"; import { I18nService } from "jslib-common/abstractions/i18n.service"; + import { WindowMain } from "./window.main"; export class BaseMenu { diff --git a/electron/src/biometric.darwin.main.ts b/electron/src/biometric.darwin.main.ts index 15588ac0..c270e1cc 100644 --- a/electron/src/biometric.darwin.main.ts +++ b/electron/src/biometric.darwin.main.ts @@ -5,7 +5,7 @@ import { I18nService } from "jslib-common/abstractions/i18n.service"; import { StateService } from "jslib-common/abstractions/state.service"; export default class BiometricDarwinMain implements BiometricMain { - isError: boolean = false; + isError = false; constructor(private i18nservice: I18nService, private stateService: StateService) {} @@ -14,6 +14,7 @@ export default class BiometricDarwinMain implements BiometricMain { await this.stateService.setBiometricText("unlockWithTouchId"); await this.stateService.setNoAutoPromptBiometricsText("noAutoPromptTouchId"); + // eslint-disable-next-line ipcMain.on("biometric", async (event: any, message: any) => { event.returnValue = await this.authenticateBiometric(); }); diff --git a/electron/src/biometric.windows.main.ts b/electron/src/biometric.windows.main.ts index bb6288b8..d99668f9 100644 --- a/electron/src/biometric.windows.main.ts +++ b/electron/src/biometric.windows.main.ts @@ -1,15 +1,15 @@ import { ipcMain } from "electron"; import forceFocus from "forcefocus"; -import { WindowMain } from "./window.main"; - import { BiometricMain } from "jslib-common/abstractions/biometric.main"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { LogService } from "jslib-common/abstractions/log.service"; import { StateService } from "jslib-common/abstractions/state.service"; +import { WindowMain } from "./window.main"; + export default class BiometricWindowsMain implements BiometricMain { - isError: boolean = false; + isError = false; private windowsSecurityCredentialsUiModule: any; @@ -72,6 +72,7 @@ export default class BiometricWindowsMain implements BiometricMain { async checkAvailabilityAsync(): Promise { const module = this.getWindowsSecurityCredentialsUiModule(); if (module != null) { + // eslint-disable-next-line return new Promise((resolve, reject) => { try { module.UserConsentVerifier.checkAvailabilityAsync((error: Error, result: any) => { @@ -134,6 +135,7 @@ export default class BiometricWindowsMain implements BiometricMain { return -1; } try { + // eslint-disable-next-line const version = require("os").release(); return Number.parseInt(version.split(".")[0], 10); } catch { diff --git a/electron/src/keytarStorageListener.ts b/electron/src/keytarStorageListener.ts index a8e8ec4a..566045e4 100644 --- a/electron/src/keytarStorageListener.ts +++ b/electron/src/keytarStorageListener.ts @@ -1,5 +1,4 @@ import { ipcMain } from "electron"; - import { deletePassword, getPassword, setPassword } from "keytar"; import { BiometricMain } from "jslib-common/abstractions/biometric.main"; diff --git a/electron/src/services/electronCrypto.service.ts b/electron/src/services/electronCrypto.service.ts index 7eb01e49..36ea8132 100644 --- a/electron/src/services/electronCrypto.service.ts +++ b/electron/src/services/electronCrypto.service.ts @@ -2,12 +2,9 @@ import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction. import { LogService } from "jslib-common/abstractions/log.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; - -import { CryptoService } from "jslib-common/services/crypto.service"; - import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions"; -import { StorageLocation } from "jslib-common/enums/storageLocation"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; +import { CryptoService } from "jslib-common/services/crypto.service"; export class ElectronCryptoService extends CryptoService { constructor( diff --git a/electron/src/services/electronLog.service.ts b/electron/src/services/electronLog.service.ts index 008678ae..c6195416 100644 --- a/electron/src/services/electronLog.service.ts +++ b/electron/src/services/electronLog.service.ts @@ -1,12 +1,12 @@ -import log from "electron-log"; import * as path from "path"; -import { isDev } from "../utils"; +import log from "electron-log"; import { LogLevelType } from "jslib-common/enums/logLevelType"; - import { ConsoleLogService as BaseLogService } from "jslib-common/services/consoleLog.service"; +import { isDev } from "../utils"; + export class ElectronLogService extends BaseLogService { constructor(protected filter: (level: LogLevelType) => boolean = null, logDir: string = null) { super(isDev(), filter); diff --git a/electron/src/services/electronMainMessaging.service.ts b/electron/src/services/electronMainMessaging.service.ts index 99dd5b32..a868d710 100644 --- a/electron/src/services/electronMainMessaging.service.ts +++ b/electron/src/services/electronMainMessaging.service.ts @@ -1,10 +1,9 @@ import { app, dialog, ipcMain, Menu, MenuItem, nativeTheme } from "electron"; -import { promises as fs } from "fs"; -import { MessagingService } from "jslib-common/abstractions/messaging.service"; -import { RendererMenuItem } from "../utils"; +import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { ThemeType } from "jslib-common/enums/themeType"; +import { RendererMenuItem } from "../utils"; import { WindowMain } from "../window.main"; export class ElectronMainMessagingService implements MessagingService { diff --git a/electron/src/services/electronPlatformUtils.service.ts b/electron/src/services/electronPlatformUtils.service.ts index 8e4632b6..7e089d89 100644 --- a/electron/src/services/electronPlatformUtils.service.ts +++ b/electron/src/services/electronPlatformUtils.service.ts @@ -1,15 +1,14 @@ import { clipboard, ipcRenderer, shell } from "electron"; -import { isDev, isMacAppStore } from "../utils"; - -import { ClientType } from "jslib-common/enums/clientType"; -import { DeviceType } from "jslib-common/enums/deviceType"; -import { ThemeType } from "jslib-common/enums/themeType"; - import { I18nService } from "jslib-common/abstractions/i18n.service"; import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; +import { ClientType } from "jslib-common/enums/clientType"; +import { DeviceType } from "jslib-common/enums/deviceType"; +import { ThemeType } from "jslib-common/enums/themeType"; + +import { isDev, isMacAppStore } from "../utils"; export class ElectronPlatformUtilsService implements PlatformUtilsService { private clientType: ClientType; diff --git a/electron/src/services/electronRendererSecureStorage.service.ts b/electron/src/services/electronRendererSecureStorage.service.ts index 5d293350..5c3f3c74 100644 --- a/electron/src/services/electronRendererSecureStorage.service.ts +++ b/electron/src/services/electronRendererSecureStorage.service.ts @@ -1,7 +1,6 @@ import { ipcRenderer } from "electron"; import { StorageService } from "jslib-common/abstractions/storage.service"; - import { StorageOptions } from "jslib-common/models/domain/storageOptions"; export class ElectronRendererSecureStorageService implements StorageService { diff --git a/electron/src/services/electronStorage.service.ts b/electron/src/services/electronStorage.service.ts index 08d49ed0..fdabf2a2 100644 --- a/electron/src/services/electronStorage.service.ts +++ b/electron/src/services/electronStorage.service.ts @@ -1,11 +1,11 @@ -import { ipcMain, ipcRenderer } from "electron"; import * as fs from "fs"; -import { StorageService } from "jslib-common/abstractions/storage.service"; +import { ipcMain } from "electron"; +import { StorageService } from "jslib-common/abstractions/storage.service"; import { NodeUtils } from "jslib-common/misc/nodeUtils"; -// tslint:disable-next-line +// eslint-disable-next-line const Store = require("electron-store"); export class ElectronStorageService implements StorageService { diff --git a/electron/src/tray.main.ts b/electron/src/tray.main.ts index c5c3f661..ebbc5687 100644 --- a/electron/src/tray.main.ts +++ b/electron/src/tray.main.ts @@ -1,6 +1,7 @@ -import { app, BrowserWindow, Menu, MenuItemConstructorOptions, nativeImage, Tray } from "electron"; import * as path from "path"; +import { app, BrowserWindow, Menu, MenuItemConstructorOptions, nativeImage, Tray } from "electron"; + import { I18nService } from "jslib-common/abstractions/i18n.service"; import { StateService } from "jslib-common/abstractions/state.service"; @@ -75,7 +76,7 @@ export class TrayMain { } }); - win.on("show", async (e: Event) => { + win.on("show", async () => { const enableTray = await this.stateService.getEnableTray(); if (!enableTray) { setTimeout(() => this.removeTray(false), 100); diff --git a/electron/src/updater.main.ts b/electron/src/updater.main.ts index bc0fb4b4..66779f6b 100644 --- a/electron/src/updater.main.ts +++ b/electron/src/updater.main.ts @@ -1,10 +1,10 @@ -import { dialog, Menu, MenuItem, shell } from "electron"; +import { dialog, shell } from "electron"; import log from "electron-log"; import { autoUpdater } from "electron-updater"; -import { isAppImage, isDev, isMacAppStore, isWindowsPortable, isWindowsStore } from "./utils"; - import { I18nService } from "jslib-common/abstractions/i18n.service"; + +import { isAppImage, isDev, isMacAppStore, isWindowsPortable, isWindowsStore } from "./utils"; import { WindowMain } from "./window.main"; const UpdaterCheckInitalDelay = 5 * 1000; // 5 seconds @@ -123,7 +123,7 @@ export class UpdaterMain { }); } - async checkForUpdate(withFeedback: boolean = false) { + async checkForUpdate(withFeedback = false) { if (this.doingUpdateCheck || isDev()) { return; } diff --git a/electron/src/window.main.ts b/electron/src/window.main.ts index 2dc1709e..66d4c780 100644 --- a/electron/src/window.main.ts +++ b/electron/src/window.main.ts @@ -1,7 +1,8 @@ -import { app, BrowserWindow, screen } from "electron"; import * as path from "path"; import * as url from "url"; +import { app, BrowserWindow, screen } from "electron"; + import { LogService } from "jslib-common/abstractions/log.service"; import { StateService } from "jslib-common/abstractions/state.service"; @@ -11,11 +12,11 @@ const mainWindowSizeKey = "mainWindowSize"; const WindowEventHandlingDelay = 100; export class WindowMain { win: BrowserWindow; - isQuitting: boolean = false; + isQuitting = false; private windowStateChangeTimer: NodeJS.Timer; private windowStates: { [key: string]: any } = {}; - private enableAlwaysOnTop: boolean = false; + private enableAlwaysOnTop = false; constructor( private stateService: StateService, @@ -36,6 +37,7 @@ export class WindowMain { app.quit(); return; } else { + // eslint-disable-next-line app.on("second-instance", (event, argv, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. if (this.win != null) { diff --git a/node/package.json b/node/package.json index af6c0e3a..b5c6c225 100644 --- a/node/package.json +++ b/node/package.json @@ -15,9 +15,7 @@ "scripts": { "clean": "rimraf dist/**/*", "build": "npm run clean && tsc", - "build:watch": "npm run clean && tsc -watch", - "lint": "tslint 'src/**/*.ts' 'spec/**/*.ts'", - "lint:fix": "tslint 'src/**/*.ts' 'spec/**/*.ts' --fix" + "build:watch": "npm run clean && tsc -watch" }, "devDependencies": { "@types/inquirer": "^7.3.1", diff --git a/node/src/cli/baseProgram.ts b/node/src/cli/baseProgram.ts index b2ddd22f..4a2ec904 100644 --- a/node/src/cli/baseProgram.ts +++ b/node/src/cli/baseProgram.ts @@ -79,7 +79,7 @@ export abstract class BaseProgram { return message.raw; } - let out: string = ""; + let out = ""; if (message.title != null) { if (message.noColor) { out = message.title; diff --git a/node/src/cli/commands/login.command.ts b/node/src/cli/commands/login.command.ts index 61c30777..01df0cea 100644 --- a/node/src/cli/commands/login.command.ts +++ b/node/src/cli/commands/login.command.ts @@ -1,17 +1,8 @@ -import * as program from "commander"; import * as http from "http"; + +import * as program from "commander"; import * as inquirer from "inquirer"; - -import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; - -import { AuthResult } from "jslib-common/models/domain/authResult"; -import { - ApiLogInCredentials, - PasswordLogInCredentials, - SsoLogInCredentials, -} from "jslib-common/models/domain/logInCredentials"; -import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; -import { ErrorResponse } from "jslib-common/models/response/errorResponse"; +import Separator from "inquirer/lib/objects/separator"; import { ApiService } from "jslib-common/abstractions/api.service"; import { AuthService } from "jslib-common/abstractions/auth.service"; @@ -24,20 +15,21 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { PolicyService } from "jslib-common/abstractions/policy.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; - -import { Response } from "../models/response"; - -import { UpdateTempPasswordRequest } from "jslib-common/models/request/updateTempPasswordRequest"; - -import { MessageResponse } from "../models/response/messageResponse"; - +import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; import { NodeUtils } from "jslib-common/misc/nodeUtils"; import { Utils } from "jslib-common/misc/utils"; +import { AuthResult } from "jslib-common/models/domain/authResult"; +import { + ApiLogInCredentials, + PasswordLogInCredentials, + SsoLogInCredentials, +} from "jslib-common/models/domain/logInCredentials"; +import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; +import { UpdateTempPasswordRequest } from "jslib-common/models/request/updateTempPasswordRequest"; +import { ErrorResponse } from "jslib-common/models/response/errorResponse"; -import Separator from "inquirer/lib/objects/separator"; - -// tslint:disable-next-line -const open = require("open"); +import { Response } from "../models/response"; +import { MessageResponse } from "../models/response/messageResponse"; export class LoginCommand { protected validatedParams: () => Promise; @@ -482,7 +474,7 @@ export class LoginCommand { return clientId; } - private async apiClientSecret(isAdditionalAuthentication: boolean = false): Promise { + private async apiClientSecret(isAdditionalAuthentication = false): Promise { const additionalAuthenticationMessage = "Additional authentication required.\nAPI key "; let clientSecret: string = null; diff --git a/node/src/cli/commands/logout.command.ts b/node/src/cli/commands/logout.command.ts index 752d142d..6074ba9c 100644 --- a/node/src/cli/commands/logout.command.ts +++ b/node/src/cli/commands/logout.command.ts @@ -1,5 +1,3 @@ -import * as program from "commander"; - import { AuthService } from "jslib-common/abstractions/auth.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; diff --git a/node/src/cli/commands/update.command.ts b/node/src/cli/commands/update.command.ts index 147a4694..1b9408a3 100644 --- a/node/src/cli/commands/update.command.ts +++ b/node/src/cli/commands/update.command.ts @@ -1,4 +1,3 @@ -import * as program from "commander"; import * as fetch from "node-fetch"; import { I18nService } from "jslib-common/abstractions/i18n.service"; @@ -8,7 +7,7 @@ import { Response } from "../models/response"; import { MessageResponse } from "../models/response/messageResponse"; export class UpdateCommand { - inPkg: boolean = false; + inPkg = false; constructor( private platformUtilsService: PlatformUtilsService, diff --git a/node/src/cli/services/cliPlatformUtils.service.ts b/node/src/cli/services/cliPlatformUtils.service.ts index 43350308..6d40f07e 100644 --- a/node/src/cli/services/cliPlatformUtils.service.ts +++ b/node/src/cli/services/cliPlatformUtils.service.ts @@ -1,12 +1,11 @@ import * as child_process from "child_process"; +import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { ClientType } from "jslib-common/enums/clientType"; import { DeviceType } from "jslib-common/enums/deviceType"; import { ThemeType } from "jslib-common/enums/themeType"; -import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - -// tslint:disable-next-line +// eslint-disable-next-line const open = require("open"); export class CliPlatformUtilsService implements PlatformUtilsService { diff --git a/node/src/cli/services/consoleLog.service.ts b/node/src/cli/services/consoleLog.service.ts index f55e2d7d..73dfcc55 100644 --- a/node/src/cli/services/consoleLog.service.ts +++ b/node/src/cli/services/consoleLog.service.ts @@ -1,5 +1,4 @@ import { LogLevelType } from "jslib-common/enums/logLevelType"; - import { ConsoleLogService as BaseConsoleLogService } from "jslib-common/services/consoleLog.service"; export class ConsoleLogService extends BaseConsoleLogService { @@ -13,7 +12,7 @@ export class ConsoleLogService extends BaseConsoleLogService { } if (process.env.BW_RESPONSE === "true") { - // tslint:disable-next-line + // eslint-disable-next-line console.error(message); return; } diff --git a/node/src/services/lowdbStorage.service.ts b/node/src/services/lowdbStorage.service.ts index 05396115..e78fe2e4 100644 --- a/node/src/services/lowdbStorage.service.ts +++ b/node/src/services/lowdbStorage.service.ts @@ -1,11 +1,11 @@ import * as fs from "fs"; +import * as path from "path"; + import * as lowdb from "lowdb"; import * as FileSync from "lowdb/adapters/FileSync"; -import * as path from "path"; import { LogService } from "jslib-common/abstractions/log.service"; import { StorageService } from "jslib-common/abstractions/storage.service"; - import { NodeUtils } from "jslib-common/misc/nodeUtils"; import { sequentialize } from "jslib-common/misc/sequentialize"; import { Utils } from "jslib-common/misc/utils"; @@ -66,7 +66,7 @@ export class LowdbStorageService implements StorageService { if (fs.existsSync(this.dataFilePath)) { const backupPath = this.dataFilePath + ".bak"; this.logService.warning(`Writing backup of data file to ${backupPath}`); - await fs.copyFile(this.dataFilePath, backupPath, (err) => { + await fs.copyFile(this.dataFilePath, backupPath, () => { this.logService.warning( `Error while creating data file backup, "${e.message}". No backup may have been created.` ); diff --git a/node/src/services/nodeApi.service.ts b/node/src/services/nodeApi.service.ts index 08d85449..9ffafe3c 100644 --- a/node/src/services/nodeApi.service.ts +++ b/node/src/services/nodeApi.service.ts @@ -2,11 +2,10 @@ import * as FormData from "form-data"; import { HttpsProxyAgent } from "https-proxy-agent"; import * as fe from "node-fetch"; -import { ApiService } from "jslib-common/services/api.service"; - import { EnvironmentService } from "jslib-common/abstractions/environment.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { TokenService } from "jslib-common/abstractions/token.service"; +import { ApiService } from "jslib-common/services/api.service"; (global as any).fetch = fe.default; (global as any).Request = fe.Request; diff --git a/node/src/services/nodeCryptoFunction.service.ts b/node/src/services/nodeCryptoFunction.service.ts index dae6fa68..6d510855 100644 --- a/node/src/services/nodeCryptoFunction.service.ts +++ b/node/src/services/nodeCryptoFunction.service.ts @@ -1,13 +1,12 @@ import * as crypto from "crypto"; + import * as forge from "node-forge"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; - +import { Utils } from "jslib-common/misc/utils"; import { DecryptParameters } from "jslib-common/models/domain/decryptParameters"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; -import { Utils } from "jslib-common/misc/utils"; - export class NodeCryptoFunctionService implements CryptoFunctionService { pbkdf2( password: string | ArrayBuffer, diff --git a/package-lock.json b/package-lock.json index 2ca4e006..1b7ad74f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,14 @@ "@fluffy-spoon/substitute": "^1.202.0", "@types/jasmine": "^3.7.6", "@types/node": "^16.11.12", + "@typescript-eslint/eslint-plugin": "^5.10.1", + "@typescript-eslint/parser": "^5.10.1", "commander": "7.2.0", "concurrently": "^6.1.0", + "eslint": "^8.7.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.4", "form-data": "4.0.0", "husky": "^7.0.4", "jasmine": "^3.7.0", @@ -44,7 +50,6 @@ "ts-loader": "^8.1.0", "ts-node": "^10.4.0", "tsconfig-paths": "^3.12.0", - "tslint": "^6.1.3", "ttypescript": "^1.5.12", "typemoq": "^2.1.0", "typescript": "4.3.5", @@ -83,7 +88,6 @@ } }, "common": { - "name": "@bitwarden/jslib-common", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { @@ -110,7 +114,6 @@ } }, "electron": { - "name": "@bitwarden/jslib-electron", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { @@ -130,7 +133,6 @@ } }, "node": { - "name": "@bitwarden/jslib-node", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { @@ -153,9 +155,9 @@ } }, "node_modules/@angular/animations": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.14.tgz", - "integrity": "sha512-1BR5u32auVePvXNNP96DB2008V+Ku0OGqeZQl2h4XA9xzES/Zk5WllIJZXqRmWMRBVARfXsfb0RdMty9gcaVjA==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.16.tgz", + "integrity": "sha512-Kf6C7Ta+fCMq5DvT9JNVhBkcECrqFa3wumiC6ssGo5sNaEzXz+tlep9ZgEbqfxSn7gAN7L1DgsbS9u0O6tbUkg==", "dependencies": { "tslib": "^2.2.0" }, @@ -163,14 +165,9 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/core": "12.2.14" + "@angular/core": "12.2.16" } }, - "node_modules/@angular/animations/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/cdk": { "version": "12.2.13", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", @@ -193,15 +190,10 @@ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true }, - "node_modules/@angular/cdk/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/common": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.14.tgz", - "integrity": "sha512-ffYUYdwZETmFJw0AcWY30WsaWBhJxj/zSmFXWjgEGEGZH56zwbbNwfMZOYZ1jz4haAVxGu+TdXsOl2yMGzN7jQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.16.tgz", + "integrity": "sha512-FEqTXTEsnbDInqV1yFlm97Tz1OFqZS5t0TUkm8gzXRgpIce/F/jLwAg0u1VQkgOsno6cNm0xTWPoZgu85NI4ug==", "dependencies": { "tslib": "^2.2.0" }, @@ -209,19 +201,14 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/core": "12.2.14", + "@angular/core": "12.2.16", "rxjs": "^6.5.3 || ^7.0.0" } }, - "node_modules/@angular/common/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/compiler": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.14.tgz", - "integrity": "sha512-dwmZi+n66IUzRFlGWu9mjXq170ZEsaDvlNLZzaPgs6vZTa4Kt7PWvIF/Y7TMvnVv/uqNG6kOhfmOkf6rfz1Gjg==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.16.tgz", + "integrity": "sha512-nsYEw+yu8QyeqPf9nAmG419i1mtGM4v8+U+S3eQHQFXTgJzLymMykWHYu2ETdjUpNSLK6xcIQDBWtWnWSfJjAA==", "dependencies": { "tslib": "^2.2.0" }, @@ -229,15 +216,10 @@ "node": "^12.14.1 || >=14.0.0" } }, - "node_modules/@angular/compiler/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/core": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.14.tgz", - "integrity": "sha512-dlVk7yqUHL2R/eCmM8LsWuxhEBfzg0y1zHt0UqCuFwlCoiw+IG4HFy4OlZEUw9NUEZJSv0aDv3sWqxLkvK5vvg==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.16.tgz", + "integrity": "sha512-jsmvaRdAfng99z2a9mAmkfcsCE1wm+tBYVDxnc5JquSXznwtncjzcoc2X0J0dzrkCDvzFfpTsZ9vehylytBc+A==", "dependencies": { "tslib": "^2.2.0" }, @@ -249,15 +231,10 @@ "zone.js": "~0.11.4" } }, - "node_modules/@angular/core/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/forms": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.14.tgz", - "integrity": "sha512-/9/gSJUBXVRVdRnzgJnALAQZYJATuGDMkFC9ms9DEMG4PMAhe9x4if1lJjN6noz5RAom3qNuVBNWaYAPUxlcBQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.16.tgz", + "integrity": "sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==", "dependencies": { "tslib": "^2.2.0" }, @@ -265,21 +242,16 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.14", - "@angular/core": "12.2.14", - "@angular/platform-browser": "12.2.14", + "@angular/common": "12.2.16", + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16", "rxjs": "^6.5.3 || ^7.0.0" } }, - "node_modules/@angular/forms/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/platform-browser": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.14.tgz", - "integrity": "sha512-fWcE2rnJ3ZCISa1oPfsIDV7FBZBoLFEdDuMXAiDYqDPKvF/E5U5nHrS+K4SlLAi094bMobtTOReNWl/Ienniyw==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.16.tgz", + "integrity": "sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==", "dependencies": { "tslib": "^2.2.0" }, @@ -287,9 +259,9 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/animations": "12.2.14", - "@angular/common": "12.2.14", - "@angular/core": "12.2.14" + "@angular/animations": "12.2.16", + "@angular/common": "12.2.16", + "@angular/core": "12.2.16" }, "peerDependenciesMeta": { "@angular/animations": { @@ -298,9 +270,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.14.tgz", - "integrity": "sha512-0NPF7mS91Tct8rBmOLZPmnLSuS4kbLHXo6eTgrg80OC0vlzBiQwGDVW4X3KncCoX9CpevaGJCdSMc+uPNsFOUQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.16.tgz", + "integrity": "sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==", "dependencies": { "tslib": "^2.2.0" }, @@ -308,26 +280,16 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.14", - "@angular/compiler": "12.2.14", - "@angular/core": "12.2.14", - "@angular/platform-browser": "12.2.14" + "@angular/common": "12.2.16", + "@angular/compiler": "12.2.16", + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16" } }, - "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/@angular/platform-browser/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, "node_modules/@angular/router": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.14.tgz", - "integrity": "sha512-yP5grSnqBvc4vNhtYdcxDgDYIebUKs5f0xyFkUJM5030UnQ0CV45tBsSxHMkQbPZucIfOuxpRy8xy5+4GizuwQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.16.tgz", + "integrity": "sha512-LuFXSMIvX/VrB4jbYhigG2Y2pGQ9ULsSBUwDWwQCf4kr0eVI37LBJ2Vr74GBEznjgQ0UmWE89E+XYI80UhERTw==", "dependencies": { "tslib": "^2.2.0" }, @@ -335,114 +297,12 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.14", - "@angular/core": "12.2.14", - "@angular/platform-browser": "12.2.14", + "@angular/common": "12.2.16", + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16", "rxjs": "^6.5.3 || ^7.0.0" } }, - "node_modules/@angular/router/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.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/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/@bitwarden/jslib-angular": { "resolved": "angular", "link": true @@ -501,6 +361,27 @@ "global-tunnel-ng": "^2.7.1" } }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@electron/get/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -509,6 +390,43 @@ "semver": "bin/semver.js" } }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/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/@fluffy-spoon/substitute": { "version": "1.208.0", "resolved": "https://registry.npmjs.org/@fluffy-spoon/substitute/-/substitute-1.208.0.tgz", @@ -522,6 +440,26 @@ "url": "https://opencollective.com/substitute-js#section-contribute" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "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/@microsoft/signalr": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-5.0.10.tgz", @@ -551,6 +489,41 @@ "async-limiter": "~1.0.0" } }, + "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/@nodert-win10-rs4/windows.security.credentials.ui": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@nodert-win10-rs4/windows.security.credentials.ui/-/windows.security.credentials.ui-0.4.4.tgz", @@ -568,6 +541,15 @@ "node": ">=6" } }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -665,9 +647,15 @@ "dev": true }, "node_modules/@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.3.tgz", + "integrity": "sha512-SWyMrjgdAUHNQmutvDcKablrJhkDLy4wunTme8oYLjKp41GnHGxMRXr2MQMvy/qy8H3LdzwQk9gH4hZ6T++H8g==", + "dev": true + }, + "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/json5": { @@ -698,9 +686,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz", - "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q==", + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", "dev": true }, "node_modules/@types/node-fetch": { @@ -737,9 +725,9 @@ } }, "node_modules/@types/papaparse": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", - "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.2.tgz", + "integrity": "sha512-BNbCHJkTE4RwmAFkCxEalET4mDvGr/1ld7ZtQ4i/laWI/iiVt+GL07stdvufle4KfywyvloqqpIiJscXNCrKxA==", "dev": true, "dependencies": { "@types/node": "*" @@ -771,6 +759,190 @@ "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", + "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/type-utils": "5.10.2", + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", + "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", + "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -982,22 +1154,22 @@ } }, "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" } }, "node_modules/acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "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" @@ -1028,6 +1200,15 @@ "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/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1103,9 +1284,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -1170,9 +1351,9 @@ } }, "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==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true, "engines": { "node": ">=6" @@ -1192,6 +1373,17 @@ "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1248,13 +1440,9 @@ "dev": true }, "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" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", @@ -1283,6 +1471,34 @@ "node": ">=0.10.0" } }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1292,6 +1508,23 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -1464,15 +1697,6 @@ "node": ">=0.10.0" } }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1649,18 +1873,6 @@ "node": ">=8" } }, - "node_modules/boxen/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1849,15 +2061,6 @@ "node": ">=12.0.0" } }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -1896,6 +2099,15 @@ "y18n": "^4.0.0" } }, + "node_modules/cacache/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/cacache/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -1908,6 +2120,12 @@ "rimraf": "bin.js" } }, + "node_modules/cacache/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1967,10 +2185,32 @@ "node": ">=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==", + "dev": true, + "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/camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" @@ -2011,10 +2251,16 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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", @@ -2031,6 +2277,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/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/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -2305,9 +2563,9 @@ } }, "node_modules/concurrently": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", - "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -2368,9 +2626,9 @@ } }, "node_modules/conf/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -2401,36 +2659,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/conf/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conf/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conf/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -2521,9 +2749,9 @@ } }, "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==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" @@ -2645,21 +2873,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/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/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2742,9 +2955,9 @@ } }, "node_modules/date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", "dev": true, "engines": { "node": ">=0.11" @@ -2755,9 +2968,9 @@ } }, "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true, "engines": { "node": ">=4.0" @@ -2850,7 +3063,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "optional": true, + "devOptional": true, "dependencies": { "object-keys": "^1.0.12" }, @@ -2951,6 +3164,30 @@ "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/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-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -3028,6 +3265,12 @@ "stream-shift": "^1.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3094,88 +3337,10 @@ "semver": "^7.3.5" } }, - "node_modules/electron-updater/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/electron-updater/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-updater/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/electron-updater/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-updater/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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-updater/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-updater/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-updater/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/electron/node_modules/@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==" + "version": "14.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.10.tgz", + "integrity": "sha512-6iihJ/Pp5fsFJ/aEDGyvT4pHGmCpq7ToQ/yf4bl5SbVAvwpspYJ+v3jO7n8UyjhQVHTy+KNszOozDdv+O6sovQ==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -3231,9 +3396,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -3252,12 +3417,12 @@ } }, "node_modules/engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "dependencies": { - "base64-arraybuffer": "~1.0.1" + "@socket.io/base64-arraybuffer": "~1.0.2" }, "engines": { "node": ">=10.0.0" @@ -3298,18 +3463,6 @@ "node": ">=6.9.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/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -3345,6 +3498,57 @@ "stackframe": "^1.1.1" } }, + "node_modules/es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + } + }, "node_modules/es6-denodeify": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz", @@ -3381,11 +3585,15 @@ "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==", + "devOptional": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -3410,6 +3618,54 @@ "source-map": "~0.6.1" } }, + "node_modules/escodegen/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/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3420,28 +3676,282 @@ "node": ">=0.10.0" } }, - "node_modules/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==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "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": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/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/eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/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/eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/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/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": ">=4.0.0" + "node": ">=8.0.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/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-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3455,6 +3965,27 @@ "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", @@ -3467,7 +3998,7 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "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==", @@ -3476,6 +4007,15 @@ "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", @@ -3736,6 +4276,34 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "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-glob/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/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", @@ -3748,6 +4316,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "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/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3797,6 +4374,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/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=", + "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-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -3874,30 +4471,44 @@ "node": ">=6" } }, - "node_modules/find-cache-dir/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver" } }, "node_modules/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": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" + } + }, + "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": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/flush-write-stream": { @@ -3911,9 +4522,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true, "funding": [ { @@ -3993,16 +4604,16 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12" } }, "node_modules/fs-write-stream-atomic": { @@ -4043,6 +4654,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "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=", + "dev": true + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -4110,6 +4727,20 @@ "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==", + "dev": true, + "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", @@ -4122,6 +4753,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -4157,15 +4804,15 @@ } }, "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==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/global-agent": { @@ -4185,39 +4832,6 @@ "node": ">=10.0" } }, - "node_modules/global-agent/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==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global-agent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - }, "node_modules/global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -4248,6 +4862,21 @@ "node": ">=0.10" } }, + "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/globalthis": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", @@ -4263,6 +4892,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -4296,9 +4945,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/has": { "version": "1.0.3", @@ -4312,6 +4961,15 @@ "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, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4320,6 +4978,33 @@ "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -4605,12 +5290,37 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "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/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "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-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -4733,6 +5443,20 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.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", @@ -4757,6 +5481,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "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", @@ -4769,12 +5505,40 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "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-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.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -4788,9 +5552,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "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" @@ -4823,6 +5587,21 @@ "node": ">=0.10.0" } }, + "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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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", @@ -4919,6 +5698,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -4940,6 +5731,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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", @@ -4980,6 +5786,31 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, + "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==", + "dev": true, + "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-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "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", @@ -4992,12 +5823,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "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", @@ -5058,22 +5931,22 @@ } }, "node_modules/jasmine": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.10.0.tgz", - "integrity": "sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ==", + "version": "3.99.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.99.0.tgz", + "integrity": "sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==", "dev": true, "dependencies": { "glob": "^7.1.6", - "jasmine-core": "~3.10.0" + "jasmine-core": "~3.99.0" }, "bin": { "jasmine": "bin/jasmine.js" } }, "node_modules/jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", + "version": "3.99.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.0.tgz", + "integrity": "sha512-+ZDaJlEfRopINQqgE+hvzRyDIQDeKfqqTvF8RzXsvU1yE3pBDRud2+Qfh9WvGgRpuzqxyQJVI6Amy5XQ11r/3w==", "dev": true }, "node_modules/jasmine-ts": { @@ -5170,20 +6043,12 @@ "node": ">=12" } }, - "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, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -5271,6 +6136,12 @@ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" }, + "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/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -5290,23 +6161,26 @@ } }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", + "version": "6.3.13", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.13.tgz", + "integrity": "sha512-64lbtHBnM/sG7XKvitSQVlImKYNugyjw4K2e8cZYrlZm0GwoWrfsrkzgS/KWY/r3+fVM/2xvT/JN6MyfdttxLw==", "dev": true, "dependencies": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -5315,7 +6189,7 @@ "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", - "log4js": "^6.3.0", + "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "qjobs": "^1.2.0", @@ -5343,6 +6217,18 @@ "which": "^1.2.1" } }, + "node_modules/karma-chrome-launcher/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/karma-cli": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", @@ -5367,6 +6253,18 @@ "which": "^1.2.4" } }, + "node_modules/karma-detect-browsers/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/karma-firefox-launcher": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", @@ -5377,21 +6275,6 @@ "which": "^2.0.1" } }, - "node_modules/karma-firefox-launcher/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/karma-jasmine": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", @@ -5536,13 +6419,13 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" }, "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "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.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -5558,24 +6441,23 @@ } }, "node_modules/lint-staged": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz", - "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==", + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.3.tgz", + "integrity": "sha512-OqcLsqcPOqzvsfkxjeBpZylgJ3SRG1RYqc9LxC6tkt6tNsq1bNVkAixBwX09f6CobcHswzqVOCBpFR1Fck0+ag==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.16", "commander": "^8.3.0", - "debug": "^4.3.2", - "enquirer": "^2.3.6", + "debug": "^4.3.3", "execa": "^5.1.1", "lilconfig": "2.0.4", - "listr2": "^3.13.3", + "listr2": "^4.0.1", "micromatch": "^4.0.4", "normalize-path": "^3.0.0", - "object-inspect": "^1.11.0", + "object-inspect": "^1.12.0", "string-argv": "^0.3.1", - "supports-color": "^9.0.2", + "supports-color": "^9.2.1", "yaml": "^1.10.2" }, "bin": { @@ -5610,9 +6492,9 @@ } }, "node_modules/listr2": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.2.tgz", + "integrity": "sha512-YcgwfCWpvPbj9FLUGqvdFvd3hrFWKpOeuXznRgfWEJ7RNr8b/IKKIKZABHx3aU+4CWN/iSAFFSReziQG6vTeIA==", "dev": true, "dependencies": { "cli-truncate": "^2.1.0", @@ -5620,12 +6502,12 @@ "log-update": "^4.0.0", "p-map": "^4.0.0", "rfdc": "^1.3.0", - "rxjs": "^7.4.0", + "rxjs": "^7.5.2", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" @@ -5719,15 +6601,16 @@ } }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "dependencies": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/lodash": { @@ -5745,6 +6628,12 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, + "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/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -5824,16 +6713,16 @@ } }, "node_modules/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" }, "engines": { "node": ">=8.0" @@ -5854,6 +6743,14 @@ "node": ">=4" } }, + "node_modules/lowdb/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -5863,12 +6760,14 @@ } }, "node_modules/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, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/lunr": { @@ -5939,18 +6838,6 @@ "node": ">=10" } }, - "node_modules/matcher/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==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -5990,6 +6877,15 @@ "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/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -6315,10 +7211,16 @@ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "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==", + "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" @@ -6338,20 +7240,36 @@ "semver": "^5.4.1" } }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-fetch/node_modules/tr46": { @@ -6465,6 +7383,15 @@ "node": ">=4" } }, + "node_modules/nodemon/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/nodemon/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6527,6 +7454,15 @@ "node": ">=4" } }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "optional": true, + "engines": { + "node": ">=4" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6599,9 +7535,9 @@ } }, "node_modules/object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6611,7 +7547,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "optional": true, + "devOptional": true, "engines": { "node": ">= 0.4" } @@ -6628,6 +7564,24 @@ "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.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -6640,6 +7594,23 @@ "node": ">=0.10.0" } }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -6675,17 +7646,17 @@ } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.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" }, "engines": { "node": ">= 0.8.0" @@ -6722,28 +7693,27 @@ } }, "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "dependencies": { - "p-try": "^2.0.0" + "p-try": "^1.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/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": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/p-map": { @@ -6762,11 +7732,12 @@ } }, "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==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/package-json": { @@ -6815,6 +7786,18 @@ "readable-stream": "^2.1.5" } }, + "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", @@ -6897,6 +7880,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "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/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -6919,9 +7911,9 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "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" @@ -6931,11 +7923,12 @@ } }, "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/pkg-dir": { @@ -6950,6 +7943,67 @@ "node": ">=6" } }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/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/pkg-dir/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/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/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -6961,6 +8015,62 @@ "node": ">=8" } }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/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==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "engines": { + "node": ">=6" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -7009,9 +8119,9 @@ } }, "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "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" @@ -7203,6 +8313,26 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "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/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7265,6 +8395,14 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -7329,6 +8467,18 @@ "node": ">=0.10.0" } }, + "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/registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -7401,18 +8551,31 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "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" } }, + "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-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -7449,6 +8612,16 @@ "node": ">=0.12" } }, + "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/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -7497,12 +8670,6 @@ "node": ">=8.0" } }, - "node_modules/roarr/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "optional": true - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -7511,6 +8678,29 @@ "node": ">=0.12.0" } }, + "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/run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -7521,11 +8711,11 @@ } }, "node_modules/rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "dependencies": { - "tslib": "~2.1.0" + "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { @@ -7579,11 +8769,17 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-compare": { @@ -7727,6 +8923,20 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", @@ -7752,9 +8962,9 @@ ] }, "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dependencies": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -7783,6 +8993,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -7934,9 +9153,9 @@ "dev": true }, "node_modules/socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "dependencies": { "accepts": "~1.3.4", @@ -7989,6 +9208,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", @@ -8021,6 +9241,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/spawn-command": { @@ -8067,10 +9288,10 @@ } }, "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 + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true }, "node_modules/ssri": { "version": "6.0.2", @@ -8157,28 +9378,19 @@ "dev": true }, "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "dependencies": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "fs-extra": "^10.0.0" }, "engines": { "node": ">=8.0" } }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -8197,13 +9409,13 @@ } }, "node_modules/string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dev": true, "dependencies": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" }, "engines": { @@ -8240,6 +9452,32 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "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.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8270,11 +9508,15 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "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": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/sumchecker": { @@ -8303,6 +9545,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "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/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -8463,6 +9717,12 @@ "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/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -8695,6 +9955,15 @@ "node": ">=6" } }, + "node_modules/tough-cookie/node_modules/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, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", @@ -8765,39 +10034,6 @@ "node": ">=8.9.0" } }, - "node_modules/ts-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/ts-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/ts-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/ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", @@ -8861,127 +10097,31 @@ } }, "node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" - } - }, - "node_modules/tslint/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/tslint/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/tslint/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/tslint/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/tslint/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/tslint/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/tslint/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/tslint/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/tslint/node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, + "engines": { + "node": ">= 6" + }, "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tsutils/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/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -9026,21 +10166,22 @@ } }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "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.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "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==", + "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" }, @@ -9134,6 +10275,21 @@ "node": "*" } }, + "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/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -9186,11 +10342,11 @@ } }, "node_modules/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==", "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/unpipe": { @@ -9289,39 +10445,6 @@ "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/update-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/update-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/update-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/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -9348,9 +10471,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", + "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -9421,6 +10544,12 @@ "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", @@ -9550,7 +10679,7 @@ "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.", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, "optional": true, "dependencies": { @@ -9904,15 +11033,6 @@ "node": ">= 6" } }, - "node_modules/webpack-log/node_modules/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, - "engines": { - "node": ">=6" - } - }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -9978,6 +11098,19 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/webpack/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -10157,15 +11290,34 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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-pm-runs": { @@ -10387,10 +11539,9 @@ "dev": true }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -10500,18 +11651,11 @@ }, "dependencies": { "@angular/animations": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.14.tgz", - "integrity": "sha512-1BR5u32auVePvXNNP96DB2008V+Ku0OGqeZQl2h4XA9xzES/Zk5WllIJZXqRmWMRBVARfXsfb0RdMty9gcaVjA==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.16.tgz", + "integrity": "sha512-Kf6C7Ta+fCMq5DvT9JNVhBkcECrqFa3wumiC6ssGo5sNaEzXz+tlep9ZgEbqfxSn7gAN7L1DgsbS9u0O6tbUkg==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/cdk": { @@ -10528,195 +11672,63 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" } } }, "@angular/common": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.14.tgz", - "integrity": "sha512-ffYUYdwZETmFJw0AcWY30WsaWBhJxj/zSmFXWjgEGEGZH56zwbbNwfMZOYZ1jz4haAVxGu+TdXsOl2yMGzN7jQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.16.tgz", + "integrity": "sha512-FEqTXTEsnbDInqV1yFlm97Tz1OFqZS5t0TUkm8gzXRgpIce/F/jLwAg0u1VQkgOsno6cNm0xTWPoZgu85NI4ug==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/compiler": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.14.tgz", - "integrity": "sha512-dwmZi+n66IUzRFlGWu9mjXq170ZEsaDvlNLZzaPgs6vZTa4Kt7PWvIF/Y7TMvnVv/uqNG6kOhfmOkf6rfz1Gjg==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.16.tgz", + "integrity": "sha512-nsYEw+yu8QyeqPf9nAmG419i1mtGM4v8+U+S3eQHQFXTgJzLymMykWHYu2ETdjUpNSLK6xcIQDBWtWnWSfJjAA==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/core": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.14.tgz", - "integrity": "sha512-dlVk7yqUHL2R/eCmM8LsWuxhEBfzg0y1zHt0UqCuFwlCoiw+IG4HFy4OlZEUw9NUEZJSv0aDv3sWqxLkvK5vvg==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.16.tgz", + "integrity": "sha512-jsmvaRdAfng99z2a9mAmkfcsCE1wm+tBYVDxnc5JquSXznwtncjzcoc2X0J0dzrkCDvzFfpTsZ9vehylytBc+A==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/forms": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.14.tgz", - "integrity": "sha512-/9/gSJUBXVRVdRnzgJnALAQZYJATuGDMkFC9ms9DEMG4PMAhe9x4if1lJjN6noz5RAom3qNuVBNWaYAPUxlcBQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.16.tgz", + "integrity": "sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/platform-browser": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.14.tgz", - "integrity": "sha512-fWcE2rnJ3ZCISa1oPfsIDV7FBZBoLFEdDuMXAiDYqDPKvF/E5U5nHrS+K4SlLAi094bMobtTOReNWl/Ienniyw==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.16.tgz", + "integrity": "sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/platform-browser-dynamic": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.14.tgz", - "integrity": "sha512-0NPF7mS91Tct8rBmOLZPmnLSuS4kbLHXo6eTgrg80OC0vlzBiQwGDVW4X3KncCoX9CpevaGJCdSMc+uPNsFOUQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.16.tgz", + "integrity": "sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } } }, "@angular/router": { - "version": "12.2.14", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.14.tgz", - "integrity": "sha512-yP5grSnqBvc4vNhtYdcxDgDYIebUKs5f0xyFkUJM5030UnQ0CV45tBsSxHMkQbPZucIfOuxpRy8xy5+4GizuwQ==", + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.16.tgz", + "integrity": "sha512-LuFXSMIvX/VrB4jbYhigG2Y2pGQ9ULsSBUwDWwQCf4kr0eVI37LBJ2Vr74GBEznjgQ0UmWE89E+XYI80UhERTw==", "requires": { "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } - } - }, - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "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" - } - } } }, "@bitwarden/jslib-angular": { @@ -10830,10 +11842,58 @@ "sumchecker": "^3.0.1" }, "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "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 } } }, @@ -10843,6 +11903,23 @@ "integrity": "sha512-BU5vKRoK4OYlKzDtyg4HbtWnUNLOvV0ntqEZIphz+mq2G0HlVFywwJ7M+FbIcnJVDbUReS01FyL5x8R01r7zBg==", "dev": true }, + "@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "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 + }, "@microsoft/signalr": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-5.0.10.tgz", @@ -10874,6 +11951,32 @@ "msgpack5": "^4.5.0" } }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@nodert-win10-rs4/windows.security.credentials.ui": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@nodert-win10-rs4/windows.security.credentials.ui/-/windows.security.credentials.ui-0.4.4.tgz", @@ -10887,6 +11990,12 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -10977,9 +12086,15 @@ } }, "@types/jasmine": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz", - "integrity": "sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg==", + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.3.tgz", + "integrity": "sha512-SWyMrjgdAUHNQmutvDcKablrJhkDLy4wunTme8oYLjKp41GnHGxMRXr2MQMvy/qy8H3LdzwQk9gH4hZ6T++H8g==", + "dev": true + }, + "@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 }, "@types/json5": { @@ -11010,9 +12125,9 @@ "dev": true }, "@types/node": { - "version": "16.11.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.13.tgz", - "integrity": "sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q==", + "version": "16.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", + "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", "dev": true }, "@types/node-fetch": { @@ -11048,9 +12163,9 @@ } }, "@types/papaparse": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.1.tgz", - "integrity": "sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.2.tgz", + "integrity": "sha512-BNbCHJkTE4RwmAFkCxEalET4mDvGr/1ld7ZtQ4i/laWI/iiVt+GL07stdvufle4KfywyvloqqpIiJscXNCrKxA==", "dev": true, "requires": { "@types/node": "*" @@ -11082,6 +12197,101 @@ "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", + "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/type-utils": "5.10.2", + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", + "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", + "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -11290,19 +12500,19 @@ } }, "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": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-globals": { @@ -11323,6 +12533,13 @@ } } }, + "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, + "requires": {} + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -11375,9 +12592,9 @@ }, "dependencies": { "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -11434,9 +12651,9 @@ } }, "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==", + "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-escapes": { @@ -11445,6 +12662,13 @@ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "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==" + } } }, "ansi-regex": { @@ -11491,13 +12715,9 @@ "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" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { "version": "4.0.0", @@ -11517,12 +12737,42 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "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 }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -11671,12 +12921,6 @@ } } }, - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true - }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -11813,12 +13057,6 @@ "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } - }, - "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 } } }, @@ -11986,12 +13224,6 @@ "sax": "^1.2.4" } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -12027,6 +13259,15 @@ "y18n": "^4.0.0" }, "dependencies": { + "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" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -12035,6 +13276,12 @@ "requires": { "glob": "^7.1.3" } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -12084,10 +13331,26 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "chalk": { @@ -12115,9 +13378,9 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -12128,6 +13391,17 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "dependencies": { + "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" + } + } } }, "chownr": { @@ -12348,9 +13622,9 @@ } }, "concurrently": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", - "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -12398,9 +13672,9 @@ }, "dependencies": { "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12420,27 +13694,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "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==", - "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==", - "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==" } } }, @@ -12529,9 +13782,9 @@ "dev": true }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "copy-concurrently": { @@ -12640,17 +13893,6 @@ "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } } }, "crypto-browserify": { @@ -12725,15 +13967,15 @@ } }, "date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", "dev": true }, "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "dev": true }, "debounce-fn": { @@ -12799,7 +14041,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "optional": true, + "devOptional": true, "requires": { "object-keys": "^1.0.12" } @@ -12881,6 +14123,24 @@ } } }, + "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" + } + }, + "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-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -12946,6 +14206,12 @@ "stream-shift": "^1.0.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -12963,9 +14229,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==" + "version": "14.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.10.tgz", + "integrity": "sha512-6iihJ/Pp5fsFJ/aEDGyvT4pHGmCpq7ToQ/yf4bl5SbVAvwpspYJ+v3jO7n8UyjhQVHTy+KNszOozDdv+O6sovQ==" } } }, @@ -13003,66 +14269,6 @@ "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "^7.3.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^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==", - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "elliptic": { @@ -13115,9 +14321,9 @@ } }, "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -13142,12 +14348,12 @@ } }, "engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", "dev": true, "requires": { - "base64-arraybuffer": "~1.0.1" + "@socket.io/base64-arraybuffer": "~1.0.2" } }, "enhanced-resolve": { @@ -13161,15 +14367,6 @@ "tapable": "^1.0.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" - } - }, "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -13199,6 +14396,45 @@ "stackframe": "^1.1.1" } }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.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.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==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "es6-denodeify": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz", @@ -13229,9 +14465,10 @@ "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==", + "devOptional": true }, "escodegen": { "version": "2.0.0", @@ -13246,39 +14483,297 @@ "source-map": "~0.6.1" }, "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "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, "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "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": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "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" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "requires": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "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" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.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" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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==", + "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.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 } } }, + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, "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.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -13286,12 +14781,20 @@ "dev": true, "requires": { "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -13511,6 +15014,30 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "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, + "requires": { + "@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" + }, + "dependencies": { + "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" + } + } + } + }, "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", @@ -13523,6 +15050,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "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, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -13563,6 +15099,22 @@ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "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=" + } + } + }, + "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-uri-to-path": { @@ -13632,26 +15184,37 @@ "semver": "^5.6.0" } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.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": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "flush-write-stream": { @@ -13665,9 +15228,9 @@ } }, "follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "for-in": { @@ -13720,13 +15283,13 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -13760,6 +15323,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "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 + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -13814,12 +15383,33 @@ "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==", + "dev": true, + "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-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -13846,12 +15436,12 @@ } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "global-agent": { @@ -13866,32 +15456,6 @@ "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" - }, - "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==", - "optional": 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==", - "optional": 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==", - "optional": true - } } }, "global-dirs": { @@ -13915,6 +15479,15 @@ "tunnel": "^0.0.6" } }, + "globals": { + "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" + } + }, "globalthis": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", @@ -13924,6 +15497,20 @@ "define-properties": "^1.1.3" } }, + "globby": { + "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.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -13953,9 +15540,9 @@ } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "has": { "version": "1.0.3", @@ -13966,11 +15553,32 @@ "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==" }, + "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==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -14180,12 +15788,28 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, + "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-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -14286,6 +15910,17 @@ } } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -14306,6 +15941,15 @@ } } }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -14315,12 +15959,28 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^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.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -14331,9 +15991,9 @@ } }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "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" @@ -14359,6 +16019,15 @@ } } }, + "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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -14421,6 +16090,12 @@ "is-path-inside": "^3.0.2" } }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", @@ -14433,6 +16108,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -14464,18 +16148,61 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "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 }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -14521,19 +16248,19 @@ "dev": true }, "jasmine": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.10.0.tgz", - "integrity": "sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ==", + "version": "3.99.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.99.0.tgz", + "integrity": "sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==", "dev": true, "requires": { "glob": "^7.1.6", - "jasmine-core": "~3.10.0" + "jasmine-core": "~3.99.0" } }, "jasmine-core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", - "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", + "version": "3.99.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.0.tgz", + "integrity": "sha512-+ZDaJlEfRopINQqgE+hvzRyDIQDeKfqqTvF8RzXsvU1yE3pBDRud2+Qfh9WvGgRpuzqxyQJVI6Amy5XQ11r/3w==", "dev": true }, "jasmine-ts": { @@ -14609,20 +16336,12 @@ "source-map-resolve": "^0.5.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, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsdom": { @@ -14695,6 +16414,12 @@ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" }, + "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 + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -14711,23 +16436,24 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "karma": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.9.tgz", - "integrity": "sha512-E/MqdLM9uVIhfuyVnrhlGBu4miafBdXEAEqCmwdEMh3n17C7UWC/8Kvm3AYKr91gc7scutekZ0xv6rxRaUCtnw==", + "version": "6.3.13", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.13.tgz", + "integrity": "sha512-64lbtHBnM/sG7XKvitSQVlImKYNugyjw4K2e8cZYrlZm0GwoWrfsrkzgS/KWY/r3+fVM/2xvT/JN6MyfdttxLw==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -14736,7 +16462,7 @@ "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", "lodash": "^4.17.21", - "log4js": "^6.3.0", + "log4js": "^6.4.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "qjobs": "^1.2.0", @@ -14764,6 +16490,17 @@ "dev": true, "requires": { "which": "^1.2.1" + }, + "dependencies": { + "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" + } + } } }, "karma-cli": { @@ -14782,6 +16519,17 @@ "dev": true, "requires": { "which": "^1.2.4" + }, + "dependencies": { + "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" + } + } } }, "karma-firefox-launcher": { @@ -14792,17 +16540,6 @@ "requires": { "is-wsl": "^2.2.0", "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } } }, "karma-jasmine": { @@ -14910,13 +16647,13 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "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.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "lilconfig": { @@ -14926,24 +16663,23 @@ "dev": true }, "lint-staged": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.2.tgz", - "integrity": "sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==", + "version": "12.3.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.3.tgz", + "integrity": "sha512-OqcLsqcPOqzvsfkxjeBpZylgJ3SRG1RYqc9LxC6tkt6tNsq1bNVkAixBwX09f6CobcHswzqVOCBpFR1Fck0+ag==", "dev": true, "requires": { "cli-truncate": "^3.1.0", "colorette": "^2.0.16", "commander": "^8.3.0", - "debug": "^4.3.2", - "enquirer": "^2.3.6", + "debug": "^4.3.3", "execa": "^5.1.1", "lilconfig": "2.0.4", - "listr2": "^3.13.3", + "listr2": "^4.0.1", "micromatch": "^4.0.4", "normalize-path": "^3.0.0", - "object-inspect": "^1.11.0", + "object-inspect": "^1.12.0", "string-argv": "^0.3.1", - "supports-color": "^9.0.2", + "supports-color": "^9.2.1", "yaml": "^1.10.2" }, "dependencies": { @@ -14962,9 +16698,9 @@ } }, "listr2": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.2.tgz", + "integrity": "sha512-YcgwfCWpvPbj9FLUGqvdFvd3hrFWKpOeuXznRgfWEJ7RNr8b/IKKIKZABHx3aU+4CWN/iSAFFSReziQG6vTeIA==", "dev": true, "requires": { "cli-truncate": "^2.1.0", @@ -14972,7 +16708,7 @@ "log-update": "^4.0.0", "p-map": "^4.0.0", "rfdc": "^1.3.0", - "rxjs": "^7.4.0", + "rxjs": "^7.5.2", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, @@ -15041,11 +16777,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": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, @@ -15064,6 +16801,12 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, + "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 + }, "log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -15124,16 +16867,16 @@ } }, "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "dev": true, "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" } }, "lowdb": { @@ -15146,6 +16889,13 @@ "lodash": "4", "pify": "^3.0.0", "steno": "^0.4.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } } }, "lowercase-keys": { @@ -15154,12 +16904,11 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "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, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "lunr": { @@ -15212,14 +16961,6 @@ "optional": true, "requires": { "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "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==", - "optional": true - } } }, "md5.js": { @@ -15255,6 +16996,12 @@ "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 + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -15525,10 +17272,16 @@ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "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==", + "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": { @@ -15543,6 +17296,13 @@ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "node-addon-api": { @@ -15551,9 +17311,9 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" }, @@ -15656,6 +17416,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -15700,6 +17466,14 @@ "requires": { "config-chain": "^1.1.11", "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=", + "optional": true + } } }, "npm-run-path": { @@ -15761,16 +17535,16 @@ } }, "object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "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==", - "optional": true + "devOptional": true }, "object-visit": { "version": "1.0.1", @@ -15781,6 +17555,18 @@ "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.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -15790,6 +17576,17 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -15816,17 +17613,17 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.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" } }, "original": { @@ -15854,19 +17651,21 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "^1.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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -15879,9 +17678,10 @@ } }, "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==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "package-json": { "version": "6.5.0", @@ -15925,6 +17725,15 @@ "readable-stream": "^2.1.5" } }, + "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", @@ -15992,6 +17801,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "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 + }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -16011,15 +17826,16 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, "pkg-dir": { "version": "3.0.0", @@ -16028,6 +17844,51 @@ "dev": true, "requires": { "find-up": "^3.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-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-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 + } } }, "pkg-up": { @@ -16036,6 +17897,46 @@ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "requires": { "find-up": "^3.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==", + "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==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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==", + "requires": { + "p-limit": "^2.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==" + } } }, "posix-character-classes": { @@ -16073,9 +17974,9 @@ } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { @@ -16231,6 +18132,12 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "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 + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -16283,6 +18190,11 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -16340,6 +18252,12 @@ } } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -16394,15 +18312,22 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "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-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 + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -16432,6 +18357,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "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 + }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", @@ -16469,14 +18400,6 @@ "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "optional": true - } } }, "run-async": { @@ -16484,6 +18407,15 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, + "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": { + "queue-microtask": "^1.2.2" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -16494,11 +18426,11 @@ } }, "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", "requires": { - "tslib": "~2.1.0" + "tslib": "^2.1.0" } }, "safe-buffer": { @@ -16546,9 +18478,12 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-compare": { "version": "1.0.0", @@ -16662,6 +18597,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", @@ -16673,9 +18619,9 @@ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "requires": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -16697,6 +18643,12 @@ } } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -16820,9 +18772,9 @@ } }, "socket.io": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz", - "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -16936,10 +18888,10 @@ } }, "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "optional": true }, "ssri": { "version": "6.0.2", @@ -17020,22 +18972,14 @@ "dev": true }, "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "dev": true, "requires": { - "date-format": "^2.1.0", + "date-format": "^4.0.3", "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } + "fs-extra": "^10.0.0" } }, "string_decoder": { @@ -17053,13 +18997,13 @@ "dev": true }, "string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dev": true, "requires": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" }, "dependencies": { @@ -17080,6 +19024,26 @@ } } }, + "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" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -17101,9 +19065,10 @@ "dev": true }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "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 }, "sumchecker": { "version": "3.0.1", @@ -17122,6 +19087,12 @@ "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 + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -17244,6 +19215,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", @@ -17428,6 +19405,14 @@ "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" + }, + "dependencies": { + "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 + } } }, "tr46": { @@ -17477,30 +19462,6 @@ "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", - "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 } } }, @@ -17545,101 +19506,24 @@ } }, "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" + "tslib": "^1.8.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" - } - }, - "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 - }, - "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 - }, - "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" - } - }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } } } }, @@ -17673,18 +19557,19 @@ } }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "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.1.2" + "prelude-ls": "^1.2.1" } }, "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==" + "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": { "version": "1.6.18", @@ -17742,6 +19627,18 @@ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, + "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" + } + }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -17788,9 +19685,9 @@ } }, "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==" }, "unpipe": { "version": "1.0.0", @@ -17865,32 +19762,6 @@ "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.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 - } } }, "uri-js": { @@ -17926,9 +19797,9 @@ } }, "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", + "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -17982,6 +19853,12 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, + "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 + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18373,6 +20250,16 @@ "isobject": "^3.0.1" } }, + "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" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -18531,14 +20418,6 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" - }, - "dependencies": { - "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 - } } }, "webpack-sources": { @@ -18586,14 +20465,27 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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" } }, + "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-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", @@ -18769,10 +20661,9 @@ "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index ef9d5ccd..a2161100 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "clean": "rimraf dist/**/*", "build": "npm run clean && ttsc", "build:watch": "npm run clean && ttsc -watch", - "lint": "tslint '*/src/**/*.ts' 'spec/**/*.ts' && prettier --check .", - "lint:fix": "tslint '*/src/**/*.ts' 'spec/**/*.ts' --fix", + "lint": "eslint . && prettier --check .", + "lint:fix": "eslint . --fix", "prettier": "prettier --write .", "test": "karma start ./spec/support/karma.conf.js --single-run", "test:watch": "karma start ./spec/support/karma.conf.js", @@ -29,8 +29,14 @@ "@fluffy-spoon/substitute": "^1.202.0", "@types/jasmine": "^3.7.6", "@types/node": "^16.11.12", + "@typescript-eslint/eslint-plugin": "^5.10.1", + "@typescript-eslint/parser": "^5.10.1", "commander": "7.2.0", "concurrently": "^6.1.0", + "eslint": "^8.7.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.4", "form-data": "4.0.0", "husky": "^7.0.4", "jasmine": "^3.7.0", @@ -55,7 +61,6 @@ "ts-loader": "^8.1.0", "ts-node": "^10.4.0", "tsconfig-paths": "^3.12.0", - "tslint": "^6.1.3", "ttypescript": "^1.5.12", "typemoq": "^2.1.0", "typescript": "4.3.5", @@ -73,6 +78,7 @@ "npm": "~8" }, "lint-staged": { - "*": "prettier --ignore-unknown --write" + "*": "prettier --ignore-unknown --write", + "*.ts": "eslint --fix" } } diff --git a/shared/eslintrc.json b/shared/eslintrc.json new file mode 100644 index 00000000..70c61bc7 --- /dev/null +++ b/shared/eslintrc.json @@ -0,0 +1,29 @@ +{ + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/typescript", + "prettier" + ], + "rules": { + "@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled + "@typescript-eslint/no-unused-vars": ["warn", { "args": "none" }], + "@typescript-eslint/explicit-member-accessibility": [ + "error", + { + "accessibility": "no-public" + } + ], + "@typescript-eslint/no-this-alias": [ + "error", + { + "allowedNames": ["self"] + } + ], + "no-console": "warn", + "import/no-unresolved": "off" // TODO: Look into turning off once each package is an actual package. + } +} diff --git a/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts index 77e16bc3..cacfa3d2 100644 --- a/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts +++ b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts @@ -3,12 +3,9 @@ import Substitute, { Arg, SubstituteOf } from "@fluffy-spoon/substitute"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { ImportService } from "jslib-common/abstractions/import.service"; - import { KdfType } from "jslib-common/enums/kdfType"; - import { BitwardenPasswordProtectedImporter } from "jslib-common/importers/bitwardenPasswordProtectedImporter"; import { Importer } from "jslib-common/importers/importer"; - import { Utils } from "jslib-common/misc/utils"; import { ImportResult } from "jslib-common/models/domain/importResult"; diff --git a/spec/common/importers/firefoxCsvImporter.spec.ts b/spec/common/importers/firefoxCsvImporter.spec.ts index fc42c6ec..e15b86e9 100644 --- a/spec/common/importers/firefoxCsvImporter.spec.ts +++ b/spec/common/importers/firefoxCsvImporter.spec.ts @@ -1,5 +1,4 @@ import { FirefoxCsvImporter as Importer } from "jslib-common/importers/firefoxCsvImporter"; - import { CipherView } from "jslib-common/models/view/cipherView"; import { LoginUriView } from "jslib-common/models/view/loginUriView"; import { LoginView } from "jslib-common/models/view/loginView"; @@ -63,7 +62,9 @@ describe("Firefox CSV Importer", () => { const cipher = result.ciphers.shift(); let property: keyof typeof data.expected; for (property in data.expected) { + // eslint-disable-next-line if (data.expected.hasOwnProperty(property)) { + // eslint-disable-next-line expect(cipher.hasOwnProperty(property)).toBe(true); expect(cipher[property]).toEqual(data.expected[property]); } diff --git a/spec/common/importers/keepass2XmlImporter.spec.ts b/spec/common/importers/keepass2XmlImporter.spec.ts index ff0f2d14..6b539468 100644 --- a/spec/common/importers/keepass2XmlImporter.spec.ts +++ b/spec/common/importers/keepass2XmlImporter.spec.ts @@ -1,6 +1,6 @@ import { KeePass2XmlImporter as Importer } from "jslib-common/importers/keepass2XmlImporter"; -const TestData: string = ` +const TestData = ` KeePass diff --git a/spec/common/importers/keeperJsonImporter.spec.ts b/spec/common/importers/keeperJsonImporter.spec.ts index 3a4f34c2..3da6ac48 100644 --- a/spec/common/importers/keeperJsonImporter.spec.ts +++ b/spec/common/importers/keeperJsonImporter.spec.ts @@ -1,6 +1,5 @@ -import { Utils } from "jslib-common/misc/utils"; - import { KeeperJsonImporter as Importer } from "jslib-common/importers/keeperImporters/keeperJsonImporter"; +import { Utils } from "jslib-common/misc/utils"; import { testData as TestData } from "./testData/keeperJson/testData"; diff --git a/spec/common/importers/lastpassCsvImporter.spec.ts b/spec/common/importers/lastpassCsvImporter.spec.ts index 935db38c..9cca6c4f 100644 --- a/spec/common/importers/lastpassCsvImporter.spec.ts +++ b/spec/common/importers/lastpassCsvImporter.spec.ts @@ -1,12 +1,10 @@ +import { CipherType } from "jslib-common/enums/cipherType"; +import { FieldType } from "jslib-common/enums/fieldType"; import { LastPassCsvImporter as Importer } from "jslib-common/importers/lastpassCsvImporter"; - import { ImportResult } from "jslib-common/models/domain/importResult"; import { CipherView } from "jslib-common/models/view/cipherView"; import { FieldView } from "jslib-common/models/view/fieldView"; -import { CipherType } from "jslib-common/enums/cipherType"; -import { FieldType } from "jslib-common/enums/fieldType"; - function baseExcept(result: ImportResult) { expect(result).not.toBeNull(); expect(result.success).toBe(true); @@ -180,7 +178,9 @@ describe("Lastpass CSV Importer", () => { const cipher = result.ciphers.shift(); let property: keyof typeof data.expected; for (property in data.expected) { + // eslint-disable-next-line if (data.expected.hasOwnProperty(property)) { + // eslint-disable-next-line expect(cipher.hasOwnProperty(property)).toBe(true); expect(cipher[property]).toEqual(data.expected[property]); } diff --git a/spec/common/importers/nordpassCsvImporter.spec.ts b/spec/common/importers/nordpassCsvImporter.spec.ts index 7ac99bd2..4022b7e3 100644 --- a/spec/common/importers/nordpassCsvImporter.spec.ts +++ b/spec/common/importers/nordpassCsvImporter.spec.ts @@ -1,7 +1,6 @@ -import { NordPassCsvImporter as Importer } from "jslib-common/importers/nordpassCsvImporter"; - import { CipherType } from "jslib-common/enums/cipherType"; import { SecureNoteType } from "jslib-common/enums/secureNoteType"; +import { NordPassCsvImporter as Importer } from "jslib-common/importers/nordpassCsvImporter"; import { CipherView } from "jslib-common/models/view/cipherView"; import { IdentityView } from "jslib-common/models/view/identityView"; diff --git a/spec/common/importers/onepasswordMacCsvImporter.spec.ts b/spec/common/importers/onepasswordMacCsvImporter.spec.ts index ed643c8d..07268682 100644 --- a/spec/common/importers/onepasswordMacCsvImporter.spec.ts +++ b/spec/common/importers/onepasswordMacCsvImporter.spec.ts @@ -1,6 +1,5 @@ -import { OnePasswordMacCsvImporter as Importer } from "jslib-common/importers/onepasswordImporters/onepasswordMacCsvImporter"; - import { CipherType } from "jslib-common/enums/cipherType"; +import { OnePasswordMacCsvImporter as Importer } from "jslib-common/importers/onepasswordImporters/onepasswordMacCsvImporter"; import { CipherView } from "jslib-common/models/view/cipherView"; import { data as creditCardData } from "./testData/onePasswordCsv/creditCard.mac.csv"; diff --git a/spec/common/importers/onepasswordWinCsvImporter.spec.ts b/spec/common/importers/onepasswordWinCsvImporter.spec.ts index a8415d73..503aa3f5 100644 --- a/spec/common/importers/onepasswordWinCsvImporter.spec.ts +++ b/spec/common/importers/onepasswordWinCsvImporter.spec.ts @@ -1,7 +1,6 @@ -import { OnePasswordWinCsvImporter as Importer } from "jslib-common/importers/onepasswordImporters/onepasswordWinCsvImporter"; - import { CipherType } from "jslib-common/enums/cipherType"; import { FieldType } from "jslib-common/enums/fieldType"; +import { OnePasswordWinCsvImporter as Importer } from "jslib-common/importers/onepasswordImporters/onepasswordWinCsvImporter"; import { CipherView } from "jslib-common/models/view/cipherView"; import { FieldView } from "jslib-common/models/view/fieldView"; diff --git a/spec/common/importers/testData/onePasswordCsv/creditCard.mac.csv.ts b/spec/common/importers/testData/onePasswordCsv/creditCard.mac.csv.ts index 3062c067..167b025f 100644 --- a/spec/common/importers/testData/onePasswordCsv/creditCard.mac.csv.ts +++ b/spec/common/importers/testData/onePasswordCsv/creditCard.mac.csv.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ export const data = `"account number(accountNo)","address(address)","address(branchAddress)","admin console URL(admin_console_url)","admin console username(admin_console_username)","AirPort ID(airport_id)","alias(alias)","AOL/AIM(aim)","approved wildlife(game)","attached storage password(disk_password)","auth​ method(pop_authentication)","auth​ method(smtp_authentication)","bank name(bankName)","base station name(name)","base station password(password)","birth date(birthdate)","business(busphone)","cardholder name(cardholder)","cash withdrawal limit(cashLimit)","cell(cellphone)","company name(company_name)","company(company)","conditions / restrictions(conditions)","connection options(options)","console password(admin_console_password)","country(country)","Created Date","credit limit(creditLimit)","customer service phone(customer_service_phone)","database(database)","date of birth(birthdate)","default phone(defphone)","department(department)","download page(download_link)","email(email)","expires(expires)","expiry date(expiry_date)","expiry date(expiry)","first name(firstname)","forum signature(forumsig)","full name(fullname)","full name(name)","group(org_name)","height(height)","home(homephone)","IBAN(iban)","ICQ(icq)","initial(initial)","interest rate(interest)","issue number(issuenumber)","issued on(issue_date)","issuing authority(issuing_authority)","issuing bank(bank)","issuing country(issuing_country)","job title(jobtitle)","last name(lastname)","license class(class)","license key(reg_code)","licensed to(reg_name)","maximum quota(quota)","member ID (additional)(additional_no)","member ID(membership_no)","member name(member_name)","member since(member_since)","Modified Date","MSN(msn)","name on account(owner)","name(name)","nationality(nationality)","network name(network_name)","Notes","number(ccnum)","number(number)","occupation(occupation)","order number(order_number)","order total(order_total)","Password","password(password)","password(pop_password)","password(smtp_password)","phone (intl)(phoneIntl)","phone (local)(phone_local)","phone (local)(phoneLocal)","phone (toll free)(phone_tollfree)","phone (toll free)(phoneTollFree)","phone for reserva​tions(reservations_phone)","phone(branchPhone)","PIN(pin)","PIN(telephonePin)","place of birth(birthplace)","port number(pop_port)","port number(smtp_port)","port(port)","provider's website(provider_website)","provider(provider)","publisher(publisher_name)","purchase date(order_date)","registered email(reg_email)","reminder answer(remindera)","reminder question(reminderq)","retail price(retail_price)","routing number(routingNo)","Scope","security(pop_security)","security(smtp_security)","server / IP address(server)","server(hostname)","server(pop_server)","sex(sex)","SID(sid)","skype(skype)","SMTP server(smtp_server)","state(state)","support email(support_email)","support phone(support_contact_phone)","support URL(support_contact_url)","SWIFT(swift)","Tags","telephone(phone)","Title","Type","type(accountType)","type(database_type)","type(pop_type)","type(type)","URL","URL(url)","Username","username(pop_username)","username(smtp_username)","username(username)","valid from(valid_from)","valid from(validFrom)","verification number(cvv)","version(product_version)","website(publisher_website)","website(website)","wireless network password(wireless_password)","wireless security(wireless_security)","Yahoo(yahoo)", ,,,,,,,,,,,,,,,,,"test",,,,,,,,,"1606923869",,,,,,,,,,,"01/2030",,,,,,,,,,,,,,,,,,,,,,,,,,,"1606924056",,,,,,"","4111111111111111",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"{( )}",,"test card","Credit Card",,,,"laser",,,,,,,,,"111",,,,,,,`; diff --git a/spec/common/importers/testData/onePasswordCsv/identity.mac.csv.ts b/spec/common/importers/testData/onePasswordCsv/identity.mac.csv.ts index e02aed52..48ea6ebd 100644 --- a/spec/common/importers/testData/onePasswordCsv/identity.mac.csv.ts +++ b/spec/common/importers/testData/onePasswordCsv/identity.mac.csv.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ export const data = `"account number(accountNo)","address(address)","address(branchAddress)","admin console URL(admin_console_url)","admin console username(admin_console_username)","AirPort ID(airport_id)","alias(alias)","AOL/AIM(aim)","approved wildlife(game)","attached storage password(disk_password)","auth​ method(pop_authentication)","auth​ method(smtp_authentication)","bank name(bankName)","base station name(name)","base station password(password)","birth date(birthdate)","business(busphone)","cardholder name(cardholder)","cash withdrawal limit(cashLimit)","cell(cellphone)","company name(company_name)","company(company)","conditions / restrictions(conditions)","connection options(options)","console password(admin_console_password)","country(country)","Created Date","credit limit(creditLimit)","customer service phone(customer_service_phone)","database(database)","date of birth(birthdate)","default phone(defphone)","department(department)","download page(download_link)","email(email)","expires(expires)","expiry date(expiry_date)","expiry date(expiry)","first name(firstname)","forum signature(forumsig)","full name(fullname)","full name(name)","group(org_name)","height(height)","home(homephone)","IBAN(iban)","ICQ(icq)","initial(initial)","interest rate(interest)","issue number(issuenumber)","issued on(issue_date)","issuing authority(issuing_authority)","issuing bank(bank)","issuing country(issuing_country)","job title(jobtitle)","last name(lastname)","license class(class)","license key(reg_code)","licensed to(reg_name)","maximum quota(quota)","member ID (additional)(additional_no)","member ID(membership_no)","member name(member_name)","member since(member_since)","Modified Date","MSN(msn)","name on account(owner)","name(name)","nationality(nationality)","network name(network_name)","Notes","number(ccnum)","number(number)","occupation(occupation)","order number(order_number)","order total(order_total)","Password","password(password)","password(pop_password)","password(smtp_password)","phone (intl)(phoneIntl)","phone (local)(phone_local)","phone (local)(phoneLocal)","phone (toll free)(phone_tollfree)","phone (toll free)(phoneTollFree)","phone for reserva​tions(reservations_phone)","phone(branchPhone)","PIN(pin)","PIN(telephonePin)","place of birth(birthplace)","port number(pop_port)","port number(smtp_port)","port(port)","provider's website(provider_website)","provider(provider)","publisher(publisher_name)","purchase date(order_date)","registered email(reg_email)","reminder answer(remindera)","reminder question(reminderq)","retail price(retail_price)","routing number(routingNo)","Scope","security(pop_security)","security(smtp_security)","server / IP address(server)","server(hostname)","server(pop_server)","sex(sex)","SID(sid)","skype(skype)","SMTP server(smtp_server)","state(state)","support email(support_email)","support phone(support_contact_phone)","support URL(support_contact_url)","SWIFT(swift)","Tags","telephone(phone)","Title","Type","type(accountType)","type(database_type)","type(pop_type)","type(type)","URL","URL(url)","Username","username(pop_username)","username(smtp_username)","username(username)","valid from(valid_from)","valid from(validFrom)","verification number(cvv)","version(product_version)","website(publisher_website)","website(website)","wireless network password(wireless_password)","wireless security(wireless_security)","Yahoo(yahoo)", ,"address city state zip diff --git a/spec/common/importers/testData/onePasswordCsv/multipleItems.mac.csv.ts b/spec/common/importers/testData/onePasswordCsv/multipleItems.mac.csv.ts index e994b1af..055b2e2a 100644 --- a/spec/common/importers/testData/onePasswordCsv/multipleItems.mac.csv.ts +++ b/spec/common/importers/testData/onePasswordCsv/multipleItems.mac.csv.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ export const data = `"account number(accountNo)","address(address)","address(branchAddress)","admin console URL(admin_console_url)","admin console username(admin_console_username)","AirPort ID(airport_id)","alias(alias)","AOL/AIM(aim)","approved wildlife(game)","attached storage password(disk_password)","auth​ method(pop_authentication)","auth​ method(smtp_authentication)","bank name(bankName)","base station name(name)","base station password(password)","birth date(birthdate)","business(busphone)","cardholder name(cardholder)","cash withdrawal limit(cashLimit)","cell(cellphone)","company name(company_name)","company(company)","conditions / restrictions(conditions)","connection options(options)","console password(admin_console_password)","country(country)","Created Date","credit limit(creditLimit)","customer service phone(customer_service_phone)","database(database)","date of birth(birthdate)","default phone(defphone)","department(department)","download page(download_link)","email(email)","expires(expires)","expiry date(expiry_date)","expiry date(expiry)","first name(firstname)","forum signature(forumsig)","full name(fullname)","full name(name)","group(org_name)","height(height)","home(homephone)","IBAN(iban)","ICQ(icq)","initial(initial)","interest rate(interest)","issue number(issuenumber)","issued on(issue_date)","issuing authority(issuing_authority)","issuing bank(bank)","issuing country(issuing_country)","job title(jobtitle)","last name(lastname)","license class(class)","license key(reg_code)","licensed to(reg_name)","maximum quota(quota)","member ID (additional)(additional_no)","member ID(membership_no)","member name(member_name)","member since(member_since)","Modified Date","MSN(msn)","name on account(owner)","name(name)","nationality(nationality)","network name(network_name)","Notes","number(ccnum)","number(number)","occupation(occupation)","order number(order_number)","order total(order_total)","Password","password(password)","password(pop_password)","password(smtp_password)","phone (intl)(phoneIntl)","phone (local)(phone_local)","phone (local)(phoneLocal)","phone (toll free)(phone_tollfree)","phone (toll free)(phoneTollFree)","phone for reserva​tions(reservations_phone)","phone(branchPhone)","PIN(pin)","PIN(telephonePin)","place of birth(birthplace)","port number(pop_port)","port number(smtp_port)","port(port)","provider's website(provider_website)","provider(provider)","publisher(publisher_name)","purchase date(order_date)","registered email(reg_email)","reminder answer(remindera)","reminder question(reminderq)","retail price(retail_price)","routing number(routingNo)","Scope","security(pop_security)","security(smtp_security)","server / IP address(server)","server(hostname)","server(pop_server)","sex(sex)","SID(sid)","skype(skype)","SMTP server(smtp_server)","state(state)","support email(support_email)","support phone(support_contact_phone)","support URL(support_contact_url)","SWIFT(swift)","Tags","telephone(phone)","Title","Type","type(accountType)","type(database_type)","type(pop_type)","type(type)","URL","URL(url)","Username","username(pop_username)","username(smtp_username)","username(username)","valid from(valid_from)","valid from(validFrom)","verification number(cvv)","version(product_version)","website(publisher_website)","website(website)","wireless network password(wireless_password)","wireless security(wireless_security)","Yahoo(yahoo)", ,,,,,,,,,,,,,,,,,,,,,,,,,,"1606923754",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"1606923754",,,,,,"Follow these steps to get started.",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"{( \\"Starter Kit\\" diff --git a/spec/common/importers/testData/safeInCloud/testData.xml.ts b/spec/common/importers/testData/safeInCloud/testData.xml.ts index 4c3d7b77..efac9783 100644 --- a/spec/common/importers/testData/safeInCloud/testData.xml.ts +++ b/spec/common/importers/testData/safeInCloud/testData.xml.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ export const data = ` diff --git a/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts index 6ce8b4c9..2f4fe6c3 100644 --- a/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts +++ b/spec/common/misc/logInStrategies/apiLogIn.strategy.spec.ts @@ -11,10 +11,8 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { StateService } from "jslib-common/abstractions/state.service"; import { TokenService } from "jslib-common/abstractions/token.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; - import { ApiLogInStrategy } from "jslib-common/misc/logInStrategies/apiLogin.strategy"; import { Utils } from "jslib-common/misc/utils"; - import { ApiLogInCredentials } from "jslib-common/models/domain/logInCredentials"; import { identityTokenResponseFactory } from "./logIn.strategy.spec"; diff --git a/spec/common/misc/logInStrategies/logIn.strategy.spec.ts b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts index c3d97f3d..308091e9 100644 --- a/spec/common/misc/logInStrategies/logIn.strategy.spec.ts +++ b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts @@ -10,23 +10,18 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { StateService } from "jslib-common/abstractions/state.service"; import { TokenService } from "jslib-common/abstractions/token.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; - +import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; import { PasswordLogInStrategy } from "jslib-common/misc/logInStrategies/passwordLogin.strategy"; import { Utils } from "jslib-common/misc/utils"; - import { Account, AccountProfile, AccountTokens } from "jslib-common/models/domain/account"; import { AuthResult } from "jslib-common/models/domain/authResult"; import { EncString } from "jslib-common/models/domain/encString"; import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; - import { PasswordTokenRequest } from "jslib-common/models/request/identityToken/passwordTokenRequest"; - import { IdentityCaptchaResponse } from "jslib-common/models/response/identityCaptchaResponse"; import { IdentityTokenResponse } from "jslib-common/models/response/identityTokenResponse"; import { IdentityTwoFactorResponse } from "jslib-common/models/response/identityTwoFactorResponse"; -import { TwoFactorProviderType } from "jslib-common/enums/twoFactorProviderType"; - const email = "hello@world.com"; const masterPassword = "password"; diff --git a/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts index 4d4aa1dd..65bf5367 100644 --- a/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts +++ b/spec/common/misc/logInStrategies/passwordLogIn.strategy.spec.ts @@ -10,15 +10,12 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { StateService } from "jslib-common/abstractions/state.service"; import { TokenService } from "jslib-common/abstractions/token.service"; import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; - +import { HashPurpose } from "jslib-common/enums/hashPurpose"; import { PasswordLogInStrategy } from "jslib-common/misc/logInStrategies/passwordLogin.strategy"; import { Utils } from "jslib-common/misc/utils"; - import { PasswordLogInCredentials } from "jslib-common/models/domain/logInCredentials"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; -import { HashPurpose } from "jslib-common/enums/hashPurpose"; - import { identityTokenResponseFactory } from "./logIn.strategy.spec"; const email = "hello@world.com"; diff --git a/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts b/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts index fdb20330..826a16a5 100644 --- a/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts +++ b/spec/common/misc/logInStrategies/ssoLogIn.strategy.spec.ts @@ -9,16 +9,13 @@ import { MessagingService } from "jslib-common/abstractions/messaging.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { StateService } from "jslib-common/abstractions/state.service"; import { TokenService } from "jslib-common/abstractions/token.service"; - +import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; import { SsoLogInStrategy } from "jslib-common/misc/logInStrategies/ssoLogin.strategy"; import { Utils } from "jslib-common/misc/utils"; - -import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service"; +import { SsoLogInCredentials } from "jslib-common/models/domain/logInCredentials"; import { identityTokenResponseFactory } from "./logIn.strategy.spec"; -import { SsoLogInCredentials } from "jslib-common/models/domain/logInCredentials"; - describe("SsoLogInStrategy", () => { let cryptoService: SubstituteOf; let apiService: SubstituteOf; diff --git a/spec/common/services/cipher.service.spec.ts b/spec/common/services/cipher.service.spec.ts index e1bf461c..79b75787 100644 --- a/spec/common/services/cipher.service.spec.ts +++ b/spec/common/services/cipher.service.spec.ts @@ -8,13 +8,11 @@ import { LogService } from "jslib-common/abstractions/log.service"; import { SearchService } from "jslib-common/abstractions/search.service"; import { SettingsService } from "jslib-common/abstractions/settings.service"; import { StateService } from "jslib-common/abstractions/state.service"; - import { Utils } from "jslib-common/misc/utils"; import { Cipher } from "jslib-common/models/domain/cipher"; import { EncArrayBuffer } from "jslib-common/models/domain/encArrayBuffer"; import { EncString } from "jslib-common/models/domain/encString"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; - import { CipherService } from "jslib-common/services/cipher.service"; const ENCRYPTED_TEXT = "This data has been encrypted"; diff --git a/spec/common/services/consoleLog.service.spec.ts b/spec/common/services/consoleLog.service.spec.ts index a7f7eddb..120888e8 100644 --- a/spec/common/services/consoleLog.service.spec.ts +++ b/spec/common/services/consoleLog.service.spec.ts @@ -3,20 +3,20 @@ import { ConsoleLogService } from "jslib-common/services/consoleLog.service"; const originalConsole = console; let caughtMessage: any; -declare var console: any; +declare let console: any; export function interceptConsole(interceptions: any): object { console = { - // tslint:disable-next-line log: function () { + // eslint-disable-next-line interceptions.log = arguments; }, - // tslint:disable-next-line warn: function () { + // eslint-disable-next-line interceptions.warn = arguments; }, - // tslint:disable-next-line error: function () { + // eslint-disable-next-line interceptions.error = arguments; }, }; @@ -40,7 +40,7 @@ describe("ConsoleLogService", () => { }); it("filters messages below the set threshold", () => { - logService = new ConsoleLogService(true, (level) => true); + logService = new ConsoleLogService(true, () => true); logService.debug("debug"); logService.info("info"); logService.warning("warning"); @@ -93,7 +93,7 @@ describe("ConsoleLogService", () => { }); it("filters time output", async () => { - logService = new ConsoleLogService(true, (level) => true); + logService = new ConsoleLogService(true, () => true); logService.time(); logService.timeEnd(); diff --git a/spec/common/services/export.service.spec.ts b/spec/common/services/export.service.spec.ts index cb093261..e0d01994 100644 --- a/spec/common/services/export.service.spec.ts +++ b/spec/common/services/export.service.spec.ts @@ -5,20 +5,16 @@ import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service"; import { FolderService } from "jslib-common/abstractions/folder.service"; - -import { ExportService } from "jslib-common/services/export.service"; - +import { CipherType } from "jslib-common/enums/cipherType"; +import { KdfType } from "jslib-common/enums/kdfType"; +import { Utils } from "jslib-common/misc/utils"; import { Cipher } from "jslib-common/models/domain/cipher"; import { EncString } from "jslib-common/models/domain/encString"; import { Login } from "jslib-common/models/domain/login"; import { CipherWithIds as CipherExport } from "jslib-common/models/export/cipherWithIds"; - -import { CipherType } from "jslib-common/enums/cipherType"; -import { KdfType } from "jslib-common/enums/kdfType"; - -import { Utils } from "jslib-common/misc/utils"; import { CipherView } from "jslib-common/models/view/cipherView"; import { LoginView } from "jslib-common/models/view/loginView"; +import { ExportService } from "jslib-common/services/export.service"; import { BuildTestObject, GetUniqueString } from "../../utils"; diff --git a/spec/common/services/import.service.spec.ts b/spec/common/services/import.service.spec.ts index 602cbc20..c0d3d034 100644 --- a/spec/common/services/import.service.spec.ts +++ b/spec/common/services/import.service.spec.ts @@ -1,6 +1,6 @@ -import Substitute, { Arg, SubstituteOf } from "@fluffy-spoon/substitute"; -import { ApiService } from "jslib-common/abstractions/api.service"; +import Substitute, { SubstituteOf } from "@fluffy-spoon/substitute"; +import { ApiService } from "jslib-common/abstractions/api.service"; import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CollectionService } from "jslib-common/abstractions/collection.service"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; @@ -8,10 +8,8 @@ import { FolderService } from "jslib-common/abstractions/folder.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; import { BitwardenPasswordProtectedImporter } from "jslib-common/importers/bitwardenPasswordProtectedImporter"; - import { Importer } from "jslib-common/importers/importer"; import { Utils } from "jslib-common/misc/utils"; - import { ImportService } from "jslib-common/services/import.service"; describe("ImportService", () => { diff --git a/spec/common/services/stateMigration.service.ts b/spec/common/services/stateMigration.service.ts index 1f488b12..d325585a 100644 --- a/spec/common/services/stateMigration.service.ts +++ b/spec/common/services/stateMigration.service.ts @@ -1,15 +1,11 @@ import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; import { StorageService } from "jslib-common/abstractions/storage.service"; - -import { StateMigrationService } from "jslib-common/services/stateMigration.service"; - +import { StateVersion } from "jslib-common/enums/stateVersion"; import { StateFactory } from "jslib-common/factories/stateFactory"; - import { Account } from "jslib-common/models/domain/account"; import { GlobalState } from "jslib-common/models/domain/globalState"; - -import { StateVersion } from "jslib-common/enums/stateVersion"; +import { StateMigrationService } from "jslib-common/services/stateMigration.service"; const userId = "USER_ID"; diff --git a/spec/helpers.ts b/spec/helpers.ts index 3d7aaa73..f73acc36 100644 --- a/spec/helpers.ts +++ b/spec/helpers.ts @@ -1,9 +1,9 @@ -// tslint:disable-next-line +// eslint-disable-next-line const TSConsoleReporter = require("jasmine-ts-console-reporter"); jasmine.getEnv().clearReporters(); // Clear default console reporter jasmine.getEnv().addReporter(new TSConsoleReporter()); // Polyfills -// tslint:disable-next-line +// eslint-disable-next-line const jsdom: any = require("jsdom"); (global as any).DOMParser = new jsdom.JSDOM().window.DOMParser; diff --git a/spec/node/cli/consoleLog.service.spec.ts b/spec/node/cli/consoleLog.service.spec.ts index a6d4529c..46d392b1 100644 --- a/spec/node/cli/consoleLog.service.spec.ts +++ b/spec/node/cli/consoleLog.service.spec.ts @@ -1,7 +1,7 @@ import { ConsoleLogService } from "jslib-node/cli/services/consoleLog.service"; + import { interceptConsole, restoreConsole } from "../../common/services/consoleLog.service.spec"; -const originalConsole = console; let caughtMessage: any = {}; describe("CLI Console log service", () => { diff --git a/spec/node/services/nodeCryptoFunction.service.spec.ts b/spec/node/services/nodeCryptoFunction.service.spec.ts index 43849b74..2173523f 100644 --- a/spec/node/services/nodeCryptoFunction.service.spec.ts +++ b/spec/node/services/nodeCryptoFunction.service.spec.ts @@ -1,7 +1,6 @@ -import { NodeCryptoFunctionService } from "jslib-node/services/nodeCryptoFunction.service"; - import { Utils } from "jslib-common/misc/utils"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; +import { NodeCryptoFunctionService } from "jslib-node/services/nodeCryptoFunction.service"; const RsaPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl0Vawl/toXzkEvB82FEtqHP" + diff --git a/spec/support/karma.conf.js b/spec/support/karma.conf.js index 3b5baa28..ab8fe6e2 100644 --- a/spec/support/karma.conf.js +++ b/spec/support/karma.conf.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line module.exports = (config) => { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) @@ -85,7 +86,7 @@ module.exports = (config) => { removeBrowser("SafariTechPreview"); var githubAction = - process.env.GITHUB_WORKFLOW != null && process.env.GITHUB_WORKFLOW !== ""; + process.env.GITHUB_WORKFLOW != null && process.env.GITHUB_WORKFLOW !== ""; // eslint-disable-line if (githubAction) { removeBrowser("Firefox"); removeBrowser("Safari"); diff --git a/spec/utils.ts b/spec/utils.ts index 00cdcd3f..bd47af7a 100644 --- a/spec/utils.ts +++ b/spec/utils.ts @@ -1,13 +1,12 @@ function newGuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { - // tslint:disable:no-bitwise const r = (Math.random() * 16) | 0; const v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); } -export function GetUniqueString(prefix: string = "") { +export function GetUniqueString(prefix = "") { return prefix + "_" + newGuid(); } diff --git a/spec/web/services/webCryptoFunction.service.spec.ts b/spec/web/services/webCryptoFunction.service.spec.ts index 88ea3c0d..98691993 100644 --- a/spec/web/services/webCryptoFunction.service.spec.ts +++ b/spec/web/services/webCryptoFunction.service.spec.ts @@ -1,11 +1,9 @@ import Substitute from "@fluffy-spoon/substitute"; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service"; - -import { WebCryptoFunctionService } from "jslib-common/services/webCryptoFunction.service"; - import { Utils } from "jslib-common/misc/utils"; import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey"; +import { WebCryptoFunctionService } from "jslib-common/services/webCryptoFunction.service"; const RsaPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl0Vawl/toXzkEvB82FEtqHP" + diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 4df19690..00000000 --- a/tslint.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "extends": "tslint:recommended", - "rules": { - "interface-name": [false], - "align": [true, "statements", "members"], - "ban-types": { - "options": [ - ["Object", "Avoid using the `Object` type. Did you mean `object`?"], - ["Boolean", "Avoid using the `Boolean` type. Did you mean `boolean`?"], - ["Number", "Avoid using the `Number` type. Did you mean `number`?"], - ["String", "Avoid using the `String` type. Did you mean `string`?"], - ["Symbol", "Avoid using the `Symbol` type. Did you mean `symbol`?"] - ] - }, - "member-access": [true, "no-public"], - "member-ordering": [ - true, - { - "order": [ - "public-static-field", - "public-static-method", - "protected-static-field", - "protected-static-method", - "private-static-field", - "private-static-method", - "public-instance-field", - "protected-instance-field", - "private-instance-field", - "public-constructor", - "protected-constructor", - "private-constructor", - "public-instance-method", - "protected-instance-method", - "private-instance-method" - ] - } - ], - "no-empty": [true], - "object-literal-sort-keys": false, - "object-literal-shorthand": [true, "never"], - "ordered-imports": true, - "prefer-for-of": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-module", - "check-operator", - "check-preblock", - "check-separator", - "check-type" - ], - "max-classes-per-file": false, - "arrow-parens": [true], - "trailing-comma": [ - true, - { - "multiline": { - "objects": "always", - "arrays": "always", - "functions": "ignore", - "typeLiterals": "ignore" - }, - "singleline": "never" - } - ] - } -} From 842d6cd001d9a6201b2d89db63562e8c4d3589ef Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 22 Feb 2022 20:06:14 +0100 Subject: [PATCH 095/120] Ensure dialog is attached to parent window (#691) --- electron/src/services/electronMainMessaging.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron/src/services/electronMainMessaging.service.ts b/electron/src/services/electronMainMessaging.service.ts index a868d710..f79a32b4 100644 --- a/electron/src/services/electronMainMessaging.service.ts +++ b/electron/src/services/electronMainMessaging.service.ts @@ -17,7 +17,7 @@ export class ElectronMainMessagingService implements MessagingService { }); ipcMain.handle("showMessageBox", (event, options) => { - return dialog.showMessageBox(options); + return dialog.showMessageBox(this.windowMain.win, options); }); ipcMain.handle("openContextMenu", (event, options: { menu: RendererMenuItem[] }) => { From 1fb3d54014ffaabdc532e55ffa68ebb8a1a25683 Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Tue, 22 Feb 2022 21:02:07 -0600 Subject: [PATCH 096/120] Feature/password protected export (#689) * Simplify password protected file format * no items to import is not an error * Await inner importer * Add export format type * Error if import file is password protected * Update tests * Test password protected with normat json importer * Simplify imports * Ignore code coverage directory * Expand importer options without changing display options * Import password require import error handling * Use interface * Fix curlies * linter fixes * Add null of empty util * Lint fixes * run prettier * Move import options to separate enum file * Fix imports --- .prettierignore | 1 + common/src/abstractions/export.service.ts | 15 +-- common/src/abstractions/import.service.ts | 19 ++-- common/src/enums/importOptions.ts | 72 ++++++++++++ common/src/importers/bitwardenJsonImporter.ts | 11 +- .../bitwardenPasswordProtectedImporter.ts | 30 +---- common/src/importers/importError.ts | 5 + common/src/misc/utils.ts | 4 + common/src/models/domain/importResult.ts | 1 + common/src/services/export.service.ts | 24 ++-- common/src/services/import.service.ts | 105 ++++-------------- .../importers/bitwardenJsonImporter.spec.ts | 31 ++++++ ...bitwardenPasswordProtectedImporter.spec.ts | 95 +--------------- .../testData/bitwardenJson/empty.json.ts | 1 + .../bitwardenJson/passwordProtected.json.ts | 9 ++ spec/common/services/export.service.spec.ts | 4 - 16 files changed, 194 insertions(+), 233 deletions(-) create mode 100644 common/src/enums/importOptions.ts create mode 100644 common/src/importers/importError.ts create mode 100644 spec/common/importers/bitwardenJsonImporter.spec.ts create mode 100644 spec/common/importers/testData/bitwardenJson/empty.json.ts create mode 100644 spec/common/importers/testData/bitwardenJson/passwordProtected.json.ts diff --git a/.prettierignore b/.prettierignore index 2d0a1ff5..17741a65 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ # Build directories dist +coverage # Github Workflows .github/workflows diff --git a/common/src/abstractions/export.service.ts b/common/src/abstractions/export.service.ts index 1d3fbce7..b0266530 100644 --- a/common/src/abstractions/export.service.ts +++ b/common/src/abstractions/export.service.ts @@ -1,16 +1,11 @@ import { EventView } from "../models/view/eventView"; +export type ExportFormat = "csv" | "json" | "encrypted_json"; + export abstract class ExportService { - getExport: (format?: "csv" | "json" | "encrypted_json") => Promise; - getPasswordProtectedExport: ( - password: string, - format?: "csv" | "json" | "encrypted_json", - organizationId?: string - ) => Promise; - getOrganizationExport: ( - organizationId: string, - format?: "csv" | "json" | "encrypted_json" - ) => Promise; + getExport: (format?: ExportFormat, organizationId?: string) => Promise; + getPasswordProtectedExport: (password: string, organizationId?: string) => Promise; + getOrganizationExport: (organizationId: string, format?: ExportFormat) => Promise; getEventExport: (events: EventView[]) => Promise; getFileName: (prefix?: string, extension?: string) => string; } diff --git a/common/src/abstractions/import.service.ts b/common/src/abstractions/import.service.ts index 799ddd92..01f099b3 100644 --- a/common/src/abstractions/import.service.ts +++ b/common/src/abstractions/import.service.ts @@ -1,14 +1,19 @@ +import { ImportOption, ImportType } from "../enums/importOptions"; +import { ImportError } from "../importers/importError"; import { Importer } from "../importers/importer"; -import { ImportType } from "../services/import.service"; -export interface ImportOption { - id: string; - name: string; -} export abstract class ImportService { featuredImportOptions: readonly ImportOption[]; regularImportOptions: readonly ImportOption[]; getImportOptions: () => ImportOption[]; - import: (importer: Importer, fileContents: string, organizationId?: string) => Promise; - getImporter: (format: ImportType, organizationId: string, password?: string) => Importer; + import: ( + importer: Importer, + fileContents: string, + organizationId?: string + ) => Promise; + getImporter: ( + format: ImportType | "bitwardenpasswordprotected", + organizationId: string, + password?: string + ) => Importer; } diff --git a/common/src/enums/importOptions.ts b/common/src/enums/importOptions.ts new file mode 100644 index 00000000..5b690196 --- /dev/null +++ b/common/src/enums/importOptions.ts @@ -0,0 +1,72 @@ +export interface ImportOption { + id: string; + name: string; +} + +export const featuredImportOptions = [ + { id: "bitwardenjson", name: "Bitwarden (json)" }, + { id: "bitwardencsv", name: "Bitwarden (csv)" }, + { id: "chromecsv", name: "Chrome (csv)" }, + { id: "dashlanejson", name: "Dashlane (json)" }, + { id: "firefoxcsv", name: "Firefox (csv)" }, + { id: "keepass2xml", name: "KeePass 2 (xml)" }, + { id: "lastpasscsv", name: "LastPass (csv)" }, + { id: "safaricsv", name: "Safari and macOS (csv)" }, + { id: "1password1pif", name: "1Password (1pif)" }, +] as const; + +export const regularImportOptions = [ + { id: "keepassxcsv", name: "KeePassX (csv)" }, + { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, + { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, + { id: "roboformcsv", name: "RoboForm (csv)" }, + { id: "keepercsv", name: "Keeper (csv)" }, + // Temporarily remove this option for the Feb release + // { id: "keeperjson", name: "Keeper (json)" }, + { id: "enpasscsv", name: "Enpass (csv)" }, + { id: "enpassjson", name: "Enpass (json)" }, + { id: "safeincloudxml", name: "SafeInCloud (xml)" }, + { id: "pwsafexml", name: "Password Safe (xml)" }, + { id: "stickypasswordxml", name: "Sticky Password (xml)" }, + { id: "msecurecsv", name: "mSecure (csv)" }, + { id: "truekeycsv", name: "True Key (csv)" }, + { id: "passwordbossjson", name: "Password Boss (json)" }, + { id: "zohovaultcsv", name: "Zoho Vault (csv)" }, + { id: "splashidcsv", name: "SplashID (csv)" }, + { id: "passworddragonxml", name: "Password Dragon (xml)" }, + { id: "padlockcsv", name: "Padlock (csv)" }, + { id: "passboltcsv", name: "Passbolt (csv)" }, + { id: "clipperzhtml", name: "Clipperz (html)" }, + { id: "aviracsv", name: "Avira (csv)" }, + { id: "saferpasscsv", name: "SaferPass (csv)" }, + { id: "upmcsv", name: "Universal Password Manager (csv)" }, + { id: "ascendocsv", name: "Ascendo DataVault (csv)" }, + { id: "meldiumcsv", name: "Meldium (csv)" }, + { id: "passkeepcsv", name: "PassKeep (csv)" }, + { id: "operacsv", name: "Opera (csv)" }, + { id: "vivaldicsv", name: "Vivaldi (csv)" }, + { id: "gnomejson", name: "GNOME Passwords and Keys/Seahorse (json)" }, + { id: "blurcsv", name: "Blur (csv)" }, + { id: "passwordagentcsv", name: "Password Agent (csv)" }, + { id: "passpackcsv", name: "Passpack (csv)" }, + { id: "passmanjson", name: "Passman (json)" }, + { id: "avastcsv", name: "Avast Passwords (csv)" }, + { id: "avastjson", name: "Avast Passwords (json)" }, + { id: "fsecurefsk", name: "F-Secure KEY (fsk)" }, + { id: "kasperskytxt", name: "Kaspersky Password Manager (txt)" }, + { id: "remembearcsv", name: "RememBear (csv)" }, + { id: "passwordwallettxt", name: "PasswordWallet (txt)" }, + { id: "mykicsv", name: "Myki (csv)" }, + { id: "securesafecsv", name: "SecureSafe (csv)" }, + { id: "logmeoncecsv", name: "LogMeOnce (csv)" }, + { id: "blackberrycsv", name: "BlackBerry Password Keeper (csv)" }, + { id: "buttercupcsv", name: "Buttercup (csv)" }, + { id: "codebookcsv", name: "Codebook (csv)" }, + { id: "encryptrcsv", name: "Encryptr (csv)" }, + { id: "yoticsv", name: "Yoti (csv)" }, + { id: "nordpasscsv", name: "Nordpass (csv)" }, +] as const; + +export type ImportType = + | typeof featuredImportOptions[number]["id"] + | typeof regularImportOptions[number]["id"]; diff --git a/common/src/importers/bitwardenJsonImporter.ts b/common/src/importers/bitwardenJsonImporter.ts index 52a4156b..6caf185e 100644 --- a/common/src/importers/bitwardenJsonImporter.ts +++ b/common/src/importers/bitwardenJsonImporter.ts @@ -13,14 +13,21 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer { private results: any; private result: ImportResult; - constructor(private cryptoService: CryptoService, private i18nService: I18nService) { + constructor(protected cryptoService: CryptoService, protected i18nService: I18nService) { super(); } async parse(data: string): Promise { this.result = new ImportResult(); this.results = JSON.parse(data); - if (this.results == null || this.results.items == null || this.results.items.length === 0) { + if (this.results == null || this.results.items == null) { + if (this.results?.passwordProtected) { + this.result.success = false; + this.result.missingPassword = true; + this.result.errorMessage = this.i18nService.t("importPasswordRequired"); + return this.result; + } + this.result.success = false; return this.result; } diff --git a/common/src/importers/bitwardenPasswordProtectedImporter.ts b/common/src/importers/bitwardenPasswordProtectedImporter.ts index a08b36da..54da71b5 100644 --- a/common/src/importers/bitwardenPasswordProtectedImporter.ts +++ b/common/src/importers/bitwardenPasswordProtectedImporter.ts @@ -1,18 +1,16 @@ import { CryptoService } from "../abstractions/crypto.service"; import { I18nService } from "../abstractions/i18n.service"; -import { ImportService } from "../abstractions/import.service"; import { KdfType } from "../enums/kdfType"; import { EncString } from "../models/domain/encString"; import { ImportResult } from "../models/domain/importResult"; import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; -import { BaseImporter } from "./baseImporter"; +import { BitwardenJsonImporter } from "./bitwardenJsonImporter"; import { Importer } from "./importer"; -class BitwardenPasswordProtectedFileFormat { +interface BitwardenPasswordProtectedFileFormat { encrypted: boolean; passwordProtected: boolean; - format: "json" | "csv" | "encrypted_json"; salt: string; kdfIterations: number; kdfType: number; @@ -20,17 +18,11 @@ class BitwardenPasswordProtectedFileFormat { data: string; } -export class BitwardenPasswordProtectedImporter extends BaseImporter implements Importer { - private innerImporter: Importer; +export class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter implements Importer { private key: SymmetricCryptoKey; - constructor( - private importService: ImportService, - private cryptoService: CryptoService, - private i18nService: I18nService, - private password: string - ) { - super(); + constructor(cryptoService: CryptoService, i18nService: I18nService, private password: string) { + super(cryptoService, i18nService); } async parse(data: string): Promise { @@ -41,8 +33,6 @@ export class BitwardenPasswordProtectedImporter extends BaseImporter implements return result; } - this.setInnerImporter(parsedData.format); - if (!(await this.checkPassword(parsedData))) { result.success = false; result.errorMessage = this.i18nService.t("importEncKeyError"); @@ -51,7 +41,7 @@ export class BitwardenPasswordProtectedImporter extends BaseImporter implements const encData = new EncString(parsedData.data); const clearTextData = await this.cryptoService.decryptToUtf8(encData, this.key); - return this.innerImporter.parse(clearTextData); + return await super.parse(clearTextData); } private async checkPassword(jdoc: BitwardenPasswordProtectedFileFormat): Promise { @@ -79,7 +69,6 @@ export class BitwardenPasswordProtectedImporter extends BaseImporter implements !jdoc || !jdoc.encrypted || !jdoc.passwordProtected || - !(jdoc.format === "csv" || jdoc.format === "json" || jdoc.format === "encrypted_json") || !jdoc.salt || !jdoc.kdfIterations || typeof jdoc.kdfIterations !== "number" || @@ -89,11 +78,4 @@ export class BitwardenPasswordProtectedImporter extends BaseImporter implements !jdoc.data ); } - - private setInnerImporter(format: "csv" | "json" | "encrypted_json") { - this.innerImporter = - format === "csv" - ? this.importService.getImporter("bitwardencsv", this.organizationId) - : this.importService.getImporter("bitwardenjson", this.organizationId); - } } diff --git a/common/src/importers/importError.ts b/common/src/importers/importError.ts new file mode 100644 index 00000000..6a74d66e --- /dev/null +++ b/common/src/importers/importError.ts @@ -0,0 +1,5 @@ +export class ImportError extends Error { + constructor(message?: string, public passwordRequired: boolean = false) { + super(message); + } +} diff --git a/common/src/misc/utils.ts b/common/src/misc/utils.ts index 409c4c74..1d96e082 100644 --- a/common/src/misc/utils.ts +++ b/common/src/misc/utils.ts @@ -307,6 +307,10 @@ export class Utils { return str == null || typeof str !== "string" || str.trim() === ""; } + static isNullOrEmpty(str: string): boolean { + return str == null || typeof str !== "string" || str == ""; + } + static nameOf(name: string & keyof T) { return name; } diff --git a/common/src/models/domain/importResult.ts b/common/src/models/domain/importResult.ts index 1ac28161..695dbf9d 100644 --- a/common/src/models/domain/importResult.ts +++ b/common/src/models/domain/importResult.ts @@ -4,6 +4,7 @@ import { FolderView } from "../view/folderView"; export class ImportResult { success = false; + missingPassword = false; errorMessage: string; ciphers: CipherView[] = []; folders: FolderView[] = []; diff --git a/common/src/services/export.service.ts b/common/src/services/export.service.ts index 7bbd574b..ddece8eb 100644 --- a/common/src/services/export.service.ts +++ b/common/src/services/export.service.ts @@ -4,7 +4,10 @@ import { ApiService } from "../abstractions/api.service"; import { CipherService } from "../abstractions/cipher.service"; import { CryptoService } from "../abstractions/crypto.service"; import { CryptoFunctionService } from "../abstractions/cryptoFunction.service"; -import { ExportService as ExportServiceAbstraction } from "../abstractions/export.service"; +import { + ExportFormat, + ExportService as ExportServiceAbstraction, +} from "../abstractions/export.service"; import { FolderService } from "../abstractions/folder.service"; import { CipherType } from "../enums/cipherType"; import { KdfType } from "../enums/kdfType"; @@ -33,7 +36,11 @@ export class ExportService implements ExportServiceAbstraction { private cryptoFunctionService: CryptoFunctionService ) {} - async getExport(format: "csv" | "json" | "encrypted_json" = "csv"): Promise { + async getExport(format: ExportFormat = "csv", organizationId?: string): Promise { + if (organizationId) { + return await this.getOrganizationExport(organizationId, format); + } + if (format === "encrypted_json") { return this.getEncryptedExport(); } else { @@ -41,14 +48,10 @@ export class ExportService implements ExportServiceAbstraction { } } - async getPasswordProtectedExport( - password: string, - format: "csv" | "json" | "encrypted_json" = "csv", - organizationId?: string - ): Promise { + async getPasswordProtectedExport(password: string, organizationId?: string): Promise { const clearText = organizationId - ? await this.getOrganizationExport(organizationId, format) - : await this.getExport(format); + ? await this.getOrganizationExport(organizationId, "json") + : await this.getExport("json"); const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16)); const kdfIterations = 100000; @@ -65,7 +68,6 @@ export class ExportService implements ExportServiceAbstraction { const jsonDoc: any = { encrypted: true, passwordProtected: true, - format: format, salt: salt, kdfIterations: kdfIterations, kdfType: KdfType.PBKDF2_SHA256, @@ -78,7 +80,7 @@ export class ExportService implements ExportServiceAbstraction { async getOrganizationExport( organizationId: string, - format: "csv" | "json" | "encrypted_json" = "csv" + format: ExportFormat = "csv" ): Promise { if (format === "encrypted_json") { return this.getOrganizationEncryptedExport(organizationId); diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 4e122932..3913074d 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -4,12 +4,15 @@ import { CollectionService } from "../abstractions/collection.service"; import { CryptoService } from "../abstractions/crypto.service"; import { FolderService } from "../abstractions/folder.service"; import { I18nService } from "../abstractions/i18n.service"; -import { - ImportOption, - ImportService as ImportServiceAbstraction, -} from "../abstractions/import.service"; +import { ImportService as ImportServiceAbstraction } from "../abstractions/import.service"; import { PlatformUtilsService } from "../abstractions/platformUtils.service"; import { CipherType } from "../enums/cipherType"; +import { + featuredImportOptions, + ImportOption, + ImportType, + regularImportOptions, +} from "../enums/importOptions"; import { AscendoCsvImporter } from "../importers/ascendoCsvImporter"; import { AvastCsvImporter } from "../importers/avastCsvImporter"; import { AvastJsonImporter } from "../importers/avastJsonImporter"; @@ -30,6 +33,7 @@ import { EnpassJsonImporter } from "../importers/enpassJsonImporter"; import { FirefoxCsvImporter } from "../importers/firefoxCsvImporter"; import { FSecureFskImporter } from "../importers/fsecureFskImporter"; import { GnomeJsonImporter } from "../importers/gnomeJsonImporter"; +import { ImportError } from "../importers/importError"; import { Importer } from "../importers/importer"; import { KasperskyTxtImporter } from "../importers/kasperskyTxtImporter"; import { KeePass2XmlImporter } from "../importers/keepass2XmlImporter"; @@ -76,75 +80,6 @@ import { KvpRequest } from "../models/request/kvpRequest"; import { ErrorResponse } from "../models/response/errorResponse"; import { CipherView } from "../models/view/cipherView"; -const featuredImportOptions = [ - { id: "bitwardenjson", name: "Bitwarden (json)" }, - { id: "bitwardencsv", name: "Bitwarden (csv)" }, - { id: "chromecsv", name: "Chrome (csv)" }, - { id: "dashlanejson", name: "Dashlane (json)" }, - { id: "firefoxcsv", name: "Firefox (csv)" }, - { id: "keepass2xml", name: "KeePass 2 (xml)" }, - { id: "lastpasscsv", name: "LastPass (csv)" }, - { id: "safaricsv", name: "Safari and macOS (csv)" }, - { id: "1password1pif", name: "1Password (1pif)" }, -] as const; - -const regularImportOptions = [ - { id: "keepassxcsv", name: "KeePassX (csv)" }, - { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, - { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, - { id: "roboformcsv", name: "RoboForm (csv)" }, - { id: "keepercsv", name: "Keeper (csv)" }, - // Temporarily remove this option for the Feb release - // { id: "keeperjson", name: "Keeper (json)" }, - { id: "enpasscsv", name: "Enpass (csv)" }, - { id: "enpassjson", name: "Enpass (json)" }, - { id: "safeincloudxml", name: "SafeInCloud (xml)" }, - { id: "pwsafexml", name: "Password Safe (xml)" }, - { id: "stickypasswordxml", name: "Sticky Password (xml)" }, - { id: "msecurecsv", name: "mSecure (csv)" }, - { id: "truekeycsv", name: "True Key (csv)" }, - { id: "passwordbossjson", name: "Password Boss (json)" }, - { id: "zohovaultcsv", name: "Zoho Vault (csv)" }, - { id: "splashidcsv", name: "SplashID (csv)" }, - { id: "passworddragonxml", name: "Password Dragon (xml)" }, - { id: "padlockcsv", name: "Padlock (csv)" }, - { id: "passboltcsv", name: "Passbolt (csv)" }, - { id: "clipperzhtml", name: "Clipperz (html)" }, - { id: "aviracsv", name: "Avira (csv)" }, - { id: "saferpasscsv", name: "SaferPass (csv)" }, - { id: "upmcsv", name: "Universal Password Manager (csv)" }, - { id: "ascendocsv", name: "Ascendo DataVault (csv)" }, - { id: "meldiumcsv", name: "Meldium (csv)" }, - { id: "passkeepcsv", name: "PassKeep (csv)" }, - { id: "operacsv", name: "Opera (csv)" }, - { id: "vivaldicsv", name: "Vivaldi (csv)" }, - { id: "gnomejson", name: "GNOME Passwords and Keys/Seahorse (json)" }, - { id: "blurcsv", name: "Blur (csv)" }, - { id: "passwordagentcsv", name: "Password Agent (csv)" }, - { id: "passpackcsv", name: "Passpack (csv)" }, - { id: "passmanjson", name: "Passman (json)" }, - { id: "avastcsv", name: "Avast Passwords (csv)" }, - { id: "avastjson", name: "Avast Passwords (json)" }, - { id: "fsecurefsk", name: "F-Secure KEY (fsk)" }, - { id: "kasperskytxt", name: "Kaspersky Password Manager (txt)" }, - { id: "remembearcsv", name: "RememBear (csv)" }, - { id: "passwordwallettxt", name: "PasswordWallet (txt)" }, - { id: "mykicsv", name: "Myki (csv)" }, - { id: "securesafecsv", name: "SecureSafe (csv)" }, - { id: "logmeoncecsv", name: "LogMeOnce (csv)" }, - { id: "blackberrycsv", name: "BlackBerry Password Keeper (csv)" }, - { id: "buttercupcsv", name: "Buttercup (csv)" }, - { id: "codebookcsv", name: "Codebook (csv)" }, - { id: "encryptrcsv", name: "Encryptr (csv)" }, - { id: "yoticsv", name: "Yoti (csv)" }, - { id: "nordpasscsv", name: "Nordpass (csv)" }, -] as const; - -export type ImportType = - | typeof featuredImportOptions[number]["id"] - | typeof regularImportOptions[number]["id"] - | "bitwardenpasswordprotected"; - export class ImportService implements ImportServiceAbstraction { featuredImportOptions = featuredImportOptions as readonly ImportOption[]; @@ -168,11 +103,11 @@ export class ImportService implements ImportServiceAbstraction { importer: Importer, fileContents: string, organizationId: string = null - ): Promise { + ): Promise { const importResult = await importer.parse(fileContents); if (importResult.success) { if (importResult.folders.length === 0 && importResult.ciphers.length === 0) { - return new Error(this.i18nService.t("importNothingError")); + return new ImportError(this.i18nService.t("importNothingError")); } else if (importResult.ciphers.length > 0) { const halfway = Math.floor(importResult.ciphers.length / 2); const last = importResult.ciphers.length - 1; @@ -182,7 +117,7 @@ export class ImportService implements ImportServiceAbstraction { this.badData(importResult.ciphers[halfway]) && this.badData(importResult.ciphers[last]) ) { - return new Error(this.i18nService.t("importFormatError")); + return new ImportError(this.i18nService.t("importFormatError")); } } try { @@ -194,15 +129,18 @@ export class ImportService implements ImportServiceAbstraction { return null; } else { if (!Utils.isNullOrWhitespace(importResult.errorMessage)) { - return new Error(importResult.errorMessage); + return new ImportError(importResult.errorMessage, importResult.missingPassword); } else { - return new Error(this.i18nService.t("importFormatError")); + return new ImportError( + this.i18nService.t("importFormatError"), + importResult.missingPassword + ); } } } getImporter( - format: ImportType, + format: ImportType | "bitwardenpasswordprotected", organizationId: string = null, password: string = null ): Importer { @@ -214,7 +152,7 @@ export class ImportService implements ImportServiceAbstraction { return importer; } - private getImporterInstance(format: ImportType, password: string) { + private getImporterInstance(format: ImportType | "bitwardenpasswordprotected", password: string) { if (format == null) { return null; } @@ -226,7 +164,6 @@ export class ImportService implements ImportServiceAbstraction { return new BitwardenJsonImporter(this.cryptoService, this.i18nService); case "bitwardenpasswordprotected": return new BitwardenPasswordProtectedImporter( - this, this.cryptoService, this.i18nService, password @@ -394,9 +331,9 @@ export class ImportService implements ImportServiceAbstraction { ); } - private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): Error { + private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): ImportError { if (errorResponse.validationErrors == null) { - return new Error(errorResponse.message); + return new ImportError(errorResponse.message); } let errorMessage = ""; @@ -434,6 +371,6 @@ export class ImportService implements ImportServiceAbstraction { errorMessage += "[" + itemType + '] "' + item.name + '": ' + value; }); - return new Error(errorMessage); + return new ImportError(errorMessage); } } diff --git a/spec/common/importers/bitwardenJsonImporter.spec.ts b/spec/common/importers/bitwardenJsonImporter.spec.ts new file mode 100644 index 00000000..94b03528 --- /dev/null +++ b/spec/common/importers/bitwardenJsonImporter.spec.ts @@ -0,0 +1,31 @@ +import { Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; + +import { CryptoService } from "jslib-common/abstractions/crypto.service"; +import { I18nService } from "jslib-common/abstractions/i18n.service"; +import { BitwardenJsonImporter } from "jslib-common/importers/bitwardenJsonImporter"; + +import { data as passwordProtectedData } from "./testData/bitwardenJson/passwordProtected.json"; + +describe("bitwarden json importer", () => { + let sut: BitwardenJsonImporter; + let cryptoService: SubstituteOf; + let i18nService: SubstituteOf; + + beforeEach(() => { + cryptoService = Substitute.for(); + i18nService = Substitute.for(); + + sut = new BitwardenJsonImporter(cryptoService, i18nService); + }); + + it("should fail if password is needed", async () => { + expect((await sut.parse(passwordProtectedData)).success).toBe(false); + }); + + it("should return password needed error message", async () => { + const expected = "Password required error message"; + i18nService.t("importPasswordRequired").returns(expected); + + expect((await sut.parse(passwordProtectedData)).errorMessage).toEqual(expected); + }); +}); diff --git a/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts index cacfa3d2..ed2434ee 100644 --- a/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts +++ b/spec/common/importers/bitwardenPasswordProtectedImporter.spec.ts @@ -2,17 +2,15 @@ import Substitute, { Arg, SubstituteOf } from "@fluffy-spoon/substitute"; import { CryptoService } from "jslib-common/abstractions/crypto.service"; import { I18nService } from "jslib-common/abstractions/i18n.service"; -import { ImportService } from "jslib-common/abstractions/import.service"; import { KdfType } from "jslib-common/enums/kdfType"; import { BitwardenPasswordProtectedImporter } from "jslib-common/importers/bitwardenPasswordProtectedImporter"; -import { Importer } from "jslib-common/importers/importer"; import { Utils } from "jslib-common/misc/utils"; import { ImportResult } from "jslib-common/models/domain/importResult"; +import { data as emptyDecryptedData } from "./testData/bitwardenJson/empty.json"; + describe("BitwardenPasswordProtectedImporter", () => { let importer: BitwardenPasswordProtectedImporter; - let innerImporter: SubstituteOf; - let importService: SubstituteOf; let cryptoService: SubstituteOf; let i18nService: SubstituteOf; const password = Utils.newGuid(); @@ -20,7 +18,6 @@ describe("BitwardenPasswordProtectedImporter", () => { let jDoc: { encrypted?: boolean; passwordProtected?: boolean; - format?: string; salt?: string; kdfIterations?: any; kdfType?: any; @@ -31,13 +28,10 @@ describe("BitwardenPasswordProtectedImporter", () => { beforeEach(() => { cryptoService = Substitute.for(); i18nService = Substitute.for(); - importService = Substitute.for(); - innerImporter = Substitute.for(); jDoc = { encrypted: true, passwordProtected: true, - format: "csv", salt: "c2FsdA==", kdfIterations: 100000, kdfType: KdfType.PBKDF2_SHA256, @@ -46,32 +40,12 @@ describe("BitwardenPasswordProtectedImporter", () => { }; result.success = true; - innerImporter.parse(Arg.any()).resolves(result); - importer = new BitwardenPasswordProtectedImporter( - importService, - cryptoService, - i18nService, - password - ); + importer = new BitwardenPasswordProtectedImporter(cryptoService, i18nService, password); }); describe("Required Json Data", () => { it("succeeds with default jdoc", async () => { - cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); - - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); - }); - - it("accepts json format", async () => { - jDoc.format = "json"; - cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); - - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); - }); - - it("accepts encrypted_json format", async () => { - jDoc.format = "encrypted_json"; - cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); + cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves(emptyDecryptedData); expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); }); @@ -96,16 +70,6 @@ describe("BitwardenPasswordProtectedImporter", () => { expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); }); - it("fails if format === null", async () => { - jDoc.format = null; - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); - }); - - it("fails if format not known", async () => { - jDoc.format = "Not a real format"; - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); - }); - it("fails if salt === null", async () => { jDoc.salt = null; expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); @@ -146,55 +110,4 @@ describe("BitwardenPasswordProtectedImporter", () => { expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); }); }); - - describe("inner importer", () => { - beforeEach(() => { - cryptoService.decryptToUtf8(Arg.any(), Arg.any()).resolves("successful decryption"); - }); - it("delegates success", async () => { - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(true); - result.success = false; - expect((await importer.parse(JSON.stringify(jDoc))).success).toEqual(false); - }); - - it("passes on organization Id", async () => { - jDoc.format = "csv"; - importer.organizationId = Utils.newGuid(); - await importer.parse(JSON.stringify(jDoc)); - - importService.received(1).getImporter("bitwardencsv", importer.organizationId); - }); - - it("passes null organizationId if none set", async () => { - jDoc.format = "csv"; - importer.organizationId = null; - await importer.parse(JSON.stringify(jDoc)); - - importService.received(1).getImporter("bitwardencsv", null); - }); - - it("gets csv importer for csv format", async () => { - jDoc.format = "csv"; - - await importer.parse(JSON.stringify(jDoc)); - - importService.received(1).getImporter("bitwardencsv", Arg.any()); - }); - - it("gets json importer for json format", async () => { - jDoc.format = "json"; - - await importer.parse(JSON.stringify(jDoc)); - - importService.received(1).getImporter("bitwardenjson", Arg.any()); - }); - - it("gets json importer for encrypted_json format", async () => { - jDoc.format = "encrypted_json"; - - await importer.parse(JSON.stringify(jDoc)); - - importService.received(1).getImporter("bitwardenjson", Arg.any()); - }); - }); }); diff --git a/spec/common/importers/testData/bitwardenJson/empty.json.ts b/spec/common/importers/testData/bitwardenJson/empty.json.ts new file mode 100644 index 00000000..43ab8c76 --- /dev/null +++ b/spec/common/importers/testData/bitwardenJson/empty.json.ts @@ -0,0 +1 @@ +export const data = '{"encrypted":false,"folders":[],"items":[]}'; diff --git a/spec/common/importers/testData/bitwardenJson/passwordProtected.json.ts b/spec/common/importers/testData/bitwardenJson/passwordProtected.json.ts new file mode 100644 index 00000000..0462e834 --- /dev/null +++ b/spec/common/importers/testData/bitwardenJson/passwordProtected.json.ts @@ -0,0 +1,9 @@ +export const data = `{ + "encrypted": true, + "passwordProtected": true, + "salt": "Oy0xcgVRzxQ+9NpB5GLehw==", + "kdfIterations": 100000, + "kdfType": 0, + "encKeyValidation_DO_NOT_EDIT": "2.sZs4Jc1HW9rhABzRRYR/gQ==|8kTDaDxafulnybpWoqVX8RAybhVRTr+dffNjms271Y7amQmIE1VSMwLbk+b2vxZb|IqOo6oXQtmv/Xb/GHDi42XG9c9ILePYtP5qq584VWcg=", + "data": "2.D0AXAf7G/XIwq6EC7A0Suw==|4w+m0wHRo25y1T1Syh5wdAUyF8voqEy54waMEsbnK0Nzee959w54ru5D1NntvxZL4HFqkQLyR6jCFkn5g40f+MGJgihS/wvf4NcJJfLiiFo6MEDOQNBkxw7ZBGuHiKfVuBO5u36JgzQtZ8lyFaduGxFszuF5c+URiE9PDh9jY0//poVgHKwuLZuYFIW+f7h6T+shUWK0ya11lcHn/B/CA2xiI+YiKdNZreJrwN0yslpJ/f+MrOzagvftRjt0GNkwveCtwcYUw/zFvqvibUpKeHcRiXs8SaGoHJ5RTm69FbJ7C5tnLwoVT89Af156uvRAXV7yAC4oPcbU/3TGb6hqYosvi1QNyaqG3M9gxS6+AK0C4yWuNbMLDEr+MWiw0SWLVMKQEkCZ4oM+oTCx52otW3+2V9I8Pv3KmmhkvVvE4wBdweOJeRX53Tf5ySkmpIhCfzj6JMmxO+nmTXIhWnJChr4hPVh+ixv1GQK5thIPTCMXmAtXoTIFUx1KWjS6LjOdi2hKQueVI+XZjf0qnY2vTMxRg0ZsLBA2znQTx+DSEqumORb5T/lV73pWZiCNePSAE2msOm7tep+lm4O/VCViCfXjITAY196syhOK0XnhxJvPALchZY8sYRAfuw6hHoDiVr+JUieRoI7eUrhXBp+D6Py9TL/dS/rHe+C2Zhx+xwx2NfGt+xEp8ZAOOCxgZ0UTeSA/abm0Oz7tJIK1n26acQrgbr7rMeBymAX+5L5OWlwI1hGgEBfj6W0rrbSXf3VMfaFXZ5UsXi1VhzQmU3LyWENoDeImXFQj6zMbUSfcVwLsG5Fg8Ee/kO/wJPfG5BO51+/vFqQj6AkaMEcwg5xNrObHYfQ/DMhIn7YDM2zdzbNTdhnobGkz6YRKFPCgFe3EmIEPEpeh9S3eKE9C7MQsrR8jVSiseR/FipJLsN+W7iOwzeXdwxUFlC/0a98bTKvdrbMgNi6ZVXykHY/t2UyEGpxZGTHoZwhX01kiQrwzC4/+v/676ldxPluO9GY7MtrLveCDsiyBz15u43IGHayDEBNT0rqrOKLYmfzwCWoahRLZQrSmepe/FXqgPqRfyWc/Ro+w3sT9dXUkx3B5xxWgSyABowPV48yBUSJuefhKTpqgzkU+LzhNnWHjnxJzzQ2/|IhlRjnyhIoDM85qHX/bY2zaIU5YaRO/iFVTQDd3uFDo=" +}`; diff --git a/spec/common/services/export.service.spec.ts b/spec/common/services/export.service.spec.ts index e0d01994..a3a0299e 100644 --- a/spec/common/services/export.service.spec.ts +++ b/spec/common/services/export.service.spec.ts @@ -172,10 +172,6 @@ describe("ExportService", () => { expect(exportObject.passwordProtected).toBe(true); }); - it("specifies format", () => { - expect(exportObject).toEqual(jasmine.objectContaining({ format: jasmine.any(String) })); - }); - it("specifies salt", () => { expect(exportObject.salt).toEqual("salt"); }); From 78b5f1504208931e17dbfd447331447b6fc4ca1f Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Tue, 22 Feb 2022 22:56:46 -0500 Subject: [PATCH 097/120] [feature] Implement scope warning for exports (#688) * [feature] Add a hasOrganizations() service method * [feature] Add a component to warn users about export scope --- .../export-scope-callout.component.html | 5 +++ .../export-scope-callout.component.ts | 43 +++++++++++++++++++ .../src/abstractions/organization.service.ts | 1 + common/src/services/organization.service.ts | 5 +++ 4 files changed, 54 insertions(+) create mode 100644 angular/src/components/export-scope-callout.component.html create mode 100644 angular/src/components/export-scope-callout.component.ts diff --git a/angular/src/components/export-scope-callout.component.html b/angular/src/components/export-scope-callout.component.html new file mode 100644 index 00000000..c6b5e1e8 --- /dev/null +++ b/angular/src/components/export-scope-callout.component.html @@ -0,0 +1,5 @@ + + + {{ scopeConfig.description | i18n: scopeConfig.scopeIdentifier }} + + diff --git a/angular/src/components/export-scope-callout.component.ts b/angular/src/components/export-scope-callout.component.ts new file mode 100644 index 00000000..40154d72 --- /dev/null +++ b/angular/src/components/export-scope-callout.component.ts @@ -0,0 +1,43 @@ +import { Component, Input, OnInit } from "@angular/core"; + +import { OrganizationService } from "jslib-common/abstractions/organization.service"; +import { StateService } from "jslib-common/abstractions/state.service"; + +@Component({ + selector: "app-export-scope-callout", + templateUrl: "export-scope-callout.component.html", +}) +export class ExportScopeCalloutComponent implements OnInit { + @Input() organizationId: string = null; + + show: boolean = false; + scopeConfig: { + title: string; + description: string; + scopeIdentifier: string; + }; + + constructor( + protected organizationService: OrganizationService, + protected stateService: StateService + ) {} + + async ngOnInit(): Promise { + if (!(await this.organizationService.hasOrganizations())) { + return; + } + this.scopeConfig = + this.organizationId != null + ? { + title: "exportingOrganizationVaultTitle", + description: "exportingOrganizationVaultDescription", + scopeIdentifier: (await this.organizationService.get(this.organizationId)).name, + } + : { + title: "exportingPersonalVaultTitle", + description: "exportingPersonalVaultDescription", + scopeIdentifier: await this.stateService.getEmail(), + }; + this.show = true; + } +} diff --git a/common/src/abstractions/organization.service.ts b/common/src/abstractions/organization.service.ts index 8c252430..e0b5fde4 100644 --- a/common/src/abstractions/organization.service.ts +++ b/common/src/abstractions/organization.service.ts @@ -7,4 +7,5 @@ export abstract class OrganizationService { getAll: (userId?: string) => Promise; save: (orgs: { [id: string]: OrganizationData }) => Promise; canManageSponsorships: () => Promise; + hasOrganizations: (userId?: string) => Promise; } diff --git a/common/src/services/organization.service.ts b/common/src/services/organization.service.ts index 08adb072..0ff32e81 100644 --- a/common/src/services/organization.service.ts +++ b/common/src/services/organization.service.ts @@ -47,4 +47,9 @@ export class OrganizationService implements OrganizationServiceAbstraction { (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null ); } + + async hasOrganizations(userId?: string): Promise { + const organizations = await this.getAll(userId); + return organizations.length > 0; + } } From 2779cd0966e75137f73768e9e89ee9dd5f1baa4f Mon Sep 17 00:00:00 2001 From: Melanie Kanavakatini <13248401+mkanavakatini@users.noreply.github.com> Date: Wed, 23 Feb 2022 21:18:46 +0000 Subject: [PATCH 098/120] feat: add hidden char count toggle (#341) Co-authored-by: Thomas Rittson --- .../view-custom-fields.component.ts | 9 +++++++++ angular/src/components/view.component.ts | 10 ++++++++++ .../src/pipes/color-password-count.pipe.ts | 18 ++++++++++++++++++ angular/src/pipes/color-password.pipe.ts | 12 +++++++++++- angular/src/scss/bwicons/fonts/bwi-font.svg | 1 + angular/src/scss/bwicons/fonts/bwi-font.ttf | Bin 67428 -> 68412 bytes angular/src/scss/bwicons/fonts/bwi-font.woff | Bin 67504 -> 68488 bytes angular/src/scss/bwicons/fonts/bwi-font.woff2 | Bin 29376 -> 29820 bytes angular/src/scss/bwicons/styles/style.scss | 1 + common/src/models/view/fieldView.ts | 1 + 10 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 angular/src/pipes/color-password-count.pipe.ts diff --git a/angular/src/components/view-custom-fields.component.ts b/angular/src/components/view-custom-fields.component.ts index 0f67aa02..8439ed67 100644 --- a/angular/src/components/view-custom-fields.component.ts +++ b/angular/src/components/view-custom-fields.component.ts @@ -23,8 +23,17 @@ export class ViewCustomFieldsComponent { const f = field as any; f.showValue = !f.showValue; + f.showCount = false; if (f.showValue) { this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id); } } + + async toggleFieldCount(field: FieldView) { + if (!field.showValue) { + return; + } + + field.showCount = !field.showCount; + } } diff --git a/angular/src/components/view.component.ts b/angular/src/components/view.component.ts index c92e0b0c..d1e94967 100644 --- a/angular/src/components/view.component.ts +++ b/angular/src/components/view.component.ts @@ -44,6 +44,7 @@ export class ViewComponent implements OnDestroy, OnInit { cipher: CipherView; showPassword: boolean; + showPasswordCount: boolean; showCardNumber: boolean; showCardCode: boolean; canAccessPremium: boolean; @@ -218,11 +219,20 @@ export class ViewComponent implements OnDestroy, OnInit { } this.showPassword = !this.showPassword; + this.showPasswordCount = false; if (this.showPassword) { this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId); } } + async togglePasswordCount() { + if (!this.showPassword) { + return; + } + + this.showPasswordCount = !this.showPasswordCount; + } + async toggleCardNumber() { if (!(await this.promptPassword())) { return; diff --git a/angular/src/pipes/color-password-count.pipe.ts b/angular/src/pipes/color-password-count.pipe.ts new file mode 100644 index 00000000..3c0ec0de --- /dev/null +++ b/angular/src/pipes/color-password-count.pipe.ts @@ -0,0 +1,18 @@ +import { Pipe } from "@angular/core"; +import { ColorPasswordPipe } from "./color-password.pipe"; + +/* + An updated pipe that extends ColourPasswordPipe to include a character count +*/ +@Pipe({ name: "colorPasswordCount" }) +export class ColorPasswordCountPipe extends ColorPasswordPipe { + transform(password: string) { + const template = (character: string, type: string, index: number) => + ` + ${character}${index + 1} + `; + const colorizedPasswordCount = this.generateTemplate(password, template); + + return colorizedPasswordCount; + } +} diff --git a/angular/src/pipes/color-password.pipe.ts b/angular/src/pipes/color-password.pipe.ts index c888c16d..1b3d6072 100644 --- a/angular/src/pipes/color-password.pipe.ts +++ b/angular/src/pipes/color-password.pipe.ts @@ -9,6 +9,16 @@ import { Utils } from "jslib-common/misc/utils"; @Pipe({ name: "colorPassword" }) export class ColorPasswordPipe implements PipeTransform { transform(password: string) { + const template = (character: string, type: string) => + `${character}`; + const colorizedPassword = this.generateTemplate(password, template); + return colorizedPassword; + } + + protected generateTemplate( + password: string, + templateGenerator: (chararacter: string, type: string, index?: number) => string + ) { // Convert to an array to handle cases that stings have special characters, ie: emoji. const passwordArray = Array.from(password); let colorizedPassword = ""; @@ -44,7 +54,7 @@ export class ColorPasswordPipe implements PipeTransform { } else if (character.match(/\d/)) { type = "number"; } - colorizedPassword += '' + character + ""; + colorizedPassword += templateGenerator(character, type, i); } return colorizedPassword; } diff --git a/angular/src/scss/bwicons/fonts/bwi-font.svg b/angular/src/scss/bwicons/fonts/bwi-font.svg index 6084f2e3..8b37358b 100644 --- a/angular/src/scss/bwicons/fonts/bwi-font.svg +++ b/angular/src/scss/bwicons/fonts/bwi-font.svg @@ -163,6 +163,7 @@ + diff --git a/angular/src/scss/bwicons/fonts/bwi-font.ttf b/angular/src/scss/bwicons/fonts/bwi-font.ttf index 900da5ca181746494004c3d344b414fac9844b65..9b1cfde3ddc312197d8c433ce8863490df35e649 100644 GIT binary patch delta 1165 zcmaJ=&x=$?5bo-(s_xhCz4^7{>>(2qcNP^B7Tq5TF_=RFxkygIg9tiC;~sY6f)X~T zalwlo#AU$s;2{AaCvm~UdRR}%Ipmg{5)YF60YL~xH-0^{Ap;9SLv_`w`o6Ee<~_T` zTX*<&r~jid)HcSPxzxR~j95dyf*39>ee>m$XTN-p{F)(mZ}DRHLi_i*&kRZGKe~tl zZ}H#AKSw^j*t@#&ku=wkW8QwUboqwh|~`@dd%?G%y3khK%6Bj%A)D*FM~0Xa%Z8A&TZ2>md}(m6%l&=4>z; zgGK~P1lI(b;6EiT7{c-le4p&J5X^8fYABQakd`co>PxRfM~5;)D&gTdd<@+{ayHiR zUI4%g=bBYSghptRP^arfUa#jxefzIkk=!e4+kd1y)gQfhb;`A;dxxH%t$z629O*fgX*X+qnSuNU28RD9GEx&$ zWM;eiX21}2A`{N%)Q22)rV7@3~{ z%}~lstSDeu%q+mb$jSj!uaK9Ro2ooP%;XO^6gn6z*5`UR8B<_jJ#XvzK+zor%gumSlev;zloFPZDn)_M%Io&cTffn#7zs z3ptovl3@=kL_r~tV*~@6Lvo785OVXD1Qca2B8VW#I^$P83+^R>dQ{cx?|tukUoms% zYreL@txr!aE=CkZ5hd56q}mtytrO+F3(J>Rk-dkM+lk`B#m~+o_gh5zMu=Y?-v7RL zZu!HAqzBBA5aWN%zTZOMl=;4M&Z6HzSG4=%PZ$1icg|&JVfW4xxwnC%U7Vf*Wdnj@0VLohcAaiz)`dn zZ9S=OG<-0|?OS($q>b%zdian2Tbt-`be-O!<8+diqNq7vqt4`kgVQuWcjV}C+P!9H z+G7*6ms(~Ap+}iLEn{o+CjCblDCXw^BUWcJK&!=}&-(3;o9o3w>y3~an+Y99*j+%f z75@%8pCE|98g;dydVTxXbiKT3%8{PY_t}c=HQ^L>%;fITj!|>}OdB+v{gVeU?f>1@ z+7nJ&tu&UmNnvavVn_*#)mo>i#MsI`OV+by9GxjgN2NrkEgxrWQ(>n-ptKeCk~R!! ze6Fte5V)O~%(+&QwY~8o7GU)8Mw(gH5XGwDGGmMgr_MOmqL2%Wz-cZGNN{vUz*6@v zw`eL3-ZbsUVo)qBkxJ_Cs2*#2cGgQ#o46bRmV856`MW^sZLEzF-X)^V@u7;AR0Uz9$hP0%CyZ={>BB=8O}z9|2NK+yApOsxnH{m({PU de*#nh3aJUqd<;S$)eKCaa1!3`&&g=X1OQ@uS0exb diff --git a/angular/src/scss/bwicons/fonts/bwi-font.woff2 b/angular/src/scss/bwicons/fonts/bwi-font.woff2 index 898cf2c3fb9528aa697154fc14d3f83d80d1b067..04cda6895e1524d00890fe6ba0d4084d44eaef0a 100644 GIT binary patch literal 29820 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 literal 29376 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 Date: Thu, 24 Feb 2022 07:33:34 +1000 Subject: [PATCH 099/120] Fix linting (#693) --- angular/src/components/export-scope-callout.component.ts | 2 +- angular/src/pipes/color-password-count.pipe.ts | 1 + angular/src/scss/bwicons/styles/style.scss | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/angular/src/components/export-scope-callout.component.ts b/angular/src/components/export-scope-callout.component.ts index 40154d72..a2011846 100644 --- a/angular/src/components/export-scope-callout.component.ts +++ b/angular/src/components/export-scope-callout.component.ts @@ -10,7 +10,7 @@ import { StateService } from "jslib-common/abstractions/state.service"; export class ExportScopeCalloutComponent implements OnInit { @Input() organizationId: string = null; - show: boolean = false; + show = false; scopeConfig: { title: string; description: string; diff --git a/angular/src/pipes/color-password-count.pipe.ts b/angular/src/pipes/color-password-count.pipe.ts index 3c0ec0de..9890a340 100644 --- a/angular/src/pipes/color-password-count.pipe.ts +++ b/angular/src/pipes/color-password-count.pipe.ts @@ -1,4 +1,5 @@ import { Pipe } from "@angular/core"; + import { ColorPasswordPipe } from "./color-password.pipe"; /* diff --git a/angular/src/scss/bwicons/styles/style.scss b/angular/src/scss/bwicons/styles/style.scss index 5c17c3e9..e8c05f23 100644 --- a/angular/src/scss/bwicons/styles/style.scss +++ b/angular/src/scss/bwicons/styles/style.scss @@ -240,7 +240,7 @@ $icons: ( "apple": "\e945", "android": "\e944", "error": "\e981", - "numbered-list": "\e989" + "numbered-list": "\e989", ); @each $name, $glyph in $icons { From 1cbc119ad8c0447046624634dcd09262bb3f9b46 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 24 Feb 2022 13:08:43 +1000 Subject: [PATCH 100/120] [AuthService refactor] Don't clear state if 2FA is invalid (#690) * Don't clear state if 2FA is invalid * Add session timeout to 2FA * Clear internal authService state if unhandled error --- angular/src/services/jslib-services.module.ts | 1 + common/src/services/auth.service.ts | 41 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/angular/src/services/jslib-services.module.ts b/angular/src/services/jslib-services.module.ts index 54765078..f389b860 100644 --- a/angular/src/services/jslib-services.module.ts +++ b/angular/src/services/jslib-services.module.ts @@ -119,6 +119,7 @@ import { ValidationService } from "./validation.service"; EnvironmentServiceAbstraction, StateServiceAbstraction, TwoFactorServiceAbstraction, + I18nServiceAbstraction, ], }, { diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 44bf539f..06ad640c 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -3,6 +3,7 @@ import { AppIdService } from "../abstractions/appId.service"; import { AuthService as AuthServiceAbstraction } from "../abstractions/auth.service"; import { CryptoService } from "../abstractions/crypto.service"; import { EnvironmentService } from "../abstractions/environment.service"; +import { I18nService } from "../abstractions/i18n.service"; import { KeyConnectorService } from "../abstractions/keyConnector.service"; import { LogService } from "../abstractions/log.service"; import { MessagingService } from "../abstractions/messaging.service"; @@ -24,6 +25,9 @@ import { import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey"; import { TokenRequestTwoFactor } from "../models/request/identityToken/tokenRequest"; import { PreloginRequest } from "../models/request/preloginRequest"; +import { ErrorResponse } from "../models/response/errorResponse"; + +const sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes export class AuthService implements AuthServiceAbstraction { get email(): string { @@ -37,6 +41,7 @@ export class AuthService implements AuthServiceAbstraction { } private logInStrategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy; + private sessionTimeout: any; constructor( protected cryptoService: CryptoService, @@ -49,7 +54,8 @@ export class AuthService implements AuthServiceAbstraction { protected keyConnectorService: KeyConnectorService, protected environmentService: EnvironmentService, protected stateService: StateService, - protected twoFactorService: TwoFactorService + protected twoFactorService: TwoFactorService, + protected i18nService: I18nService ) {} async logIn( @@ -110,10 +116,24 @@ export class AuthService implements AuthServiceAbstraction { } async logInTwoFactor(twoFactor: TokenRequestTwoFactor): Promise { + if (this.logInStrategy == null) { + throw new Error(this.i18nService.t("sessionTimeout")); + } + try { - return await this.logInStrategy.logInTwoFactor(twoFactor); - } finally { - this.clearState(); + const result = await this.logInStrategy.logInTwoFactor(twoFactor); + + // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again + if (!result.requiresTwoFactor) { + this.clearState(); + } + return result; + } catch (e) { + // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe + if (!(e instanceof ErrorResponse)) { + this.clearState(); + } + throw e; } } @@ -154,9 +174,22 @@ export class AuthService implements AuthServiceAbstraction { private saveState(strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy) { this.logInStrategy = strategy; + this.startSessionTimeout(); } private clearState() { this.logInStrategy = null; + this.clearSessionTimeout(); + } + + private startSessionTimeout() { + this.clearSessionTimeout(); + this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength); + } + + private clearSessionTimeout() { + if (this.sessionTimeout != null) { + clearTimeout(this.sessionTimeout); + } } } From 65219f5705addf9c762e796c31ba914a395a9ff0 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 25 Feb 2022 07:03:13 -0500 Subject: [PATCH 101/120] [bug] Store collapsedGroupings in accountSettings (#694) --- common/src/models/domain/account.ts | 2 +- common/src/services/state.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/models/domain/account.ts b/common/src/models/domain/account.ts index 3eb28631..a6c0cfd6 100644 --- a/common/src/models/domain/account.ts +++ b/common/src/models/domain/account.ts @@ -51,7 +51,6 @@ export class AccountData { GeneratedPasswordHistory[] > = new EncryptionPair(); addEditCipherInfo?: any; - collapsedGroupings?: string[]; eventCollection?: EventData[]; organizations?: { [id: string]: OrganizationData }; providers?: { [id: string]: ProviderData }; @@ -105,6 +104,7 @@ export class AccountSettings { biometricLocked?: boolean; biometricUnlock?: boolean; clearClipboard?: number; + collapsedGroupings?: string[]; defaultUriMatch?: UriMatchType; disableAddLoginNotification?: boolean; disableAutoBiometricsPrompt?: boolean; diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 6a27d224..3af2bc11 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -383,14 +383,14 @@ export class StateService< async getCollapsedGroupings(options?: StorageOptions): Promise { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) - )?.data?.collapsedGroupings; + )?.settings?.collapsedGroupings; } async setCollapsedGroupings(value: string[], options?: StorageOptions): Promise { const account = await this.getAccount( this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) ); - account.data.collapsedGroupings = value; + account.settings.collapsedGroupings = value; await this.saveAccount( account, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) From a69135ce066ed353424e3a3ef80dbfe4179224fe Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Fri, 25 Feb 2022 18:54:27 +0100 Subject: [PATCH 102/120] Add missing localeNames (#695) --- common/src/services/i18n.service.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/src/services/i18n.service.ts b/common/src/services/i18n.service.ts index 1fdea202..fda8f839 100644 --- a/common/src/services/i18n.service.ts +++ b/common/src/services/i18n.service.ts @@ -11,6 +11,8 @@ export class I18nService implements I18nServiceAbstraction { ["az", "Azərbaycanca"], ["be", "Беларуская"], ["bg", "български"], + ["bn", "বাংলা"], + ["bs", "bosanski jezik"], ["ca", "català"], ["cs", "čeština"], ["da", "dansk"], @@ -18,11 +20,13 @@ export class I18nService implements I18nServiceAbstraction { ["el", "Ελληνικά"], ["en", "English"], ["en-GB", "English (British)"], + ["en-IN", "English (India)"], ["eo", "Esperanto"], ["es", "español"], ["et", "eesti"], ["fa", "فارسی"], ["fi", "suomi"], + ["fil", "Wikang Filipino"], ["fr", "français"], ["he", "עברית"], ["hi", "हिन्दी"], @@ -31,17 +35,25 @@ export class I18nService implements I18nServiceAbstraction { ["id", "Bahasa Indonesia"], ["it", "italiano"], ["ja", "日本語"], + ["ka", "ქართული"], + ["km", "ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ"], + ["kn", "ಕನ್ನಡ"], ["ko", "한국어"], + ["lt", "lietuvių kalba"], ["lv", "Latvietis"], + ["me", "црногорски"], ["ml", "മലയാളം"], ["nb", "norsk (bokmål)"], ["nl", "Nederlands"], + ["nn", "Norsk Nynorsk"], ["pl", "polski"], ["pt-BR", "português do Brasil"], ["pt-PT", "português"], ["ro", "română"], ["ru", "русский"], + ["si", "සිංහල"], ["sk", "slovenčina"], + ["sl", "Slovenski jezik, Slovenščina"], ["sr", "Српски"], ["sv", "svenska"], ["th", "ไทย"], From d919346517b7e137ed73aa9ba2739fa02f5118e3 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Tue, 1 Mar 2022 13:13:19 +1000 Subject: [PATCH 103/120] Fix autoFillOnPageLoadDefault default value (#697) --- common/src/services/state.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 3af2bc11..33a71902 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -231,7 +231,7 @@ export class StateService< async getAutoFillOnPageLoadDefault(options?: StorageOptions): Promise { return ( (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.autoFillOnPageLoadDefault ?? false + ?.settings?.autoFillOnPageLoadDefault ?? true ); } From d81eb7ddae5a430f776ab39e296b6dfb526cdfb7 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Wed, 2 Mar 2022 07:31:00 +1000 Subject: [PATCH 104/120] Improve SSO Config validation (#572) * Extract SsoConfig enums to own file * Add ChangeStripSpaces directive * Move custom validators to jslib * Add a11y-invalid directive * Add and implement dirtyValidators * Create ssoConfigView model and factory methods * Add interface for select options * Don't build SsoConfigData if null Co-authored-by: Oscar Hinton --- .../src/directives/a11y-invalid.directive.ts | 26 +++++ .../input-strip-spaces.directive.ts | 12 ++ angular/src/interfaces/selectOptions.ts | 5 + angular/src/validators/dirty.validator.ts | 25 ++++ .../src/validators/requiredIf.validator.ts | 10 ++ common/src/enums/ssoEnums.ts | 34 ++++++ common/src/models/api/ssoConfigApi.ts | 84 ++++++++------ .../organization/organizationSsoResponse.ts | 5 +- common/src/models/view/ssoConfigView.ts | 107 ++++++++++++++++++ 9 files changed, 274 insertions(+), 34 deletions(-) create mode 100644 angular/src/directives/a11y-invalid.directive.ts create mode 100644 angular/src/directives/input-strip-spaces.directive.ts create mode 100644 angular/src/interfaces/selectOptions.ts create mode 100644 angular/src/validators/dirty.validator.ts create mode 100644 angular/src/validators/requiredIf.validator.ts create mode 100644 common/src/enums/ssoEnums.ts create mode 100644 common/src/models/view/ssoConfigView.ts diff --git a/angular/src/directives/a11y-invalid.directive.ts b/angular/src/directives/a11y-invalid.directive.ts new file mode 100644 index 00000000..c5f0e406 --- /dev/null +++ b/angular/src/directives/a11y-invalid.directive.ts @@ -0,0 +1,26 @@ +import { Directive, ElementRef, OnDestroy, OnInit } from "@angular/core"; +import { NgControl } from "@angular/forms"; +import { Subscription } from "rxjs"; + +@Directive({ + selector: "[appA11yInvalid]", +}) +export class A11yInvalidDirective implements OnDestroy, OnInit { + private sub: Subscription; + + constructor(private el: ElementRef, private formControlDirective: NgControl) {} + + ngOnInit() { + this.sub = this.formControlDirective.control.statusChanges.subscribe((status) => { + if (status === "INVALID") { + this.el.nativeElement.setAttribute("aria-invalid", "true"); + } else if (status === "VALID") { + this.el.nativeElement.setAttribute("aria-invalid", "false"); + } + }); + } + + ngOnDestroy() { + this.sub?.unsubscribe(); + } +} diff --git a/angular/src/directives/input-strip-spaces.directive.ts b/angular/src/directives/input-strip-spaces.directive.ts new file mode 100644 index 00000000..598281b8 --- /dev/null +++ b/angular/src/directives/input-strip-spaces.directive.ts @@ -0,0 +1,12 @@ +import { Directive, ElementRef, HostListener } from "@angular/core"; + +@Directive({ + selector: "input[appInputStripSpaces]", +}) +export class InputStripSpacesDirective { + constructor(private el: ElementRef) {} + + @HostListener("input") onInput() { + this.el.nativeElement.value = this.el.nativeElement.value.replace(/ /g, ""); + } +} diff --git a/angular/src/interfaces/selectOptions.ts b/angular/src/interfaces/selectOptions.ts new file mode 100644 index 00000000..19da14d9 --- /dev/null +++ b/angular/src/interfaces/selectOptions.ts @@ -0,0 +1,5 @@ +export interface SelectOptions { + name: string; + value: any; + disabled?: boolean; +} diff --git a/angular/src/validators/dirty.validator.ts b/angular/src/validators/dirty.validator.ts new file mode 100644 index 00000000..14875631 --- /dev/null +++ b/angular/src/validators/dirty.validator.ts @@ -0,0 +1,25 @@ +import { AbstractControl, ValidationErrors, ValidatorFn, Validators } from "@angular/forms"; +import { requiredIf } from "./requiredIf.validator"; + +/** + * A higher order function that takes a ValidatorFn and returns a new validator. + * The new validator only runs the ValidatorFn if the control is dirty. This prevents error messages from being + * displayed to the user prematurely. + */ +function dirtyValidator(validator: ValidatorFn) { + return (control: AbstractControl): ValidationErrors | null => { + return control.dirty ? validator(control) : null; + }; +} + +export function dirtyRequiredIf(predicate: (predicateCtrl: AbstractControl) => boolean) { + return dirtyValidator(requiredIf(predicate)); +} + +/** + * Equivalent to dirtyValidator(Validator.required), however using dirtyValidator returns a new function + * each time which prevents formControl.hasError from properly comparing functions for equality. + */ +export function dirtyRequired(control: AbstractControl): ValidationErrors | null { + return control.dirty ? Validators.required(control) : null; +} diff --git a/angular/src/validators/requiredIf.validator.ts b/angular/src/validators/requiredIf.validator.ts new file mode 100644 index 00000000..50d5ecf7 --- /dev/null +++ b/angular/src/validators/requiredIf.validator.ts @@ -0,0 +1,10 @@ +import { AbstractControl, ValidationErrors, Validators } from "@angular/forms"; + +/** + * Returns a new validator which will apply Validators.required only if the predicate is true. + */ +export function requiredIf(predicate: (predicateCtrl: AbstractControl) => boolean) { + return (control: AbstractControl): ValidationErrors | null => { + return predicate(control) ? Validators.required(control) : null; + }; +} diff --git a/common/src/enums/ssoEnums.ts b/common/src/enums/ssoEnums.ts new file mode 100644 index 00000000..fdf9c0b7 --- /dev/null +++ b/common/src/enums/ssoEnums.ts @@ -0,0 +1,34 @@ +export enum SsoType { + None = 0, + OpenIdConnect = 1, + Saml2 = 2, +} + +export enum OpenIdConnectRedirectBehavior { + RedirectGet = 0, + FormPost = 1, +} + +export enum Saml2BindingType { + HttpRedirect = 1, + HttpPost = 2, + Artifact = 4, +} + +export enum Saml2NameIdFormat { + NotConfigured = 0, + Unspecified = 1, + EmailAddress = 2, + X509SubjectName = 3, + WindowsDomainQualifiedName = 4, + KerberosPrincipalName = 5, + EntityIdentifier = 6, + Persistent = 7, + Transient = 8, +} + +export enum Saml2SigningBehavior { + IfIdpWantAuthnRequestsSigned = 0, + Always = 1, + Never = 3, +} diff --git a/common/src/models/api/ssoConfigApi.ts b/common/src/models/api/ssoConfigApi.ts index 338ab793..c6a2456d 100644 --- a/common/src/models/api/ssoConfigApi.ts +++ b/common/src/models/api/ssoConfigApi.ts @@ -1,40 +1,58 @@ import { BaseResponse } from "../response/baseResponse"; -enum SsoType { - OpenIdConnect = 1, - Saml2 = 2, -} - -enum OpenIdConnectRedirectBehavior { - RedirectGet = 0, - FormPost = 1, -} - -enum Saml2BindingType { - HttpRedirect = 1, - HttpPost = 2, - Artifact = 4, -} - -enum Saml2NameIdFormat { - NotConfigured = 0, - Unspecified = 1, - EmailAddress = 2, - X509SubjectName = 3, - WindowsDomainQualifiedName = 4, - KerberosPrincipalName = 5, - EntityIdentifier = 6, - Persistent = 7, - Transient = 8, -} - -enum Saml2SigningBehavior { - IfIdpWantAuthnRequestsSigned = 0, - Always = 1, - Never = 3, -} +import { + OpenIdConnectRedirectBehavior, + Saml2BindingType, + Saml2NameIdFormat, + Saml2SigningBehavior, + SsoType, +} from "../../enums/ssoEnums"; +import { SsoConfigView } from "../view/ssoConfigView"; export class SsoConfigApi extends BaseResponse { + static fromView(view: SsoConfigView, api = new SsoConfigApi()) { + api.configType = view.configType; + + api.keyConnectorEnabled = view.keyConnectorEnabled; + api.keyConnectorUrl = view.keyConnectorUrl; + + if (api.configType === SsoType.OpenIdConnect) { + api.authority = view.openId.authority; + api.clientId = view.openId.clientId; + api.clientSecret = view.openId.clientSecret; + api.metadataAddress = view.openId.metadataAddress; + api.redirectBehavior = view.openId.redirectBehavior; + api.getClaimsFromUserInfoEndpoint = view.openId.getClaimsFromUserInfoEndpoint; + api.additionalScopes = view.openId.additionalScopes; + api.additionalUserIdClaimTypes = view.openId.additionalUserIdClaimTypes; + api.additionalEmailClaimTypes = view.openId.additionalEmailClaimTypes; + api.additionalNameClaimTypes = view.openId.additionalNameClaimTypes; + api.acrValues = view.openId.acrValues; + api.expectedReturnAcrValue = view.openId.expectedReturnAcrValue; + } else if (api.configType === SsoType.Saml2) { + api.spNameIdFormat = view.saml.spNameIdFormat; + api.spOutboundSigningAlgorithm = view.saml.spOutboundSigningAlgorithm; + api.spSigningBehavior = view.saml.spSigningBehavior; + api.spMinIncomingSigningAlgorithm = view.saml.spMinIncomingSigningAlgorithm; + api.spWantAssertionsSigned = view.saml.spWantAssertionsSigned; + api.spValidateCertificates = view.saml.spValidateCertificates; + + api.idpEntityId = view.saml.idpEntityId; + api.idpBindingType = view.saml.idpBindingType; + api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl; + api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl; + api.idpArtifactResolutionServiceUrl = view.saml.idpArtifactResolutionServiceUrl; + api.idpX509PublicCert = view.saml.idpX509PublicCert; + api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm; + api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse; + api.idpWantAuthnRequestsSigned = view.saml.idpWantAuthnRequestsSigned; + + // Value is inverted in the api model (disable instead of allow) + api.idpDisableOutboundLogoutRequests = !view.saml.idpAllowOutboundLogoutRequests; + } + + return api; + } configType: SsoType; keyConnectorEnabled: boolean; diff --git a/common/src/models/response/organization/organizationSsoResponse.ts b/common/src/models/response/organization/organizationSsoResponse.ts index 71432912..abe6b720 100644 --- a/common/src/models/response/organization/organizationSsoResponse.ts +++ b/common/src/models/response/organization/organizationSsoResponse.ts @@ -9,7 +9,10 @@ export class OrganizationSsoResponse extends BaseResponse { constructor(response: any) { super(response); this.enabled = this.getResponseProperty("Enabled"); - this.data = new SsoConfigApi(this.getResponseProperty("Data")); + this.data = + this.getResponseProperty("Data") != null + ? new SsoConfigApi(this.getResponseProperty("Data")) + : null; this.urls = new SsoUrls(this.getResponseProperty("Urls")); } } diff --git a/common/src/models/view/ssoConfigView.ts b/common/src/models/view/ssoConfigView.ts new file mode 100644 index 00000000..1fff0532 --- /dev/null +++ b/common/src/models/view/ssoConfigView.ts @@ -0,0 +1,107 @@ +import { View } from "./view"; + +import { SsoConfigApi } from "../api/ssoConfigApi"; + +import { + OpenIdConnectRedirectBehavior, + Saml2BindingType, + Saml2NameIdFormat, + Saml2SigningBehavior, + SsoType, +} from "../../enums/ssoEnums"; + +export class SsoConfigView extends View { + configType: SsoType; + + keyConnectorEnabled: boolean; + keyConnectorUrl: string; + + openId: { + authority: string; + clientId: string; + clientSecret: string; + metadataAddress: string; + redirectBehavior: OpenIdConnectRedirectBehavior; + getClaimsFromUserInfoEndpoint: boolean; + additionalScopes: string; + additionalUserIdClaimTypes: string; + additionalEmailClaimTypes: string; + additionalNameClaimTypes: string; + acrValues: string; + expectedReturnAcrValue: string; + }; + + saml: { + spNameIdFormat: Saml2NameIdFormat; + spOutboundSigningAlgorithm: string; + spSigningBehavior: Saml2SigningBehavior; + spMinIncomingSigningAlgorithm: boolean; + spWantAssertionsSigned: boolean; + spValidateCertificates: boolean; + + idpEntityId: string; + idpBindingType: Saml2BindingType; + idpSingleSignOnServiceUrl: string; + idpSingleLogoutServiceUrl: string; + idpArtifactResolutionServiceUrl: string; + idpX509PublicCert: string; + idpOutboundSigningAlgorithm: string; + idpAllowUnsolicitedAuthnResponse: boolean; + idpAllowOutboundLogoutRequests: boolean; + idpWantAuthnRequestsSigned: boolean; + }; + + constructor(api: SsoConfigApi) { + super(); + if (api == null) { + return; + } + + this.configType = api.configType; + + this.keyConnectorEnabled = api.keyConnectorEnabled; + this.keyConnectorUrl = api.keyConnectorUrl; + + if (this.configType === SsoType.OpenIdConnect) { + this.openId = { + authority: api.authority, + clientId: api.clientId, + clientSecret: api.clientSecret, + metadataAddress: api.metadataAddress, + redirectBehavior: api.redirectBehavior, + getClaimsFromUserInfoEndpoint: api.getClaimsFromUserInfoEndpoint, + additionalScopes: api.additionalScopes, + additionalUserIdClaimTypes: api.additionalUserIdClaimTypes, + additionalEmailClaimTypes: api.additionalEmailClaimTypes, + additionalNameClaimTypes: api.additionalNameClaimTypes, + acrValues: api.acrValues, + expectedReturnAcrValue: api.expectedReturnAcrValue, + }; + } else if (this.configType === SsoType.Saml2) { + this.saml = { + spNameIdFormat: api.spNameIdFormat, + spOutboundSigningAlgorithm: api.spOutboundSigningAlgorithm, + spSigningBehavior: api.spSigningBehavior, + spMinIncomingSigningAlgorithm: api.spMinIncomingSigningAlgorithm, + spWantAssertionsSigned: api.spWantAssertionsSigned, + spValidateCertificates: api.spValidateCertificates, + + idpEntityId: api.idpEntityId, + idpBindingType: api.idpBindingType, + idpSingleSignOnServiceUrl: api.idpSingleSignOnServiceUrl, + idpSingleLogoutServiceUrl: api.idpSingleLogoutServiceUrl, + idpArtifactResolutionServiceUrl: api.idpArtifactResolutionServiceUrl, + idpX509PublicCert: api.idpX509PublicCert, + idpOutboundSigningAlgorithm: api.idpOutboundSigningAlgorithm, + idpAllowUnsolicitedAuthnResponse: api.idpAllowUnsolicitedAuthnResponse, + idpWantAuthnRequestsSigned: api.idpWantAuthnRequestsSigned, + + // Value is inverted in the view model (allow instead of disable) + idpAllowOutboundLogoutRequests: + api.idpDisableOutboundLogoutRequests == null + ? null + : !api.idpDisableOutboundLogoutRequests, + }; + } + } +} From c1a37eab13df5427b849f37d5418d6faf3ef5a51 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Wed, 2 Mar 2022 07:44:14 +1000 Subject: [PATCH 105/120] Fix storage keys in v1 migration (#696) --- common/src/services/stateMigration.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/services/stateMigration.service.ts b/common/src/services/stateMigration.service.ts index 584173d4..2b299898 100644 --- a/common/src/services/stateMigration.service.ts +++ b/common/src/services/stateMigration.service.ts @@ -373,7 +373,7 @@ export class StateMigrationService< legacyEtmKey: null, organizationKeys: { decrypted: null, - encrypted: await this.get(v1Keys.encOrgKeys + userId), + encrypted: await this.get(v1Keys.encOrgKeys), }, privateKey: { decrypted: null, @@ -381,7 +381,7 @@ export class StateMigrationService< }, providerKeys: { decrypted: null, - encrypted: await this.get(v1Keys.encProviderKeys + userId), + encrypted: await this.get(v1Keys.encProviderKeys), }, publicKey: null, }, From e47eb5e74fd8ff5537149ca033fb395bb0f6295b Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Wed, 2 Mar 2022 08:11:12 +1000 Subject: [PATCH 106/120] Fix linting (#700) --- angular/src/validators/dirty.validator.ts | 1 + common/src/models/api/ssoConfigApi.ts | 3 +-- common/src/models/view/ssoConfigView.ts | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/angular/src/validators/dirty.validator.ts b/angular/src/validators/dirty.validator.ts index 14875631..25734944 100644 --- a/angular/src/validators/dirty.validator.ts +++ b/angular/src/validators/dirty.validator.ts @@ -1,4 +1,5 @@ import { AbstractControl, ValidationErrors, ValidatorFn, Validators } from "@angular/forms"; + import { requiredIf } from "./requiredIf.validator"; /** diff --git a/common/src/models/api/ssoConfigApi.ts b/common/src/models/api/ssoConfigApi.ts index c6a2456d..de0b059e 100644 --- a/common/src/models/api/ssoConfigApi.ts +++ b/common/src/models/api/ssoConfigApi.ts @@ -1,5 +1,3 @@ -import { BaseResponse } from "../response/baseResponse"; - import { OpenIdConnectRedirectBehavior, Saml2BindingType, @@ -7,6 +5,7 @@ import { Saml2SigningBehavior, SsoType, } from "../../enums/ssoEnums"; +import { BaseResponse } from "../response/baseResponse"; import { SsoConfigView } from "../view/ssoConfigView"; export class SsoConfigApi extends BaseResponse { diff --git a/common/src/models/view/ssoConfigView.ts b/common/src/models/view/ssoConfigView.ts index 1fff0532..c2910a53 100644 --- a/common/src/models/view/ssoConfigView.ts +++ b/common/src/models/view/ssoConfigView.ts @@ -1,7 +1,3 @@ -import { View } from "./view"; - -import { SsoConfigApi } from "../api/ssoConfigApi"; - import { OpenIdConnectRedirectBehavior, Saml2BindingType, @@ -9,6 +5,9 @@ import { Saml2SigningBehavior, SsoType, } from "../../enums/ssoEnums"; +import { SsoConfigApi } from "../api/ssoConfigApi"; + +import { View } from "./view"; export class SsoConfigView extends View { configType: SsoType; From 8f5f694a1ea5dbbc9501b270b10559bbbfd107c1 Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Wed, 2 Mar 2022 08:11:34 -0500 Subject: [PATCH 107/120] Roll back organizationId and collectionId's if ciphers fail to be moved (#699) --- common/src/services/cipher.service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/common/src/services/cipher.service.ts b/common/src/services/cipher.service.ts index 91cfb464..ec98c347 100644 --- a/common/src/services/cipher.service.ts +++ b/common/src/services/cipher.service.ts @@ -657,7 +657,15 @@ export class CipherService implements CipherServiceAbstraction { } await Promise.all(promises); const request = new CipherBulkShareRequest(encCiphers, collectionIds); - await this.apiService.putShareCiphers(request); + try { + await this.apiService.putShareCiphers(request); + } catch (e) { + for (const cipher of ciphers) { + cipher.organizationId = null; + cipher.collectionIds = null; + } + throw e; + } const userId = await this.stateService.getUserId(); await this.upsert(encCiphers.map((c) => c.toCipherData(userId))); } From adfc2f234d146e80695623af768b15d2616df8c4 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 3 Mar 2022 07:52:11 +1000 Subject: [PATCH 108/120] Remove unused SSO Form code (#701) * Remove unused SAML Artifact Binding properties * Remove unused validators --- angular/src/validators/dirty.validator.ts | 23 +++---------------- .../src/validators/requiredIf.validator.ts | 10 -------- common/src/enums/ssoEnums.ts | 1 - common/src/models/api/ssoConfigApi.ts | 5 ---- common/src/models/view/ssoConfigView.ts | 2 -- 5 files changed, 3 insertions(+), 38 deletions(-) delete mode 100644 angular/src/validators/requiredIf.validator.ts diff --git a/angular/src/validators/dirty.validator.ts b/angular/src/validators/dirty.validator.ts index 25734944..66ba2be0 100644 --- a/angular/src/validators/dirty.validator.ts +++ b/angular/src/validators/dirty.validator.ts @@ -1,25 +1,8 @@ -import { AbstractControl, ValidationErrors, ValidatorFn, Validators } from "@angular/forms"; - -import { requiredIf } from "./requiredIf.validator"; +import { AbstractControl, ValidationErrors, Validators } from "@angular/forms"; /** - * A higher order function that takes a ValidatorFn and returns a new validator. - * The new validator only runs the ValidatorFn if the control is dirty. This prevents error messages from being - * displayed to the user prematurely. - */ -function dirtyValidator(validator: ValidatorFn) { - return (control: AbstractControl): ValidationErrors | null => { - return control.dirty ? validator(control) : null; - }; -} - -export function dirtyRequiredIf(predicate: (predicateCtrl: AbstractControl) => boolean) { - return dirtyValidator(requiredIf(predicate)); -} - -/** - * Equivalent to dirtyValidator(Validator.required), however using dirtyValidator returns a new function - * each time which prevents formControl.hasError from properly comparing functions for equality. + * Runs Validators.required on a field only if it's dirty. This prevents error messages from being displayed + * to the user prematurely. */ export function dirtyRequired(control: AbstractControl): ValidationErrors | null { return control.dirty ? Validators.required(control) : null; diff --git a/angular/src/validators/requiredIf.validator.ts b/angular/src/validators/requiredIf.validator.ts deleted file mode 100644 index 50d5ecf7..00000000 --- a/angular/src/validators/requiredIf.validator.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AbstractControl, ValidationErrors, Validators } from "@angular/forms"; - -/** - * Returns a new validator which will apply Validators.required only if the predicate is true. - */ -export function requiredIf(predicate: (predicateCtrl: AbstractControl) => boolean) { - return (control: AbstractControl): ValidationErrors | null => { - return predicate(control) ? Validators.required(control) : null; - }; -} diff --git a/common/src/enums/ssoEnums.ts b/common/src/enums/ssoEnums.ts index fdf9c0b7..d9be7274 100644 --- a/common/src/enums/ssoEnums.ts +++ b/common/src/enums/ssoEnums.ts @@ -12,7 +12,6 @@ export enum OpenIdConnectRedirectBehavior { export enum Saml2BindingType { HttpRedirect = 1, HttpPost = 2, - Artifact = 4, } export enum Saml2NameIdFormat { diff --git a/common/src/models/api/ssoConfigApi.ts b/common/src/models/api/ssoConfigApi.ts index de0b059e..0767f3d6 100644 --- a/common/src/models/api/ssoConfigApi.ts +++ b/common/src/models/api/ssoConfigApi.ts @@ -40,7 +40,6 @@ export class SsoConfigApi extends BaseResponse { api.idpBindingType = view.saml.idpBindingType; api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl; api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl; - api.idpArtifactResolutionServiceUrl = view.saml.idpArtifactResolutionServiceUrl; api.idpX509PublicCert = view.saml.idpX509PublicCert; api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm; api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse; @@ -83,7 +82,6 @@ export class SsoConfigApi extends BaseResponse { idpBindingType: Saml2BindingType; idpSingleSignOnServiceUrl: string; idpSingleLogoutServiceUrl: string; - idpArtifactResolutionServiceUrl: string; idpX509PublicCert: string; idpOutboundSigningAlgorithm: string; idpAllowUnsolicitedAuthnResponse: boolean; @@ -125,9 +123,6 @@ export class SsoConfigApi extends BaseResponse { this.idpBindingType = this.getResponseProperty("IdpBindingType"); this.idpSingleSignOnServiceUrl = this.getResponseProperty("IdpSingleSignOnServiceUrl"); this.idpSingleLogoutServiceUrl = this.getResponseProperty("IdpSingleLogoutServiceUrl"); - this.idpArtifactResolutionServiceUrl = this.getResponseProperty( - "IdpArtifactResolutionServiceUrl" - ); this.idpX509PublicCert = this.getResponseProperty("IdpX509PublicCert"); this.idpOutboundSigningAlgorithm = this.getResponseProperty("IdpOutboundSigningAlgorithm"); this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty( diff --git a/common/src/models/view/ssoConfigView.ts b/common/src/models/view/ssoConfigView.ts index c2910a53..b4784c36 100644 --- a/common/src/models/view/ssoConfigView.ts +++ b/common/src/models/view/ssoConfigView.ts @@ -42,7 +42,6 @@ export class SsoConfigView extends View { idpBindingType: Saml2BindingType; idpSingleSignOnServiceUrl: string; idpSingleLogoutServiceUrl: string; - idpArtifactResolutionServiceUrl: string; idpX509PublicCert: string; idpOutboundSigningAlgorithm: string; idpAllowUnsolicitedAuthnResponse: boolean; @@ -89,7 +88,6 @@ export class SsoConfigView extends View { idpBindingType: api.idpBindingType, idpSingleSignOnServiceUrl: api.idpSingleSignOnServiceUrl, idpSingleLogoutServiceUrl: api.idpSingleLogoutServiceUrl, - idpArtifactResolutionServiceUrl: api.idpArtifactResolutionServiceUrl, idpX509PublicCert: api.idpX509PublicCert, idpOutboundSigningAlgorithm: api.idpOutboundSigningAlgorithm, idpAllowUnsolicitedAuthnResponse: api.idpAllowUnsolicitedAuthnResponse, From 48a4c27fe76d29abe87426d7686c3a0b8e0b546a Mon Sep 17 00:00:00 2001 From: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com> Date: Wed, 2 Mar 2022 19:47:57 -0600 Subject: [PATCH 109/120] [Captcha] Failed login attempts (#698) * [Captcha] Failed login attempts * Fix logIn.strategy test * Updated with the stark majority of requested changes * Fix typo * Unused import --- .../src/components/two-factor.component.ts | 23 +++- common/src/abstractions/auth.service.ts | 5 +- .../misc/logInStrategies/logIn.strategy.ts | 7 +- .../logInStrategies/passwordLogin.strategy.ts | 10 ++ common/src/services/auth.service.ts | 9 +- node/src/cli/commands/login.command.ts | 104 ++++++++++++------ .../logInStrategies/logIn.strategy.spec.ts | 13 ++- 7 files changed, 124 insertions(+), 47 deletions(-) diff --git a/angular/src/components/two-factor.component.ts b/angular/src/components/two-factor.component.ts index d6b8812c..a40dc3c5 100644 --- a/angular/src/components/two-factor.component.ts +++ b/angular/src/components/two-factor.component.ts @@ -17,8 +17,10 @@ import { AuthResult } from "jslib-common/models/domain/authResult"; import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; import { TwoFactorProviders } from "jslib-common/services/twoFactor.service"; +import { CaptchaProtectedComponent } from "./captchaProtected.component"; + @Directive() -export class TwoFactorComponent implements OnInit, OnDestroy { +export class TwoFactorComponent extends CaptchaProtectedComponent implements OnInit, OnDestroy { token = ""; remember = false; webAuthnReady = false; @@ -56,6 +58,7 @@ export class TwoFactorComponent implements OnInit, OnDestroy { protected logService: LogService, protected twoFactorService: TwoFactorService ) { + super(environmentService, i18nService, platformUtilsService); this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win); } @@ -153,6 +156,8 @@ export class TwoFactorComponent implements OnInit, OnDestroy { } async submit() { + await this.setupCaptcha(); + if (this.token == null || this.token === "") { this.platformUtilsService.showToast( "error", @@ -185,14 +190,20 @@ export class TwoFactorComponent implements OnInit, OnDestroy { } async doSubmit() { - this.formPromise = this.authService.logInTwoFactor({ - provider: this.selectedProviderType, - token: this.token, - remember: this.remember, - }); + this.formPromise = this.authService.logInTwoFactor( + { + provider: this.selectedProviderType, + token: this.token, + remember: this.remember, + }, + this.captchaToken + ); const response: AuthResult = await this.formPromise; const disableFavicon = await this.stateService.getDisableFavicon(); await this.stateService.setDisableFavicon(!!disableFavicon); + if (this.handleCaptchaRequired(response)) { + return; + } if (this.onSuccessfulLogin != null) { this.onSuccessfulLogin(); } diff --git a/common/src/abstractions/auth.service.ts b/common/src/abstractions/auth.service.ts index fddf5651..447ade6c 100644 --- a/common/src/abstractions/auth.service.ts +++ b/common/src/abstractions/auth.service.ts @@ -13,7 +13,10 @@ export abstract class AuthService { logIn: ( credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials ) => Promise; - logInTwoFactor: (twoFactor: TokenRequestTwoFactor) => Promise; + logInTwoFactor: ( + twoFactor: TokenRequestTwoFactor, + captchaResponse: string + ) => Promise; logOut: (callback: () => void) => void; makePreloginKey: (masterPassword: string, email: string) => Promise; authingWithApiKey: () => boolean; diff --git a/common/src/misc/logInStrategies/logIn.strategy.ts b/common/src/misc/logInStrategies/logIn.strategy.ts index 4bd25ac1..86bfa30b 100644 --- a/common/src/misc/logInStrategies/logIn.strategy.ts +++ b/common/src/misc/logInStrategies/logIn.strategy.ts @@ -27,6 +27,7 @@ import { IdentityTwoFactorResponse } from "../../models/response/identityTwoFact export abstract class LogInStrategy { protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest; + protected captchaBypassToken: string = null; constructor( protected cryptoService: CryptoService, @@ -44,7 +45,10 @@ export abstract class LogInStrategy { credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials ): Promise; - async logInTwoFactor(twoFactor: TokenRequestTwoFactor): Promise { + async logInTwoFactor( + twoFactor: TokenRequestTwoFactor, + captchaResponse: string = null + ): Promise { this.tokenRequest.setTwoFactor(twoFactor); return this.startLogIn(); } @@ -152,6 +156,7 @@ export abstract class LogInStrategy { const result = new AuthResult(); result.twoFactorProviders = response.twoFactorProviders2; this.twoFactorService.setProviders(response); + this.captchaBypassToken = response.captchaToken ?? null; return result; } diff --git a/common/src/misc/logInStrategies/passwordLogin.strategy.ts b/common/src/misc/logInStrategies/passwordLogin.strategy.ts index 78e1a317..6db930e6 100644 --- a/common/src/misc/logInStrategies/passwordLogin.strategy.ts +++ b/common/src/misc/logInStrategies/passwordLogin.strategy.ts @@ -9,9 +9,11 @@ import { StateService } from "../../abstractions/state.service"; import { TokenService } from "../../abstractions/token.service"; import { TwoFactorService } from "../../abstractions/twoFactor.service"; import { HashPurpose } from "../../enums/hashPurpose"; +import { AuthResult } from "../../models/domain/authResult"; import { PasswordLogInCredentials } from "../../models/domain/logInCredentials"; import { SymmetricCryptoKey } from "../../models/domain/symmetricCryptoKey"; import { PasswordTokenRequest } from "../../models/request/identityToken/passwordTokenRequest"; +import { TokenRequestTwoFactor } from "../../models/request/identityToken/tokenRequest"; import { LogInStrategy } from "./logIn.strategy"; @@ -59,6 +61,14 @@ export class PasswordLogInStrategy extends LogInStrategy { await this.cryptoService.setKeyHash(this.localHashedPassword); } + async logInTwoFactor( + twoFactor: TokenRequestTwoFactor, + captchaResponse: string + ): Promise { + this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken; + return super.logInTwoFactor(twoFactor); + } + async logIn(credentials: PasswordLogInCredentials) { const { email, masterPassword, captchaToken, twoFactor } = credentials; diff --git a/common/src/services/auth.service.ts b/common/src/services/auth.service.ts index 06ad640c..66f5340a 100644 --- a/common/src/services/auth.service.ts +++ b/common/src/services/auth.service.ts @@ -115,16 +115,19 @@ export class AuthService implements AuthServiceAbstraction { return result; } - async logInTwoFactor(twoFactor: TokenRequestTwoFactor): Promise { + async logInTwoFactor( + twoFactor: TokenRequestTwoFactor, + captchaResponse: string + ): Promise { if (this.logInStrategy == null) { throw new Error(this.i18nService.t("sessionTimeout")); } try { - const result = await this.logInStrategy.logInTwoFactor(twoFactor); + const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse); // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again - if (!result.requiresTwoFactor) { + if (!result.requiresTwoFactor && !result.requiresCaptcha) { this.clearState(); } return result; diff --git a/node/src/cli/commands/login.command.ts b/node/src/cli/commands/login.command.ts index 01df0cea..db6d0f61 100644 --- a/node/src/cli/commands/login.command.ts +++ b/node/src/cli/commands/login.command.ts @@ -24,6 +24,7 @@ import { PasswordLogInCredentials, SsoLogInCredentials, } from "jslib-common/models/domain/logInCredentials"; +import { TokenRequestTwoFactor } from "jslib-common/models/request/identityToken/tokenRequest"; import { TwoFactorEmailRequest } from "jslib-common/models/request/twoFactorEmailRequest"; import { UpdateTempPasswordRequest } from "jslib-common/models/request/updateTempPasswordRequest"; import { ErrorResponse } from "jslib-common/models/response/errorResponse"; @@ -69,6 +70,8 @@ export class LoginCommand { let clientId: string = null; let clientSecret: string = null; + let selectedProvider: any = null; + if (options.apikey != null) { const apiIdentifiers = await this.apiIdentifiers(); clientId = apiIdentifiers.clientId; @@ -177,39 +180,17 @@ export class LoginCommand { ); } if (response.captchaSiteKey) { - const badCaptcha = Response.badRequest( - "Your authentication request appears to be coming from a bot\n" + - "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + - "(https://bitwarden.com/help/cli-auth-challenges)" - ); + const credentials = new PasswordLogInCredentials(email, password); + const handledResponse = await this.handleCaptchaRequired(twoFactor, credentials); - try { - const captchaClientSecret = await this.apiClientSecret(true); - if (Utils.isNullOrWhitespace(captchaClientSecret)) { - return badCaptcha; - } - - const secondResponse = await this.authService.logIn( - new PasswordLogInCredentials(email, password, captchaClientSecret, { - provider: twoFactorMethod, - token: twoFactorToken, - remember: false, - }) - ); - response = secondResponse; - } catch (e) { - if ( - (e instanceof ErrorResponse || e.constructor.name === "ErrorResponse") && - (e as ErrorResponse).message.includes("Captcha is invalid") - ) { - return badCaptcha; - } else { - throw e; - } + // Error Response + if (handledResponse instanceof Response) { + return handledResponse; + } else { + response = handledResponse; } } if (response.requiresTwoFactor) { - let selectedProvider: any = null; const twoFactorProviders = this.twoFactorService.getSupportedProviders(null); if (twoFactorProviders.length === 0) { return Response.badRequest("No providers available for this client."); @@ -276,11 +257,30 @@ export class LoginCommand { } } - response = await this.authService.logInTwoFactor({ + response = await this.authService.logInTwoFactor( + { + provider: selectedProvider.type, + token: twoFactorToken, + remember: false, + }, + null + ); + } + + if (response.captchaSiteKey) { + const twoFactorRequest: TokenRequestTwoFactor = { provider: selectedProvider.type, token: twoFactorToken, remember: false, - }); + }; + const handledResponse = await this.handleCaptchaRequired(twoFactorRequest); + + // Error Response + if (handledResponse instanceof Response) { + return handledResponse; + } else { + response = handledResponse; + } } if (response.requiresTwoFactor) { @@ -435,6 +435,48 @@ export class LoginCommand { } } + private async handleCaptchaRequired( + twoFactorRequest: TokenRequestTwoFactor, + credentials: PasswordLogInCredentials = null + ): Promise { + const badCaptcha = Response.badRequest( + "Your authentication request has been flagged and will require user interaction to proceed.\n" + + "Please use your API key to validate this request and ensure BW_CLIENTSECRET is correct, if set.\n" + + "(https://bitwarden.com/help/cli-auth-challenges)" + ); + + try { + const captchaClientSecret = await this.apiClientSecret(true); + if (Utils.isNullOrWhitespace(captchaClientSecret)) { + return badCaptcha; + } + + let authResultResponse: AuthResult = null; + if (credentials != null) { + credentials.captchaToken = captchaClientSecret; + credentials.twoFactor = twoFactorRequest; + authResultResponse = await this.authService.logIn(credentials); + } else { + authResultResponse = await this.authService.logInTwoFactor( + twoFactorRequest, + captchaClientSecret + ); + } + + return authResultResponse; + } catch (e) { + if ( + e instanceof ErrorResponse || + (e.constructor.name === "ErrorResponse" && + (e as ErrorResponse).message.includes("Captcha is invalid")) + ) { + return badCaptcha; + } else { + return Response.error(e); + } + } + } + private getPasswordStrengthUserInput() { let userInput: string[] = []; const atPosition = this.email.indexOf("@"); diff --git a/spec/common/misc/logInStrategies/logIn.strategy.spec.ts b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts index 308091e9..49e36bb6 100644 --- a/spec/common/misc/logInStrategies/logIn.strategy.spec.ts +++ b/spec/common/misc/logInStrategies/logIn.strategy.spec.ts @@ -267,11 +267,14 @@ describe("LogInStrategy", () => { apiService.postIdentityToken(Arg.any()).resolves(identityTokenResponseFactory()); - await passwordLogInStrategy.logInTwoFactor({ - provider: twoFactorProviderType, - token: twoFactorToken, - remember: twoFactorRemember, - }); + await passwordLogInStrategy.logInTwoFactor( + { + provider: twoFactorProviderType, + token: twoFactorToken, + remember: twoFactorRemember, + }, + null + ); apiService.received(1).postIdentityToken( Arg.is((actual) => { From 8e112a1c33928cdd96206c9e167d045280826a93 Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Thu, 3 Mar 2022 15:22:05 +0100 Subject: [PATCH 110/120] Add importer for 1Password's new export format (.1pux) (#594) * Initial commit * Refactor the 1pux types * Add test data * 1Pux importer and tests * Fixed a typo in the 1Pux types * Make the linter happy * Register and instantiate importer * Fix adding secure notes * Add missing placeholder property to types * Test for existance of TOTP seed * Add more test data * Move processFullName into BaseImporter * Add categoryEnum for easier mapping * Refactoring of the importer and add support for different item types * Make linter happy * Modified some test data * Fix linting issues * Remove fieldvalue references comment * Remove commented mapping use during tests --- common/src/enums/importOptions.ts | 3 +- common/src/importers/baseImporter.ts | 17 + common/src/importers/nordpassCsvImporter.ts | 19 +- .../onepassword1PuxImporter.ts | 617 +++ .../types/onepassword1PuxImporterTypes.ts | 157 + common/src/services/import.service.ts | 3 + .../importers/onepassword1PuxImporter.spec.ts | 629 +++ .../onePassword1Pux/APICredentials.ts | 171 + .../testData/onePassword1Pux/BankAccount.ts | 226 + .../testData/onePassword1Pux/CreditCard.ts | 345 ++ .../testData/onePassword1Pux/Database.ts | 203 + .../onePassword1Pux/DriversLicense.ts | 235 + .../testData/onePassword1Pux/EmailAccount.ts | 343 ++ .../testData/onePassword1Pux/IdentityData.ts | 478 ++ .../testData/onePassword1Pux/LoginData.ts | 137 + .../testData/onePassword1Pux/MedicalRecord.ts | 200 + .../testData/onePassword1Pux/Membership.ts | 188 + .../onePassword1Pux/Onepux_example.ts | 95 + .../onePassword1Pux/OutdoorLicense.ts | 171 + .../testData/onePassword1Pux/Passport.ts | 236 + .../testData/onePassword1Pux/Password.ts | 60 + .../onePassword1Pux/RewardsProgram.ts | 211 + .../importers/testData/onePassword1Pux/SSN.ts | 91 + .../onePassword1Pux/SanitizedExport.ts | 4560 +++++++++++++++++ .../testData/onePassword1Pux/SecureNote.ts | 54 + .../testData/onePassword1Pux/Server.ts | 231 + .../onePassword1Pux/SoftwareLicense.ts | 285 ++ .../onePassword1Pux/WirelessRouter.ts | 184 + 28 files changed, 10130 insertions(+), 19 deletions(-) create mode 100644 common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts create mode 100644 common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts create mode 100644 spec/common/importers/onepassword1PuxImporter.spec.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/APICredentials.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/BankAccount.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/CreditCard.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Database.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/DriversLicense.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/EmailAccount.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/IdentityData.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/LoginData.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/MedicalRecord.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Membership.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Onepux_example.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/OutdoorLicense.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Passport.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Password.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/RewardsProgram.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/SSN.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/SanitizedExport.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/SecureNote.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/Server.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/SoftwareLicense.ts create mode 100644 spec/common/importers/testData/onePassword1Pux/WirelessRouter.ts diff --git a/common/src/enums/importOptions.ts b/common/src/enums/importOptions.ts index 5b690196..01773b60 100644 --- a/common/src/enums/importOptions.ts +++ b/common/src/enums/importOptions.ts @@ -12,11 +12,12 @@ export const featuredImportOptions = [ { id: "keepass2xml", name: "KeePass 2 (xml)" }, { id: "lastpasscsv", name: "LastPass (csv)" }, { id: "safaricsv", name: "Safari and macOS (csv)" }, - { id: "1password1pif", name: "1Password (1pif)" }, + { id: "1password1pux", name: "1Password (1pux)" }, ] as const; export const regularImportOptions = [ { id: "keepassxcsv", name: "KeePassX (csv)" }, + { id: "1password1pif", name: "1Password (1pif)" }, { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, { id: "roboformcsv", name: "RoboForm (csv)" }, diff --git a/common/src/importers/baseImporter.ts b/common/src/importers/baseImporter.ts index f24d1f19..122b3472 100644 --- a/common/src/importers/baseImporter.ts +++ b/common/src/importers/baseImporter.ts @@ -446,4 +446,21 @@ export abstract class BaseImporter { cipher.secureNote.type = SecureNoteType.Generic; } } + + protected processFullName(cipher: CipherView, fullName: string) { + if (this.isNullOrWhitespace(fullName)) { + return; + } + + const nameParts = fullName.split(" "); + if (nameParts.length > 0) { + cipher.identity.firstName = this.getValueOrDefault(nameParts[0]); + } + if (nameParts.length === 2) { + cipher.identity.lastName = this.getValueOrDefault(nameParts[1]); + } else if (nameParts.length >= 3) { + cipher.identity.middleName = this.getValueOrDefault(nameParts[1]); + cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(" "); + } + } } diff --git a/common/src/importers/nordpassCsvImporter.ts b/common/src/importers/nordpassCsvImporter.ts index cca0ef03..225e7ec2 100644 --- a/common/src/importers/nordpassCsvImporter.ts +++ b/common/src/importers/nordpassCsvImporter.ts @@ -72,7 +72,7 @@ export class NordPassCsvImporter extends BaseImporter implements Importer { case CipherType.Identity: cipher.type = CipherType.Identity; - this.processName(cipher, this.getValueOrDefault(record.full_name)); + this.processFullName(cipher, this.getValueOrDefault(record.full_name)); cipher.identity.address1 = this.getValueOrDefault(record.address1); cipher.identity.address2 = this.getValueOrDefault(record.address2); cipher.identity.city = this.getValueOrDefault(record.city); @@ -124,21 +124,4 @@ export class NordPassCsvImporter extends BaseImporter implements Importer { return undefined; } - - private processName(cipher: CipherView, fullName: string) { - if (this.isNullOrWhitespace(fullName)) { - return; - } - - const nameParts = fullName.split(" "); - if (nameParts.length > 0) { - cipher.identity.firstName = this.getValueOrDefault(nameParts[0]); - } - if (nameParts.length === 2) { - cipher.identity.lastName = this.getValueOrDefault(nameParts[1]); - } else if (nameParts.length >= 3) { - cipher.identity.middleName = this.getValueOrDefault(nameParts[1]); - cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(" "); - } - } } diff --git a/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts b/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts new file mode 100644 index 00000000..ad30100f --- /dev/null +++ b/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts @@ -0,0 +1,617 @@ +import { CipherRepromptType } from "../../enums/cipherRepromptType"; +import { CipherType } from "../../enums/cipherType"; +import { FieldType } from "../../enums/fieldType"; +import { SecureNoteType } from "../../enums/secureNoteType"; +import { ImportResult } from "../../models/domain/importResult"; +import { CardView } from "../../models/view/cardView"; +import { CipherView } from "../../models/view/cipherView"; +import { IdentityView } from "../../models/view/identityView"; +import { LoginView } from "../../models/view/loginView"; +import { PasswordHistoryView } from "../../models/view/passwordHistoryView"; +import { SecureNoteView } from "../../models/view/secureNoteView"; +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; + +import { + CategoryEnum, + Details, + ExportData, + FieldsEntity, + Item, + ItemCollection, + LoginFieldTypeEnum, + Overview, + PasswordHistoryEntity, + SectionsEntity, + UrlsEntity, + Value, + VaultsEntity, +} from "./types/onepassword1PuxImporterTypes"; + +export class OnePassword1PuxImporter extends BaseImporter implements Importer { + result = new ImportResult(); + + parse(data: string): Promise { + const exportData: ExportData = JSON.parse(data); + + const account = exportData.accounts[0]; + // TODO Add handling of multiple vaults + // const personalVaults = account.vaults[0].filter((v) => v.attrs.type === VaultAttributeTypeEnum.Personal); + account.vaults.forEach((vault: VaultsEntity) => { + vault.items.forEach((itemCollection: ItemCollection) => { + const item: Item = itemCollection.item; + if (item.trashed === true) { + return; + } + + const cipher = this.initLoginCipher(); + + const category = item.categoryUuid as CategoryEnum; + switch (category) { + case CategoryEnum.Login: + case CategoryEnum.Database: + case CategoryEnum.Password: + case CategoryEnum.WirelessRouter: + case CategoryEnum.Server: + case CategoryEnum.API_Credential: + cipher.type = CipherType.Login; + cipher.login = new LoginView(); + break; + case CategoryEnum.CreditCard: + case CategoryEnum.BankAccount: + cipher.type = CipherType.Card; + cipher.card = new CardView(); + break; + case CategoryEnum.SecureNote: + case CategoryEnum.SoftwareLicense: + case CategoryEnum.EmailAccount: + case CategoryEnum.MedicalRecord: + // case CategoryEnum.Document: + cipher.type = CipherType.SecureNote; + cipher.secureNote = new SecureNoteView(); + cipher.secureNote.type = SecureNoteType.Generic; + break; + case CategoryEnum.Identity: + case CategoryEnum.DriversLicense: + case CategoryEnum.OutdoorLicense: + case CategoryEnum.Membership: + case CategoryEnum.Passport: + case CategoryEnum.RewardsProgram: + case CategoryEnum.SocialSecurityNumber: + cipher.type = CipherType.Identity; + cipher.identity = new IdentityView(); + break; + default: + break; + } + + cipher.favorite = item.favIndex === 1 ? true : false; + + this.processOverview(item.overview, cipher); + + this.processLoginFields(item, cipher); + + this.processDetails(category, item.details, cipher); + + this.parsePasswordHistory(item.details.passwordHistory, cipher); + + this.processSections(category, item.details.sections, cipher); + + if (!this.isNullOrWhitespace(item.details.notesPlain)) { + cipher.notes = item.details.notesPlain.split(this.newLineRegex).join("\n") + "\n"; + } + + this.convertToNoteIfNeeded(cipher); + this.cleanupCipher(cipher); + this.result.ciphers.push(cipher); + }); + }); + + if (this.organization) { + this.moveFoldersToCollections(this.result); + } + + this.result.success = true; + return Promise.resolve(this.result); + } + + private processOverview(overview: Overview, cipher: CipherView) { + if (overview == null) { + return; + } + + cipher.name = this.getValueOrDefault(overview.title); + + if (overview.urls != null) { + const urls: string[] = []; + overview.urls.forEach((url: UrlsEntity) => { + if (!this.isNullOrWhitespace(url.url)) { + urls.push(url.url); + } + }); + cipher.login.uris = this.makeUriArray(urls); + } + + if (overview.tags != null && overview.tags.length > 0) { + const folderName = this.capitalize(overview.tags[0]); + this.processFolder(this.result, folderName); + } + } + + private capitalize(inputString: string): string { + return inputString.trim().replace(/\w\S*/g, (w) => w.replace(/^\w/, (c) => c.toUpperCase())); + } + + private processLoginFields(item: Item, cipher: CipherView) { + if (item.details == null) { + return; + } + + if (item.details.loginFields == null || item.details.loginFields.length === 0) { + return; + } + + item.details.loginFields.forEach((loginField) => { + if (loginField.designation === "username" && loginField.value !== "") { + cipher.type = CipherType.Login; + cipher.login.username = loginField.value; + return; + } + + if (loginField.designation === "password" && loginField.value !== "") { + cipher.type = CipherType.Login; + cipher.login.password = loginField.value; + return; + } + + let fieldValue = loginField.value; + let fieldType: FieldType = FieldType.Text; + switch (loginField.fieldType) { + case LoginFieldTypeEnum.Password: + fieldType = FieldType.Hidden; + break; + case LoginFieldTypeEnum.CheckBox: + fieldValue = loginField.value !== "" ? "true" : "false"; + fieldType = FieldType.Boolean; + break; + default: + break; + } + this.processKvp(cipher, loginField.name, fieldValue, fieldType); + }); + } + + private processDetails(category: CategoryEnum, details: Details, cipher: CipherView) { + if (category !== CategoryEnum.Password) { + return; + } + + if (details == null) { + return; + } + cipher.login.password = details.password; + } + + private processSections(category: CategoryEnum, sections: SectionsEntity[], cipher: CipherView) { + if (sections == null || sections.length === 0) { + return; + } + + sections.forEach((section: SectionsEntity) => { + if (section.fields == null) { + return; + } + + this.parseSectionFields(category, section.fields, cipher); + }); + } + + private parseSectionFields(category: CategoryEnum, fields: FieldsEntity[], cipher: CipherView) { + fields.forEach((field: FieldsEntity) => { + const valueKey = Object.keys(field.value)[0]; + const anyField = field as any; + + if ( + anyField.value == null || + anyField.value[valueKey] == null || + anyField.value[valueKey] === "" + ) { + return; + } + + const fieldName = this.getFieldName(field.id, field.title); + const fieldValue = this.extractValue(field.value, valueKey); + + if (cipher.type === CipherType.Login) { + if (this.fillLogin(field, fieldValue, cipher)) { + return; + } + + switch (category) { + case CategoryEnum.Login: + case CategoryEnum.Database: + case CategoryEnum.EmailAccount: + case CategoryEnum.WirelessRouter: + break; + + case CategoryEnum.Server: + if (this.isNullOrWhitespace(cipher.login.uri) && field.id === "url") { + cipher.login.uris = this.makeUriArray(fieldValue); + return; + } + break; + + case CategoryEnum.API_Credential: + if (this.fillApiCredentials(field, fieldValue, cipher)) { + return; + } + break; + default: + break; + } + } else if (cipher.type === CipherType.Card) { + if (this.fillCreditCard(field, fieldValue, cipher)) { + return; + } + + if (category === CategoryEnum.BankAccount) { + if (this.fillBankAccount(field, fieldValue, cipher)) { + return; + } + } + } else if (cipher.type === CipherType.Identity) { + if (this.fillIdentity(field, fieldValue, cipher)) { + return; + } + if (valueKey === "address") { + // fieldValue is an object casted into a string, so access the plain value instead + const { street, city, country, zip, state } = field.value.address; + cipher.identity.address1 = this.getValueOrDefault(street); + cipher.identity.city = this.getValueOrDefault(city); + if (!this.isNullOrWhitespace(country)) { + cipher.identity.country = country.toUpperCase(); + } + cipher.identity.postalCode = this.getValueOrDefault(zip); + cipher.identity.state = this.getValueOrDefault(state); + return; + } + + switch (category) { + case CategoryEnum.Identity: + break; + case CategoryEnum.DriversLicense: + if (this.fillDriversLicense(field, fieldValue, cipher)) { + return; + } + break; + case CategoryEnum.OutdoorLicense: + if (this.fillOutdoorLicense(field, fieldValue, cipher)) { + return; + } + break; + case CategoryEnum.Membership: + if (this.fillMembership(field, fieldValue, cipher)) { + return; + } + break; + case CategoryEnum.Passport: + if (this.fillPassport(field, fieldValue, cipher)) { + return; + } + break; + case CategoryEnum.RewardsProgram: + if (this.fillRewardsProgram(field, fieldValue, cipher)) { + return; + } + break; + case CategoryEnum.SocialSecurityNumber: + if (this.fillSSN(field, fieldValue, cipher)) { + return; + } + break; + default: + break; + } + } + + // Do not include a password field if it's already in the history + if ( + field.title === "password" && + cipher.passwordHistory != null && + cipher.passwordHistory.some((h) => h.password === fieldValue) + ) { + return; + } + + // TODO ?? If one of the fields is marked as guarded, then activate Password-Reprompt for the entire item + if (field.guarded && cipher.reprompt === CipherRepromptType.None) { + cipher.reprompt = CipherRepromptType.Password; + } + + const fieldType = valueKey === "concealed" ? FieldType.Hidden : FieldType.Text; + this.processKvp(cipher, fieldName, fieldValue, fieldType); + }); + } + + private getFieldName(id: string, title: string): string { + if (this.isNullOrWhitespace(title)) { + return id; + } + + // Naive approach of checking if the fields id is usable + if (id.length > 25 && RegExp(/[0-9]{2}[A-Z]{2}/, "i").test(id)) { + return title; + } + return id; + } + + private extractValue(value: Value, valueKey: string): string { + if (valueKey === "date") { + return new Date(value.date * 1000).toUTCString(); + } + + if (valueKey === "monthYear") { + return value.monthYear.toString(); + } + + return (value as any)[valueKey]; + } + + private fillLogin(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + const fieldName = this.getFieldName(field.id, field.title); + + if (this.isNullOrWhitespace(cipher.login.username) && fieldName === "username") { + cipher.login.username = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.login.password) && fieldName === "password") { + cipher.login.password = fieldValue; + return true; + } + + if ( + this.isNullOrWhitespace(cipher.login.totp) && + field.id != null && + field.id.startsWith("TOTP_") + ) { + cipher.login.totp = fieldValue; + return true; + } + + return false; + } + + private fillApiCredentials(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + const fieldName = this.getFieldName(field.id, field.title); + + if (this.isNullOrWhitespace(cipher.login.password) && fieldName === "credential") { + cipher.login.password = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.login.uri) && fieldName === "hostname") { + cipher.login.uris = this.makeUriArray(fieldValue); + return true; + } + + return false; + } + + private fillCreditCard(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.card.number) && field.id === "ccnum") { + cipher.card.number = fieldValue; + cipher.card.brand = this.getCardBrand(fieldValue); + return true; + } + + if (this.isNullOrWhitespace(cipher.card.code) && field.id === "cvv") { + cipher.card.code = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === "cardholder") { + cipher.card.cardholderName = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.card.expiration) && field.id === "expiry") { + const monthYear: string = fieldValue.toString().trim(); + cipher.card.expMonth = monthYear.substring(4, 6); + if (cipher.card.expMonth[0] === "0") { + cipher.card.expMonth = cipher.card.expMonth.substring(1, 2); + } + cipher.card.expYear = monthYear.substring(0, 4); + return true; + } + + if (field.id === "type") { + // Skip since brand was determined from number above + return true; + } + + return false; + } + + private fillBankAccount(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === "owner") { + cipher.card.cardholderName = fieldValue; + return true; + } + + return false; + } + + private fillIdentity(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "firstname") { + cipher.identity.firstName = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.lastName) && field.id === "lastname") { + cipher.identity.lastName = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.middleName) && field.id === "initial") { + cipher.identity.middleName = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === "defphone") { + cipher.identity.phone = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.company) && field.id === "company") { + cipher.identity.company = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.email) && field.id === "email") { + cipher.identity.email = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.username) && field.id === "username") { + cipher.identity.username = fieldValue; + return true; + } + return false; + } + + private fillDriversLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "fullname") { + this.processFullName(cipher, fieldValue); + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.address1) && field.id === "address") { + cipher.identity.address1 = fieldValue; + return true; + } + + // TODO ISO code + if (this.isNullOrWhitespace(cipher.identity.country) && field.id === "country") { + cipher.identity.country = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.state) && field.id === "state") { + cipher.identity.state = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.licenseNumber) && field.id === "number") { + cipher.identity.licenseNumber = fieldValue; + return true; + } + + return false; + } + + private fillOutdoorLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "name") { + this.processFullName(cipher, fieldValue); + return true; + } + + // TODO ISO code + if (this.isNullOrWhitespace(cipher.identity.country) && field.id === "country") { + cipher.identity.country = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.state) && field.id === "state") { + cipher.identity.state = fieldValue; + return true; + } + + return false; + } + + private fillMembership(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "member_name") { + this.processFullName(cipher, fieldValue); + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.company) && field.id === "org_name") { + cipher.identity.company = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === "phone") { + cipher.identity.phone = fieldValue; + return true; + } + + return false; + } + + private fillPassport(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "fullname") { + this.processFullName(cipher, fieldValue); + return true; + } + + // TODO Iso + if (this.isNullOrWhitespace(cipher.identity.country) && field.id === "issuing_country") { + cipher.identity.country = fieldValue; + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.passportNumber) && field.id === "number") { + cipher.identity.passportNumber = fieldValue; + return true; + } + + return false; + } + + private fillRewardsProgram(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "member_name") { + this.processFullName(cipher, fieldValue); + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.company) && field.id === "company_name") { + cipher.identity.company = fieldValue; + return true; + } + + return false; + } + + private fillSSN(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean { + if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === "name") { + this.processFullName(cipher, fieldValue); + return true; + } + + if (this.isNullOrWhitespace(cipher.identity.ssn) && field.id === "number") { + cipher.identity.ssn = fieldValue; + return true; + } + + return false; + } + + private parsePasswordHistory(historyItems: PasswordHistoryEntity[], cipher: CipherView) { + if (historyItems == null || historyItems.length === 0) { + return; + } + + const maxSize = historyItems.length > 5 ? 5 : historyItems.length; + cipher.passwordHistory = historyItems + .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null) + .sort((a, b) => b.time - a.time) + .slice(0, maxSize) + .map((h: any) => { + const ph = new PasswordHistoryView(); + ph.password = h.value; + ph.lastUsedDate = new Date(("" + h.time).length >= 13 ? h.time : h.time * 1000); + return ph; + }); + } +} diff --git a/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts b/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts new file mode 100644 index 00000000..eaefcd86 --- /dev/null +++ b/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts @@ -0,0 +1,157 @@ +export interface ExportData { + accounts?: AccountsEntity[] | null; +} +export interface AccountsEntity { + attrs: AccountAttributes; + vaults?: VaultsEntity[] | null; +} +export interface AccountAttributes { + accountName: string; + name: string; + avatar: string; + email: string; + uuid: string; + domain: string; +} +export interface VaultsEntity { + attrs: VaultAttributes; + items?: ItemCollection[] | null; +} +export interface VaultAttributes { + uuid: string; + desc: string; + avatar: string; + name: string; + type: string; +} +export interface ItemCollection { + item: Item; +} + +export enum CategoryEnum { + Login = "001", + CreditCard = "002", + SecureNote = "003", + Identity = "004", + Password = "005", + Document = "006", + SoftwareLicense = "100", + BankAccount = "101", + Database = "102", + DriversLicense = "103", + OutdoorLicense = "104", + Membership = "105", + Passport = "106", + RewardsProgram = "107", + SocialSecurityNumber = "108", + WirelessRouter = "109", + Server = "110", + EmailAccount = "111", + API_Credential = "112", + MedicalRecord = "113", +} + +export interface Item { + uuid: string; + favIndex: number; + createdAt: number; + updatedAt: number; + trashed: boolean; + categoryUuid: string; + details: Details; + overview: Overview; +} +export interface Details { + loginFields?: (LoginFieldsEntity | null)[] | null; + notesPlain?: string | null; + sections?: (SectionsEntity | null)[] | null; + passwordHistory?: (PasswordHistoryEntity | null)[] | null; + documentAttributes?: DocumentAttributes | null; + password?: string | null; +} + +export enum LoginFieldTypeEnum { + TextOrHtml = "T", + EmailAddress = "E", + URL = "U", + Number = "N", + Password = "P", + TextArea = "A", + PhoneNumber = "T", + CheckBox = "C", +} +export interface LoginFieldsEntity { + value: string; + id: string; + name: string; + fieldType: LoginFieldTypeEnum | string; + designation?: string | null; +} +export interface SectionsEntity { + title: string; + name?: string | null; + fields?: FieldsEntity[] | null; +} +export interface FieldsEntity { + title: string; + id: string; + value: Value; + indexAtSource: number; + guarded: boolean; + multiline: boolean; + dontGenerate: boolean; + placeholder?: string; + inputTraits: InputTraits; + clipboardFilter?: string | null; +} +export interface Value { + totp?: string | null; + date?: number | null; + string?: string | null; + concealed?: string | null; + email?: string | null; + phone?: string | null; + menu?: string | null; + gender?: string | null; + monthYear?: number | null; + url?: string | null; + address?: Address | null; + creditCardType?: string | null; + creditCardNumber?: string | null; + reference?: string | null; +} +export interface Address { + street: string; + city: string; + country: string; + zip: string; + state: string; +} +export interface InputTraits { + keyboard: string; + correction: string; + capitalization: string; +} +export interface PasswordHistoryEntity { + value: string; + time: number; +} +export interface DocumentAttributes { + fileName: string; + documentId: string; + decryptedSize: number; +} +export interface Overview { + subtitle: string; + title: string; + url: string; + urls?: UrlsEntity[] | null; + ps?: number | null; + pbe?: number | null; + pgrng?: boolean | null; + tags?: string[] | null; +} +export interface UrlsEntity { + label: string; + url: string; +} diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 3913074d..1a59b20a 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -46,6 +46,7 @@ import { MSecureCsvImporter } from "../importers/msecureCsvImporter"; import { MykiCsvImporter } from "../importers/mykiCsvImporter"; import { NordPassCsvImporter } from "../importers/nordpassCsvImporter"; import { OnePassword1PifImporter } from "../importers/onepasswordImporters/onepassword1PifImporter"; +import { OnePassword1PuxImporter } from "../importers/onepasswordImporters/onepassword1PuxImporter"; import { OnePasswordMacCsvImporter } from "../importers/onepasswordImporters/onepasswordMacCsvImporter"; import { OnePasswordWinCsvImporter } from "../importers/onepasswordImporters/onepasswordWinCsvImporter"; import { PadlockCsvImporter } from "../importers/padlockCsvImporter"; @@ -199,6 +200,8 @@ export class ImportService implements ImportServiceAbstraction { return new MeldiumCsvImporter(); case "1password1pif": return new OnePassword1PifImporter(); + case "1password1pux": + return new OnePassword1PuxImporter(); case "1passwordwincsv": return new OnePasswordWinCsvImporter(); case "1passwordmaccsv": diff --git a/spec/common/importers/onepassword1PuxImporter.spec.ts b/spec/common/importers/onepassword1PuxImporter.spec.ts new file mode 100644 index 00000000..84ab8f25 --- /dev/null +++ b/spec/common/importers/onepassword1PuxImporter.spec.ts @@ -0,0 +1,629 @@ +import { CipherType } from "jslib-common/enums/cipherType"; +import { FieldType } from "jslib-common/enums/fieldType"; +import { SecureNoteType } from "jslib-common/enums/secureNoteType"; +import { OnePassword1PuxImporter as Importer } from "jslib-common/importers/onepasswordImporters/onepassword1PuxImporter"; +import { Utils } from "jslib-common/misc/utils"; +import { FieldView } from "jslib-common/models/view/fieldView"; + +import { APICredentialsData } from "./testData/onePassword1Pux/APICredentials"; +import { BankAccountData } from "./testData/onePassword1Pux/BankAccount"; +import { CreditCardData } from "./testData/onePassword1Pux/CreditCard"; +import { DatabaseData } from "./testData/onePassword1Pux/Database"; +import { DriversLicenseData } from "./testData/onePassword1Pux/DriversLicense"; +import { EmailAccountData } from "./testData/onePassword1Pux/EmailAccount"; +import { IdentityData } from "./testData/onePassword1Pux/IdentityData"; +import { LoginData } from "./testData/onePassword1Pux/LoginData"; +import { MedicalRecordData } from "./testData/onePassword1Pux/MedicalRecord"; +import { MembershipData } from "./testData/onePassword1Pux/Membership"; +import { OnePuxExampleFile } from "./testData/onePassword1Pux/Onepux_example"; +import { OutdoorLicenseData } from "./testData/onePassword1Pux/OutdoorLicense"; +import { PassportData } from "./testData/onePassword1Pux/Passport"; +import { PasswordData } from "./testData/onePassword1Pux/Password"; +import { RewardsProgramData } from "./testData/onePassword1Pux/RewardsProgram"; +import { SSNData } from "./testData/onePassword1Pux/SSN"; +import { SanitizedExport } from "./testData/onePassword1Pux/SanitizedExport"; +import { SecureNoteData } from "./testData/onePassword1Pux/SecureNote"; +import { ServerData } from "./testData/onePassword1Pux/Server"; +import { SoftwareLicenseData } from "./testData/onePassword1Pux/SoftwareLicense"; +import { WirelessRouterData } from "./testData/onePassword1Pux/WirelessRouter"; + +function validateCustomField(fields: FieldView[], fieldName: string, expectedValue: any) { + expect(fields).toBeDefined(); + const customField = fields.find((f) => f.name === fieldName); + expect(customField).withContext(`CustomField: ('${fieldName}') was not found`).toBeDefined(); + + expect(customField.value) + .withContext(`Customfield: ('${fieldName}'), should be equal to: '${expectedValue}'`) + .toEqual(expectedValue); +} + +describe("1Password 1Pux Importer", async () => { + const OnePuxExampleFileJson = JSON.stringify(OnePuxExampleFile); + const LoginDataJson = JSON.stringify(LoginData); + const CreditCardDataJson = JSON.stringify(CreditCardData); + const IdentityDataJson = JSON.stringify(IdentityData); + const SecureNoteDataJson = JSON.stringify(SecureNoteData); + const SanitizedExportJson = JSON.stringify(SanitizedExport); + + it("should parse login data", async () => { + const importer = new Importer(); + const result = await importer.parse(LoginDataJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("eToro"); + + expect(cipher.login.username).toEqual("username123123123@gmail.com"); + expect(cipher.login.password).toEqual("password!"); + expect(cipher.login.uris.length).toEqual(1); + expect(cipher.login.uri).toEqual("https://www.fakesite.com"); + expect(cipher.login.totp).toEqual("otpseed777"); + + // remaining fields as custom fields + expect(cipher.fields.length).toEqual(3); + validateCustomField(cipher.fields, "terms", "false"); + validateCustomField(cipher.fields, "policies", "true"); + validateCustomField(cipher.fields, "cyqyggt2otns6tbbqtsl6w2ceu", "username123123"); + }); + + it("should parse notes", async () => { + const importer = new Importer(); + const result = await importer.parse(OnePuxExampleFileJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.notes).toEqual("This is a note. *bold*! _italic_!"); + }); + + it("should set favourite if favIndex equals 1", async () => { + const importer = new Importer(); + const result = await importer.parse(OnePuxExampleFileJson); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.favorite).toBeTrue(); + }); + + it("should handle custom boolean fields", async () => { + const importer = new Importer(); + const result = await importer.parse(LoginDataJson); + expect(result != null).toBe(true); + + const ciphers = result.ciphers; + expect(ciphers.length).toEqual(1); + + const cipher = ciphers.shift(); + expect(cipher.fields[0].name).toEqual("terms"); + expect(cipher.fields[0].value).toEqual("false"); + expect(cipher.fields[0].type).toBe(FieldType.Boolean); + + expect(cipher.fields[1].name).toEqual("policies"); + expect(cipher.fields[1].value).toEqual("true"); + expect(cipher.fields[1].type).toBe(FieldType.Boolean); + }); + + it('should create concealed field as "hidden" type', async () => { + const importer = new Importer(); + const result = await importer.parse(OnePuxExampleFileJson); + expect(result != null).toBe(true); + + const ciphers = result.ciphers; + expect(ciphers.length).toEqual(1); + + const cipher = ciphers.shift(); + const fields = cipher.fields; + expect(fields.length).toEqual(1); + + const field = fields.shift(); + expect(field.name).toEqual("PIN"); + expect(field.value).toEqual("12345"); + expect(field.type).toEqual(FieldType.Hidden); + }); + + it("should create password history", async () => { + const importer = new Importer(); + const result = await importer.parse(OnePuxExampleFileJson); + const cipher = result.ciphers.shift(); + + expect(cipher.passwordHistory.length).toEqual(1); + const ph = cipher.passwordHistory.shift(); + expect(ph.password).toEqual("12345password"); + expect(ph.lastUsedDate.toISOString()).toEqual("2016-03-18T17:32:35.000Z"); + }); + + it("should create credit card records", async () => { + const importer = new Importer(); + const result = await importer.parse(CreditCardDataJson); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("Parent's Credit Card"); + expect(cipher.notes).toEqual("My parents' credit card."); + + const card = cipher.card; + expect(card.cardholderName).toEqual("Fred Engels"); + expect(card.number).toEqual("6011111111111117"); + expect(card.code).toEqual("1312"); + expect(card.brand).toEqual("Discover"); + expect(card.expMonth).toEqual("12"); + expect(card.expYear).toEqual("2099"); + + // remaining fields as custom fields + expect(cipher.fields.length).toEqual(12); + validateCustomField(cipher.fields, "txbzvwzpck7ejhfres3733rbpm", "card"); + validateCustomField(cipher.fields, "cashLimit", "$500"); + validateCustomField(cipher.fields, "creditLimit", "$1312"); + validateCustomField(cipher.fields, "validFrom", "200101"); + validateCustomField(cipher.fields, "bank", "Some bank"); + validateCustomField(cipher.fields, "phoneLocal", "123456"); + validateCustomField(cipher.fields, "phoneTollFree", "0800123456"); + validateCustomField(cipher.fields, "phoneIntl", "+49123456"); + validateCustomField(cipher.fields, "website", "somebank.com"); + validateCustomField(cipher.fields, "pin", "1234"); + validateCustomField(cipher.fields, "interest", "1%"); + validateCustomField(cipher.fields, "issuenumber", "123456"); + }); + + it("should create identity records", async () => { + const importer = new Importer(); + const result = await importer.parse(IdentityDataJson); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("George Engels"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("George"); + expect(identity.middleName).toEqual("S"); + expect(identity.lastName).toEqual("Engels"); + expect(identity.company).toEqual("Acme Inc."); + expect(identity.address1).toEqual("1312 Main St."); + expect(identity.country).toEqual("US"); + expect(identity.state).toEqual("California"); + expect(identity.city).toEqual("Atlantis"); + expect(identity.postalCode).toEqual("90210"); + expect(identity.phone).toEqual("4565555555"); + expect(identity.email).toEqual("gengels@nullvalue.test"); + expect(identity.username).toEqual("gengels"); + + // remaining fields as custom fields + expect(cipher.fields.length).toEqual(17); + validateCustomField(cipher.fields, "sex", "male"); + validateCustomField(cipher.fields, "birthdate", "Thu, 01 Jan 1981 12:01:00 GMT"); + validateCustomField(cipher.fields, "occupation", "Steel Worker"); + validateCustomField(cipher.fields, "department", "QA"); + validateCustomField(cipher.fields, "jobtitle", "Quality Assurance Manager"); + validateCustomField(cipher.fields, "homephone", "4575555555"); + validateCustomField(cipher.fields, "cellphone", "4585555555"); + validateCustomField(cipher.fields, "busphone", "4595555555"); + validateCustomField(cipher.fields, "reminderq", "Who's a super cool guy?"); + validateCustomField(cipher.fields, "remindera", "Me, buddy."); + validateCustomField(cipher.fields, "website", "cv.gengels.nullvalue.test"); + validateCustomField(cipher.fields, "icq", "12345678"); + validateCustomField(cipher.fields, "skype", "skypeisbad1619"); + validateCustomField(cipher.fields, "aim", "aollol@lololol.aol.com"); + validateCustomField(cipher.fields, "yahoo", "sk8rboi13@yah00.com"); + validateCustomField(cipher.fields, "msn", "msnothankyou@msn&m&m.com"); + validateCustomField(cipher.fields, "forumsig", "super cool guy"); + }); + + it("should parse category 005 - Password (Legacy)", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(PasswordData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("SuperSecret Password"); + expect(cipher.notes).toEqual("SuperSecret Password Notes"); + + expect(cipher.login.password).toEqual("GBq[AGb]4*Si3tjwuab^"); + expect(cipher.login.uri).toEqual("https://n0t.y0ur.n0rm4l.w3bs1t3"); + }); + + it("should parse category 100 - SoftwareLicense", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(SoftwareLicenseData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.type).toEqual(CipherType.SecureNote); + expect(cipher.name).toEqual("Limux Product Key"); + expect(cipher.notes).toEqual("My Software License"); + + expect(cipher.fields.length).toEqual(13); + validateCustomField(cipher.fields, "product_version", "5.10.1000"); + validateCustomField(cipher.fields, "reg_code", "265453-13457355-847327"); + validateCustomField(cipher.fields, "reg_name", "Kay Riddler"); + validateCustomField(cipher.fields, "reg_email", "kriddler@nullvalue.test"); + validateCustomField(cipher.fields, "company", "Riddles and Jigsaw Puzzles GmbH"); + validateCustomField( + cipher.fields, + "download_link", + "https://limuxcompany.nullvalue.test/5.10.1000/isos" + ); + validateCustomField(cipher.fields, "publisher_name", "Limux Software and Hardware"); + validateCustomField(cipher.fields, "publisher_website", "https://limuxcompany.nullvalue.test/"); + validateCustomField(cipher.fields, "retail_price", "$999"); + validateCustomField(cipher.fields, "support_email", "support@nullvalue.test"); + validateCustomField(cipher.fields, "order_date", "Thu, 01 Apr 2021 12:01:00 GMT"); + validateCustomField(cipher.fields, "order_number", "594839"); + validateCustomField(cipher.fields, "order_total", "$1086.59"); + }); + + it("should parse category 101 - BankAccount", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(BankAccountData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.type).toEqual(CipherType.Card); + expect(cipher.name).toEqual("Bank Account"); + expect(cipher.notes).toEqual("My Bank Account"); + + expect(cipher.card.cardholderName).toEqual("Cool Guy"); + + expect(cipher.fields.length).toEqual(9); + validateCustomField(cipher.fields, "bankName", "Super Credit Union"); + validateCustomField(cipher.fields, "accountType", "checking"); + validateCustomField(cipher.fields, "routingNo", "111000999"); + validateCustomField(cipher.fields, "accountNo", "192837465918273645"); + validateCustomField(cipher.fields, "swift", "123456"); + validateCustomField(cipher.fields, "iban", "DE12 123456"); + validateCustomField(cipher.fields, "telephonePin", "5555"); + validateCustomField(cipher.fields, "branchPhone", "9399399933"); + validateCustomField(cipher.fields, "branchAddress", "1 Fifth Avenue"); + }); + + it("should parse category 102 - Database", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(DatabaseData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("Database"); + expect(cipher.notes).toEqual("My Database"); + + const login = cipher.login; + expect(login.username).toEqual("cooldbuser"); + expect(login.password).toEqual("^+kTjhLaN7wVPAhGU)*J"); + + expect(cipher.fields.length).toEqual(7); + validateCustomField(cipher.fields, "database_type", "postgresql"); + validateCustomField(cipher.fields, "hostname", "my.secret.db.server"); + validateCustomField(cipher.fields, "port", "1337"); + validateCustomField(cipher.fields, "database", "user_database"); + validateCustomField(cipher.fields, "sid", "ASDIUFU-283234"); + validateCustomField(cipher.fields, "alias", "cdbu"); + validateCustomField(cipher.fields, "options", "ssh"); + }); + + it("should parse category 103 - Drivers license", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(DriversLicenseData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("Michael Scarn"); + expect(cipher.subTitle).toEqual("Michael Scarn"); + expect(cipher.notes).toEqual("My Driver's License"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("Michael"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Scarn"); + expect(identity.address1).toEqual("2120 Mifflin Rd."); + expect(identity.state).toEqual("Pennsylvania"); + expect(identity.country).toEqual("United States"); + expect(identity.licenseNumber).toEqual("12345678901"); + + expect(cipher.fields.length).toEqual(6); + validateCustomField(cipher.fields, "birthdate", "Sun, 01 Jan 1978 12:01:00 GMT"); + validateCustomField(cipher.fields, "sex", "male"); + validateCustomField(cipher.fields, "height", "5'11\""); + validateCustomField(cipher.fields, "class", "C"); + validateCustomField(cipher.fields, "conditions", "B"); + validateCustomField(cipher.fields, "expiry_date", "203012"); + }); + + it("should parse category 104 - Outdoor License", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(OutdoorLicenseData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Identity); + expect(cipher.name).toEqual("Harvest License"); + expect(cipher.subTitle).toEqual("Cash Bandit"); + expect(cipher.notes).toEqual("My Outdoor License"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("Cash"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Bandit"); + expect(identity.state).toEqual("Washington"); + expect(identity.country).toEqual("United States of America"); + + expect(cipher.fields.length).toEqual(4); + validateCustomField(cipher.fields, "valid_from", "Thu, 01 Apr 2021 12:01:00 GMT"); + validateCustomField(cipher.fields, "expires", "Fri, 01 Apr 2044 12:01:00 GMT"); + validateCustomField(cipher.fields, "game", "Bananas,blueberries,corn"); + validateCustomField(cipher.fields, "quota", "100/each"); + }); + + it("should parse category 105 - Membership", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(MembershipData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Identity); + expect(cipher.name).toEqual("Library Card"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("George"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Engels"); + expect(identity.company).toEqual("National Public Library"); + expect(identity.phone).toEqual("9995555555"); + + expect(cipher.fields.length).toEqual(5); + validateCustomField(cipher.fields, "website", "https://npl.nullvalue.gov.test"); + validateCustomField(cipher.fields, "member_since", "199901"); + validateCustomField(cipher.fields, "expiry_date", "203412"); + validateCustomField(cipher.fields, "membership_no", "64783862"); + validateCustomField(cipher.fields, "pin", "19191"); + }); + + it("should parse category 106 - Passport", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(PassportData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Identity); + expect(cipher.name).toEqual("Mr. Globewide"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("David"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Global"); + expect(identity.passportNumber).toEqual("76436847"); + + expect(cipher.fields.length).toEqual(8); + validateCustomField(cipher.fields, "type", "US Passport"); + validateCustomField(cipher.fields, "sex", "female"); + validateCustomField(cipher.fields, "nationality", "International"); + validateCustomField(cipher.fields, "issuing_authority", "Department of State"); + validateCustomField(cipher.fields, "birthdate", "Fri, 01 Apr 1983 12:01:00 GMT"); + validateCustomField(cipher.fields, "birthplace", "A cave somewhere in Maine"); + validateCustomField(cipher.fields, "issue_date", "Wed, 01 Jan 2020 12:01:00 GMT"); + validateCustomField(cipher.fields, "expiry_date", "Sat, 01 Jan 2050 12:01:00 GMT"); + }); + + it("should parse category 107 - RewardsProgram", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(RewardsProgramData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Identity); + expect(cipher.name).toEqual("Retail Reward Thing"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("Chef"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Coldroom"); + expect(identity.company).toEqual("Super Cool Store Co."); + + expect(cipher.fields.length).toEqual(7); + validateCustomField(cipher.fields, "membership_no", "member-29813569"); + validateCustomField(cipher.fields, "pin", "99913"); + validateCustomField(cipher.fields, "additional_no", "additional member id"); + validateCustomField(cipher.fields, "member_since", "202101"); + validateCustomField(cipher.fields, "customer_service_phone", "123456"); + validateCustomField(cipher.fields, "reservations_phone", "123456"); + validateCustomField(cipher.fields, "website", "supercoolstore.com"); + }); + + it("should parse category 108 - SSN", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(SSNData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("SSN"); + + const identity = cipher.identity; + expect(identity.firstName).toEqual("Jack"); + expect(identity.middleName).toBeNull(); + expect(identity.lastName).toEqual("Judd"); + expect(identity.ssn).toEqual("131-216-1900"); + }); + + it("should parse category 109 - WirelessRouter", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(WirelessRouterData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("Wireless Router"); + expect(cipher.notes).toEqual("My Wifi Router Config"); + + expect(cipher.login.password).toEqual("BqatGTVQ9TCN72tLbjrsHqkb"); + + expect(cipher.fields.length).toEqual(7); + validateCustomField(cipher.fields, "name", "pixel 2Xl"); + validateCustomField(cipher.fields, "server", "127.0.0.1"); + validateCustomField(cipher.fields, "airport_id", "some airportId"); + validateCustomField(cipher.fields, "network_name", "some network name"); + validateCustomField(cipher.fields, "wireless_security", "WPA"); + validateCustomField(cipher.fields, "wireless_password", "wifipassword"); + validateCustomField(cipher.fields, "disk_password", "diskpassword"); + }); + + it("should parse category 110 - Server", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(ServerData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("Super Cool Server"); + expect(cipher.notes).toEqual("My Server"); + + expect(cipher.login.username).toEqual("frankly-notsure"); + expect(cipher.login.password).toEqual("*&YHJI87yjy78u"); + expect(cipher.login.uri).toEqual("https://coolserver.nullvalue.test"); + + expect(cipher.fields.length).toEqual(7); + validateCustomField( + cipher.fields, + "admin_console_url", + "https://coolserver.nullvalue.test/admin" + ); + validateCustomField(cipher.fields, "admin_console_username", "frankly-idontknowwhatimdoing"); + validateCustomField(cipher.fields, "admin_console_password", "^%RY&^YUiju8iUYHJI(U"); + validateCustomField(cipher.fields, "name", "Private Hosting Provider Inc."); + validateCustomField(cipher.fields, "website", "https://phpi.nullvalue.test"); + validateCustomField( + cipher.fields, + "support_contact_url", + "https://phpi.nullvalue.test/support" + ); + validateCustomField(cipher.fields, "support_contact_phone", "8882569382"); + }); + + it("should parse category 111 - EmailAccount", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(EmailAccountData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.SecureNote); + expect(cipher.name).toEqual("Email Config"); + expect(cipher.notes).toEqual("My Email Config"); + + expect(cipher.fields.length).toEqual(17); + validateCustomField(cipher.fields, "pop_type", "either"); + validateCustomField(cipher.fields, "pop_username", "someuser@nullvalue.test"); + validateCustomField(cipher.fields, "pop_server", "mailserver.nullvalue.test"); + validateCustomField(cipher.fields, "pop_port", "587"); + validateCustomField(cipher.fields, "pop_password", "u1jsf { + const importer = new Importer(); + const jsonString = JSON.stringify(APICredentialsData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.type).toEqual(CipherType.Login); + expect(cipher.name).toEqual("API Credential"); + expect(cipher.notes).toEqual("My API Credential"); + + expect(cipher.login.username).toEqual("apiuser@nullvalue.test"); + expect(cipher.login.password).toEqual("apiapiapiapiapiapiappy"); + expect(cipher.login.uri).toEqual("http://not.your.everyday.hostname"); + + expect(cipher.fields.length).toEqual(4); + validateCustomField(cipher.fields, "type", "jwt"); + validateCustomField(cipher.fields, "filename", "filename.jwt"); + validateCustomField(cipher.fields, "validFrom", "Mon, 04 Apr 2011 12:01:00 GMT"); + validateCustomField(cipher.fields, "expires", "Tue, 01 Apr 2031 12:01:00 GMT"); + }); + + it("should create secure notes", async () => { + const importer = new Importer(); + const result = await importer.parse(SecureNoteDataJson); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + + expect(cipher.name).toEqual("Secure Note #1"); + expect(cipher.notes).toEqual( + "This is my secure note. \n\nLorem ipsum expecto patronum. \nThe quick brown fox jumped over the lazy dog." + ); + expect(cipher.secureNote.type).toEqual(SecureNoteType.Generic); + }); + + it("should parse category 113 - Medical Record", async () => { + const importer = new Importer(); + const jsonString = JSON.stringify(MedicalRecordData); + const result = await importer.parse(jsonString); + expect(result != null).toBe(true); + const cipher = result.ciphers.shift(); + expect(cipher.type).toEqual(CipherType.SecureNote); + expect(cipher.name).toEqual("Some Health Record"); + expect(cipher.notes).toEqual("Some notes about my medical history"); + expect(cipher.secureNote.type).toEqual(SecureNoteType.Generic); + + expect(cipher.fields.length).toEqual(8); + validateCustomField(cipher.fields, "date", "Sat, 01 Jan 2022 12:01:00 GMT"); + validateCustomField(cipher.fields, "location", "some hospital/clinic"); + validateCustomField(cipher.fields, "healthcareprofessional", "Some Doctor"); + validateCustomField(cipher.fields, "patient", "Me"); + validateCustomField(cipher.fields, "reason", "unwell"); + validateCustomField(cipher.fields, "medication", "Insuline"); + validateCustomField(cipher.fields, "dosage", "1"); + validateCustomField(cipher.fields, "notes", "multiple times a day"); + }); + + it("should create folders", async () => { + const importer = new Importer(); + const result = await importer.parse(SanitizedExportJson); + expect(result != null).toBe(true); + + const folders = result.folders; + expect(folders.length).toBe(5); + expect(folders[0].name).toBe("Movies"); + expect(folders[1].name).toBe("Finance"); + expect(folders[2].name).toBe("Travel"); + expect(folders[3].name).toBe("Education"); + expect(folders[4].name).toBe("Starter Kit"); + + // Check that ciphers have a folder assigned to them + expect(result.ciphers.filter((c) => c.folderId === folders[0].id).length).toBeGreaterThan(0); + expect(result.ciphers.filter((c) => c.folderId === folders[1].id).length).toBeGreaterThan(0); + expect(result.ciphers.filter((c) => c.folderId === folders[2].id).length).toBeGreaterThan(0); + expect(result.ciphers.filter((c) => c.folderId === folders[3].id).length).toBeGreaterThan(0); + expect(result.ciphers.filter((c) => c.folderId === folders[4].id).length).toBeGreaterThan(0); + }); + + it("should create collections if part of an organization", async () => { + const importer = new Importer(); + importer.organizationId = Utils.newGuid(); + const result = await importer.parse(SanitizedExportJson); + expect(result != null).toBe(true); + + const collections = result.collections; + expect(collections.length).toBe(5); + expect(collections[0].name).toBe("Movies"); + expect(collections[1].name).toBe("Finance"); + expect(collections[2].name).toBe("Travel"); + expect(collections[3].name).toBe("Education"); + expect(collections[4].name).toBe("Starter Kit"); + }); +}); diff --git a/spec/common/importers/testData/onePassword1Pux/APICredentials.ts b/spec/common/importers/testData/onePassword1Pux/APICredentials.ts new file mode 100644 index 00000000..39ca32b5 --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/APICredentials.ts @@ -0,0 +1,171 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const APICredentialsData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "6nqnjdqyk5mwvqbdgbdr47oabe", + favIndex: 0, + createdAt: 1619465969, + updatedAt: 1619466052, + trashed: false, + categoryUuid: "112", + details: { + loginFields: [], + notesPlain: "My API Credential", + sections: [ + { + title: "", + fields: [ + { + title: "username", + id: "username", + value: { + string: "apiuser@nullvalue.test", + }, + indexAtSource: 0, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", + }, + }, + { + title: "credential", + id: "credential", + value: { + concealed: "apiapiapiapiapiapiappy", + }, + indexAtSource: 1, + guarded: true, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "default", + }, + }, + { + title: "type", + id: "type", + value: { + menu: "jwt", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "filename", + id: "filename", + value: { + string: "filename.jwt", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "valid from", + id: "validFrom", + value: { + date: 1301918460, + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "expires", + id: "expires", + value: { + date: 1932811260, + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "hostname", + id: "hostname", + value: { + string: "not.your.everyday.hostname", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "uRL", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "", + title: "API Credential", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, + }, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/spec/common/importers/testData/onePassword1Pux/BankAccount.ts b/spec/common/importers/testData/onePassword1Pux/BankAccount.ts new file mode 100644 index 00000000..0f62bd2d --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/BankAccount.ts @@ -0,0 +1,226 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const BankAccountData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "u2l4sjbencvsowwjuj3dfpt73q", + favIndex: 0, + createdAt: 1619466056, + updatedAt: 1619466187, + trashed: false, + categoryUuid: "101", + details: { + loginFields: [], + notesPlain: "My Bank Account", + sections: [ + { + title: "", + fields: [ + { + title: "bank name", + id: "bankName", + value: { + string: "Super Credit Union", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", + }, + }, + { + title: "name on account", + id: "owner", + value: { + string: "Cool Guy", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", + }, + }, + { + title: "type", + id: "accountType", + value: { + menu: "checking", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "routing number", + id: "routingNo", + value: { + string: "111000999", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "account number", + id: "accountNo", + value: { + string: "192837465918273645", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "SWIFT", + id: "swift", + value: { + string: "123456", + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "IBAN", + id: "iban", + value: { + string: "DE12 123456", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "PIN", + id: "telephonePin", + value: { + concealed: "5555", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + { + title: "Branch Information", + name: "branchInfo", + fields: [ + { + title: "phone", + id: "branchPhone", + value: { + phone: "9399399933", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "address", + id: "branchAddress", + value: { + string: "1 Fifth Avenue", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "sentences", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "Super Credit Union", + tags: ["Finance"], + title: "Bank Account", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, + }, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/spec/common/importers/testData/onePassword1Pux/CreditCard.ts b/spec/common/importers/testData/onePassword1Pux/CreditCard.ts new file mode 100644 index 00000000..2c769446 --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/CreditCard.ts @@ -0,0 +1,345 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const CreditCardData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "vpxi2esuujz7nrbojp34rd5aja", + favIndex: 0, + createdAt: 1619465282, + updatedAt: 1619465447, + trashed: false, + categoryUuid: "002", + details: { + loginFields: [], + notesPlain: "My parents' credit card. ", + sections: [ + { + title: "", + fields: [ + { + title: "cardholder name", + id: "cardholder", + value: { + string: "Fred Engels", + }, + indexAtSource: 0, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", + }, + }, + { + title: "type", + id: "type", + value: { + creditCardType: "discover", + }, + indexAtSource: 1, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "number", + id: "ccnum", + value: { + creditCardNumber: "6011111111111117", + }, + indexAtSource: 2, + guarded: true, + clipboardFilter: "0123456789", + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "verification number", + id: "cvv", + value: { + concealed: "1312", + }, + indexAtSource: 3, + guarded: true, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "expiry date", + id: "expiry", + value: { + monthYear: 209912, + }, + indexAtSource: 4, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "valid from", + id: "validFrom", + value: { + monthYear: 200101, + }, + indexAtSource: 5, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "", + id: "txbzvwzpck7ejhfres3733rbpm", + value: { + string: "card", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + { + title: "Contact Information", + name: "contactInfo", + fields: [ + { + title: "issuing bank", + id: "bank", + value: { + string: "Some bank", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", + }, + }, + { + title: "phone (local)", + id: "phoneLocal", + value: { + phone: "123456", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "phone (toll free)", + id: "phoneTollFree", + value: { + phone: "0800123456", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "phone (intl)", + id: "phoneIntl", + value: { + phone: "+49123456", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "website", + id: "website", + value: { + url: "somebank.com", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + { + title: "Additional Details", + name: "details", + fields: [ + { + title: "PIN", + id: "pin", + value: { + concealed: "1234", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "credit limit", + id: "creditLimit", + value: { + string: "$1312", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "cash withdrawal limit", + id: "cashLimit", + value: { + string: "$500", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "interest rate", + id: "interest", + value: { + string: "1%", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "issue number", + id: "issuenumber", + value: { + string: "123456", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "1234 **** 6789", + tags: ["Finance"], + title: "Parent's Credit Card", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, + }, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/spec/common/importers/testData/onePassword1Pux/Database.ts b/spec/common/importers/testData/onePassword1Pux/Database.ts new file mode 100644 index 00000000..3aaad2da --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/Database.ts @@ -0,0 +1,203 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const DatabaseData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "ospvepl3ex2y6hjwwqwyvtf2sy", + favIndex: 0, + createdAt: 1619466193, + updatedAt: 1619466276, + trashed: false, + categoryUuid: "102", + details: { + loginFields: [], + notesPlain: "My Database", + sections: [ + { + title: "", + fields: [ + { + title: "type", + id: "database_type", + value: { + menu: "postgresql", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "server", + id: "hostname", + value: { + string: "my.secret.db.server", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "uRL", + correction: "default", + capitalization: "default", + }, + }, + { + title: "port", + id: "port", + value: { + string: "1337", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "database", + id: "database", + value: { + string: "user_database", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", + }, + }, + { + title: "username", + id: "username", + value: { + string: "cooldbuser", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", + }, + }, + { + title: "password", + id: "password", + value: { + concealed: "^+kTjhLaN7wVPAhGU)*J", + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "SID", + id: "sid", + value: { + string: "ASDIUFU-283234", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "alias", + id: "alias", + value: { + string: "cdbu", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "connection options", + id: "options", + value: { + string: "ssh", + }, + indexAtSource: 8, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "my.secret.db.server", + title: "Database", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, + }, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts b/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts new file mode 100644 index 00000000..4a55b20c --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts @@ -0,0 +1,235 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const DriversLicenseData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "nntuge2g7s2wrlokyfhea354ay", + favIndex: 0, + createdAt: 1619466279, + updatedAt: 1619466425, + trashed: false, + categoryUuid: "103", + details: { + loginFields: [], + notesPlain: "My Driver's License", + sections: [ + { + title: "", + fields: [ + { + title: "full name", + id: "fullname", + value: { + string: "Michael Scarn", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", + }, + }, + { + title: "address", + id: "address", + value: { + string: "2120 Mifflin Rd.", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "sentences", + }, + }, + { + title: "date of birth", + id: "birthdate", + value: { + date: 252504060, + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "sex", + id: "sex", + value: { + gender: "male", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "height", + id: "height", + value: { + string: "5'11\"", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "number", + id: "number", + value: { + string: "12345678901", + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "license class", + id: "class", + value: { + string: "C", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "conditions / restrictions", + id: "conditions", + value: { + string: "B", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "state", + id: "state", + value: { + string: "Pennsylvania", + }, + indexAtSource: 8, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "country", + id: "country", + value: { + string: "United States", + }, + indexAtSource: 9, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "expiry date", + id: "expiry_date", + value: { + monthYear: 203012, + }, + indexAtSource: 10, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "12345678901", + title: "Michael Scarn", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, + }, + }, + }, + ], + }, + ], + }, + ], +}; diff --git a/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts b/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts new file mode 100644 index 00000000..2db083fd --- /dev/null +++ b/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts @@ -0,0 +1,343 @@ +import { ExportData } from "jslib-common/importers/onepasswordImporters/types/onepassword1PuxImporterTypes"; + +export const EmailAccountData: ExportData = { + accounts: [ + { + attrs: { + accountName: "1Password Customer", + name: "1Password Customer", + avatar: "", + email: "username123123123@gmail.com", + uuid: "TRIZ3XV4JJFRXJ3BARILLTUA6E", + domain: "https://my.1password.com/", + }, + vaults: [ + { + attrs: { + uuid: "pqcgbqjxr4tng2hsqt5ffrgwju", + desc: "Just test entries", + avatar: "ke7i5rxnjrh3tj6uesstcosspu.png", + name: "T's Test Vault", + type: "U", + }, + items: [ + { + item: { + uuid: "p3hohdgwpt4u2ra2fc3tvzomsm", + favIndex: 0, + createdAt: 1619466428, + updatedAt: 1619466585, + trashed: false, + categoryUuid: "111", + details: { + loginFields: [], + notesPlain: "My Email Config", + sections: [ + { + title: "", + fields: [ + { + title: "type", + id: "pop_type", + value: { + menu: "either", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "username", + id: "pop_username", + value: { + string: "someuser@nullvalue.test", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", + }, + }, + { + title: "server", + id: "pop_server", + value: { + string: "mailserver.nullvalue.test", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "uRL", + correction: "default", + capitalization: "default", + }, + }, + { + title: "port number", + id: "pop_port", + value: { + string: "587", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "password", + id: "pop_password", + value: { + concealed: "u1jsf Date: Thu, 3 Mar 2022 17:19:52 +0100 Subject: [PATCH 111/120] Expose logger in lock component (#703) --- angular/src/components/lock.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular/src/components/lock.component.ts b/angular/src/components/lock.component.ts index 11ddba31..2411f588 100644 --- a/angular/src/components/lock.component.ts +++ b/angular/src/components/lock.component.ts @@ -49,7 +49,7 @@ export class LockComponent implements OnInit { protected environmentService: EnvironmentService, protected stateService: StateService, protected apiService: ApiService, - private logService: LogService, + protected logService: LogService, private keyConnectorService: KeyConnectorService, protected ngZone: NgZone ) {} From 4d94f7a631c7bc90f2c627f25ce15b4e075569f7 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 3 Mar 2022 13:57:08 -0500 Subject: [PATCH 112/120] [bug] Delete stored keys if the value is null (#705) --- common/src/services/state.service.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 33a71902..17b1453f 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -446,7 +446,7 @@ export class StateService< if (options?.userId == null) { return; } - await this.secureStorageService.save(`${options.userId}${partialKeys.autoKey}`, value, options); + await this.saveSecureStorageKey(partialKeys.autoKey, value, options); } async getCryptoMasterKeyB64(options?: StorageOptions): Promise { @@ -465,11 +465,7 @@ export class StateService< if (options?.userId == null) { return; } - await this.secureStorageService.save( - `${options.userId}${partialKeys.masterKey}`, - value, - options - ); + await this.saveSecureStorageKey(partialKeys.masterKey, value, options); } async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise { @@ -508,11 +504,7 @@ export class StateService< if (options?.userId == null) { return; } - await this.secureStorageService.save( - `${options.userId}${partialKeys.biometricKey}`, - value, - options - ); + await this.saveSecureStorageKey(partialKeys.biometricKey, value, options); } async getDecodedToken(options?: StorageOptions): Promise { @@ -2502,4 +2494,10 @@ export class StateService< : await this.defaultOnDiskOptions(); return this.reconcileOptions(options, defaultOptions); } + + private async saveSecureStorageKey(key: string, value: string, options?: StorageOptions) { + return value == null + ? await this.secureStorageService.remove(`${options.userId}${key}`, options) + : await this.secureStorageService.save(`${options.userId}${key}`, value, options); + } } From 6aae3beb76164f0f5a7953138942b7fc92f2b694 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 3 Mar 2022 13:57:50 -0500 Subject: [PATCH 113/120] [bug] Set proper default for autoConfirmFingerprint (#704) --- common/src/services/state.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/services/state.service.ts b/common/src/services/state.service.ts index 17b1453f..4d3aa3b3 100644 --- a/common/src/services/state.service.ts +++ b/common/src/services/state.service.ts @@ -213,7 +213,7 @@ export class StateService< async getAutoConfirmFingerPrints(options?: StorageOptions): Promise { return ( (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))) - ?.settings?.autoConfirmFingerPrints ?? true + ?.settings?.autoConfirmFingerPrints ?? false ); } From 6e345bc4ccbb4bb96ca2d657585a5b8319b9e3ab Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Mon, 7 Mar 2022 19:21:23 +0100 Subject: [PATCH 114/120] Dashlane Csv-Importer (#708) * Move existing dashlane importer into dashlaneImporters * Add testData for Dashlane CSV importer * Add dashlane Csv importer and unit tests * Fixed linting issues * Moved dashlaneCsv types to own file * Register DashlaneCsv importer * Removed temp private method and use base impl * rename spec imports * Move scope of mapped columns * Migrate folders into collection if imported via org --- common/src/enums/importOptions.ts | 1 + .../dashlaneImporters/dashlaneCsvImporter.ts | 271 +++++++++++++ .../dashlaneJsonImporter.ts | 19 +- .../types/dashlaneCsvTypes.ts | 68 ++++ common/src/services/import.service.ts | 5 +- package-lock.json | 3 + .../importers/dashlaneCsvImporter.spec.ts | 367 ++++++++++++++++++ .../testData/dashlaneCsv/credentials.csv.ts | 2 + .../importers/testData/dashlaneCsv/id.csv.ts | 6 + .../dashlaneCsv/multiplePersonalInfo.csv.ts | 7 + .../testData/dashlaneCsv/payments.csv.ts | 3 + .../testData/dashlaneCsv/personalInfo.csv.ts | 6 + .../testData/dashlaneCsv/securenotes.csv.ts | 2 + 13 files changed, 749 insertions(+), 11 deletions(-) create mode 100644 common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts rename common/src/importers/{ => dashlaneImporters}/dashlaneJsonImporter.ts (91%) create mode 100644 common/src/importers/dashlaneImporters/types/dashlaneCsvTypes.ts create mode 100644 spec/common/importers/dashlaneCsvImporter.spec.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/credentials.csv.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/id.csv.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/multiplePersonalInfo.csv.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/payments.csv.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/personalInfo.csv.ts create mode 100644 spec/common/importers/testData/dashlaneCsv/securenotes.csv.ts diff --git a/common/src/enums/importOptions.ts b/common/src/enums/importOptions.ts index 01773b60..42f9619e 100644 --- a/common/src/enums/importOptions.ts +++ b/common/src/enums/importOptions.ts @@ -7,6 +7,7 @@ export const featuredImportOptions = [ { id: "bitwardenjson", name: "Bitwarden (json)" }, { id: "bitwardencsv", name: "Bitwarden (csv)" }, { id: "chromecsv", name: "Chrome (csv)" }, + { id: "dashlanecsv", name: "Dashlane (csv)" }, { id: "dashlanejson", name: "Dashlane (json)" }, { id: "firefoxcsv", name: "Firefox (csv)" }, { id: "keepass2xml", name: "KeePass 2 (xml)" }, diff --git a/common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts b/common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts new file mode 100644 index 00000000..2bb6ce14 --- /dev/null +++ b/common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts @@ -0,0 +1,271 @@ +import { CipherType } from "../../enums/cipherType"; +import { SecureNoteType } from "../../enums/secureNoteType"; +import { ImportResult } from "../../models/domain/importResult"; +import { CardView } from "../../models/view/cardView"; +import { CipherView } from "../../models/view/cipherView"; +import { IdentityView } from "../../models/view/identityView"; +import { LoginView } from "../../models/view/loginView"; +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; + +import { + CredentialsRecord, + IdRecord, + PaymentsRecord, + PersonalInformationRecord, + SecureNoteRecord, +} from "./types/dashlaneCsvTypes"; + +const _mappedCredentialsColums = new Set([ + "title", + "note", + "username", + "password", + "url", + "otpSecret", + "category", +]); + +const _mappedPersonalInfoAsIdentiyColumns = new Set([ + "type", + "title", + "first_name", + "middle_name", + "last_name", + "login", + "email", + "phone_number", + "address", + "country", + "state", + "city", + "zip", + // Skip item_name as we already have set a combined name + "item_name", +]); + +const _mappedSecureNoteColumns = new Set(["title", "note"]); + +export class DashlaneCsvImporter extends BaseImporter implements Importer { + parse(data: string): Promise { + const result = new ImportResult(); + const results = this.parseCsv(data, true); + if (results == null) { + result.success = false; + return Promise.resolve(result); + } + + if (results[0].type != null && results[0].title != null) { + const personalRecords = results as PersonalInformationRecord[]; + + // If personalRecords has only one "name" then create an Identity-Cipher + if (personalRecords.filter((x) => x.type === "name").length === 1) { + const cipher = this.initLoginCipher(); + cipher.type = CipherType.Identity; + cipher.identity = new IdentityView(); + results.forEach((row) => { + this.parsePersonalInformationRecordAsIdentity(cipher, row); + }); + this.cleanupCipher(cipher); + result.ciphers.push(cipher); + result.success = true; + return Promise.resolve(result); + } + } + + results.forEach((row) => { + const cipher = this.initLoginCipher(); + + const rowKeys = Object.keys(row); + if (rowKeys[0] === "username") { + this.processFolder(result, row.category); + this.parseCredentialsRecord(cipher, row); + } + + if (rowKeys[0] === "type" && rowKeys[1] === "account_name") { + this.parsePaymentRecord(cipher, row); + } + + if (rowKeys[0] === "type" && rowKeys[1] === "number") { + this.parseIdRecord(cipher, row); + } + + if ((rowKeys[0] === "type") != null && rowKeys[1] === "title") { + this.parsePersonalInformationRecord(cipher, row); + } + + if (rowKeys[0] === "title" && rowKeys[1] === "note") { + this.parseSecureNoteRecords(cipher, row); + } + + this.convertToNoteIfNeeded(cipher); + this.cleanupCipher(cipher); + result.ciphers.push(cipher); + }); + + if (this.organization) { + this.moveFoldersToCollections(result); + } + + result.success = true; + return Promise.resolve(result); + } + + parseCredentialsRecord(cipher: CipherView, row: CredentialsRecord) { + cipher.type = CipherType.Login; + cipher.login = new LoginView(); + + cipher.name = row.title; + cipher.notes = row.note; + cipher.login.username = row.username; + cipher.login.password = row.password; + cipher.login.totp = row.otpSecret; + cipher.login.uris = this.makeUriArray(row.url); + + this.importUnmappedFields(cipher, row, _mappedCredentialsColums); + } + + parsePaymentRecord(cipher: CipherView, row: PaymentsRecord) { + cipher.type = CipherType.Card; + cipher.card = new CardView(); + + cipher.name = row.account_name; + let mappedValues: string[] = []; + switch (row.type) { + case "credit_card": + cipher.card.cardholderName = row.account_name; + cipher.card.number = row.cc_number; + cipher.card.brand = this.getCardBrand(cipher.card.number); + cipher.card.code = row.code; + cipher.card.expMonth = row.expiration_month; + cipher.card.expYear = row.expiration_year.substring(2, 4); + + // If you add more mapped fields please extend this + mappedValues = [ + "account_name", + "account_holder", + "cc_number", + "code", + "expiration_month", + "expiration_year", + ]; + break; + case "bank": + cipher.card.cardholderName = row.account_holder; + cipher.card.number = row.account_number; + + // If you add more mapped fields please extend this + mappedValues = ["account_name", "account_holder", "account_number"]; + break; + default: + break; + } + + this.importUnmappedFields(cipher, row, new Set(mappedValues)); + } + + parseIdRecord(cipher: CipherView, row: IdRecord) { + cipher.type = CipherType.Identity; + cipher.identity = new IdentityView(); + + const mappedValues: string[] = ["name", "number"]; + switch (row.type) { + case "card": + cipher.name = `${row.name} ${row.type}`; + this.processFullName(cipher, row.name); + cipher.identity.licenseNumber = row.number; + break; + case "passport": + cipher.name = `${row.name} ${row.type}`; + this.processFullName(cipher, row.name); + cipher.identity.passportNumber = row.number; + break; + case "license": + cipher.name = `${row.name} ${row.type}`; + this.processFullName(cipher, row.name); + cipher.identity.licenseNumber = row.number; + cipher.identity.state = row.state; + + mappedValues.push("state"); + break; + case "social_security": + cipher.name = `${row.name} ${row.type}`; + this.processFullName(cipher, row.name); + cipher.identity.ssn = row.number; + break; + case "tax_number": + cipher.name = row.type; + cipher.identity.licenseNumber = row.number; + break; + + default: + break; + } + + // If you add more mapped fields please extend this + this.importUnmappedFields(cipher, row, new Set(mappedValues)); + } + + parsePersonalInformationRecord(cipher: CipherView, row: PersonalInformationRecord) { + cipher.type = CipherType.SecureNote; + cipher.secureNote.type = SecureNoteType.Generic; + if (row.type === "name") { + cipher.name = `${row.title} ${row.first_name} ${row.middle_name} ${row.last_name}` + .replace(" ", " ") + .trim(); + } else { + cipher.name = row.item_name; + } + + const dataRow = row as any; + Object.keys(row).forEach((key) => { + this.processKvp(cipher, key, dataRow[key]); + }); + } + + parsePersonalInformationRecordAsIdentity(cipher: CipherView, row: PersonalInformationRecord) { + switch (row.type) { + case "name": + this.processFullName(cipher, `${row.first_name} ${row.middle_name} ${row.last_name}`); + cipher.identity.title = row.title; + cipher.name = cipher.identity.fullName; + + cipher.identity.username = row.login; + break; + case "email": + cipher.identity.email = row.email; + break; + case "number": + cipher.identity.phone = row.phone_number; + break; + case "address": + cipher.identity.address1 = row.address; + cipher.identity.city = row.city; + cipher.identity.postalCode = row.zip; + cipher.identity.state = row.state; + cipher.identity.country = row.country; + break; + default: + break; + } + + this.importUnmappedFields(cipher, row, _mappedPersonalInfoAsIdentiyColumns); + } + + parseSecureNoteRecords(cipher: CipherView, row: SecureNoteRecord) { + cipher.type = CipherType.SecureNote; + cipher.secureNote.type = SecureNoteType.Generic; + cipher.name = row.title; + cipher.notes = row.note; + + this.importUnmappedFields(cipher, row, _mappedSecureNoteColumns); + } + + importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) { + const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x)); + unmappedFields.forEach((key) => { + const item = row as any; + this.processKvp(cipher, key, item[key]); + }); + } +} diff --git a/common/src/importers/dashlaneJsonImporter.ts b/common/src/importers/dashlaneImporters/dashlaneJsonImporter.ts similarity index 91% rename from common/src/importers/dashlaneJsonImporter.ts rename to common/src/importers/dashlaneImporters/dashlaneJsonImporter.ts index fea540ef..cb7db59d 100644 --- a/common/src/importers/dashlaneJsonImporter.ts +++ b/common/src/importers/dashlaneImporters/dashlaneJsonImporter.ts @@ -1,13 +1,12 @@ -import { CipherType } from "../enums/cipherType"; -import { SecureNoteType } from "../enums/secureNoteType"; -import { ImportResult } from "../models/domain/importResult"; -import { CardView } from "../models/view/cardView"; -import { CipherView } from "../models/view/cipherView"; -import { IdentityView } from "../models/view/identityView"; -import { SecureNoteView } from "../models/view/secureNoteView"; - -import { BaseImporter } from "./baseImporter"; -import { Importer } from "./importer"; +import { CipherType } from "../../enums/cipherType"; +import { SecureNoteType } from "../../enums/secureNoteType"; +import { ImportResult } from "../../models/domain/importResult"; +import { CardView } from "../../models/view/cardView"; +import { CipherView } from "../../models/view/cipherView"; +import { IdentityView } from "../../models/view/identityView"; +import { SecureNoteView } from "../../models/view/secureNoteView"; +import { BaseImporter } from "../baseImporter"; +import { Importer } from "../importer"; const HandledResults = new Set([ "ADDRESS", diff --git a/common/src/importers/dashlaneImporters/types/dashlaneCsvTypes.ts b/common/src/importers/dashlaneImporters/types/dashlaneCsvTypes.ts new file mode 100644 index 00000000..cb321c56 --- /dev/null +++ b/common/src/importers/dashlaneImporters/types/dashlaneCsvTypes.ts @@ -0,0 +1,68 @@ +// tslint:disable +export class CredentialsRecord { + username: string; + username2: string; + username3: string; + title: string; + password: string; + note: string; + url: string; + category: string; + otpSecret: string; +} + +export class PaymentsRecord { + type: string; + account_name: string; + account_holder: string; + cc_number: string; + code: string; + expiration_month: string; + expiration_year: string; + routing_number: string; + account_number: string; + country: string; + issuing_bank: string; +} + +export class IdRecord { + type: string; + number: string; + name: string; + issue_date: string; + expiration_date: string; + place_of_issue: string; + state: string; +} + +export class PersonalInformationRecord { + type: string; + title: string; + first_name: string; + middle_name: string; + last_name: string; + login: string; + date_of_birth: string; + place_of_birth: string; + email: string; + email_type: string; + item_name: string; + phone_number: string; + address: string; + country: string; + state: string; + city: string; + zip: string; + address_recipient: string; + address_building: string; + address_apartment: string; + address_floor: string; + address_door_code: string; + job_title: string; + url: string; +} + +export class SecureNoteRecord { + title: string; + note: string; +} diff --git a/common/src/services/import.service.ts b/common/src/services/import.service.ts index 1a59b20a..86226d7d 100644 --- a/common/src/services/import.service.ts +++ b/common/src/services/import.service.ts @@ -26,7 +26,8 @@ import { ButtercupCsvImporter } from "../importers/buttercupCsvImporter"; import { ChromeCsvImporter } from "../importers/chromeCsvImporter"; import { ClipperzHtmlImporter } from "../importers/clipperzHtmlImporter"; import { CodebookCsvImporter } from "../importers/codebookCsvImporter"; -import { DashlaneJsonImporter } from "../importers/dashlaneJsonImporter"; +import { DashlaneCsvImporter } from "../importers/dashlaneImporters/dashlaneCsvImporter"; +import { DashlaneJsonImporter } from "../importers/dashlaneImporters/dashlaneJsonImporter"; import { EncryptrCsvImporter } from "../importers/encryptrCsvImporter"; import { EnpassCsvImporter } from "../importers/enpassCsvImporter"; import { EnpassJsonImporter } from "../importers/enpassJsonImporter"; @@ -218,6 +219,8 @@ export class ImportService implements ImportServiceAbstraction { return new EnpassJsonImporter(); case "pwsafexml": return new PasswordSafeXmlImporter(); + case "dashlanecsv": + return new DashlaneCsvImporter(); case "dashlanejson": return new DashlaneJsonImporter(); case "msecurecsv": diff --git a/package-lock.json b/package-lock.json index 1b7ad74f..8331f6e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,6 +88,7 @@ } }, "common": { + "name": "@bitwarden/jslib-common", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { @@ -114,6 +115,7 @@ } }, "electron": { + "name": "@bitwarden/jslib-electron", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { @@ -133,6 +135,7 @@ } }, "node": { + "name": "@bitwarden/jslib-node", "version": "0.0.0", "license": "GPL-3.0", "dependencies": { diff --git a/spec/common/importers/dashlaneCsvImporter.spec.ts b/spec/common/importers/dashlaneCsvImporter.spec.ts new file mode 100644 index 00000000..666e3232 --- /dev/null +++ b/spec/common/importers/dashlaneCsvImporter.spec.ts @@ -0,0 +1,367 @@ +import { CipherType } from "jslib-common/enums/cipherType"; +import { DashlaneCsvImporter as Importer } from "jslib-common/importers/dashlaneImporters/dashlaneCsvImporter"; + +import { credentialsData } from "./testData/dashlaneCsv/credentials.csv"; +import { identityData } from "./testData/dashlaneCsv/id.csv"; +import { multiplePersonalInfoData } from "./testData/dashlaneCsv/multiplePersonalInfo.csv"; +import { paymentsData } from "./testData/dashlaneCsv/payments.csv"; +import { personalInfoData } from "./testData/dashlaneCsv/personalInfo.csv"; +import { secureNoteData } from "./testData/dashlaneCsv/securenotes.csv"; + +describe("Dashlane CSV Importer", () => { + let importer: Importer; + beforeEach(() => { + importer = new Importer(); + }); + + it("should parse login records", async () => { + const result = await importer.parse(credentialsData); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.name).toEqual("example.com"); + expect(cipher.login.username).toEqual("jdoe"); + expect(cipher.login.password).toEqual("somePassword"); + expect(cipher.login.totp).toEqual("someTOTPSeed"); + expect(cipher.login.uris.length).toEqual(1); + const uriView = cipher.login.uris.shift(); + expect(uriView.uri).toEqual("https://www.example.com"); + expect(cipher.notes).toEqual("some note for example.com"); + }); + + it("should parse an item and create a folder", async () => { + const result = await importer.parse(credentialsData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.folders.length).toBe(1); + expect(result.folders[0].name).toBe("Entertainment"); + expect(result.folderRelationships[0]).toEqual([0, 0]); + }); + + it("should parse payment records", async () => { + const result = await importer.parse(paymentsData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.ciphers.length).toBe(2); + + // Account + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.Card); + expect(cipher.name).toBe("John's savings account"); + expect(cipher.card.brand).toBeNull(); + expect(cipher.card.cardholderName).toBe("John Doe"); + expect(cipher.card.number).toBe("accountNumber"); + expect(cipher.card.code).toBeNull(); + expect(cipher.card.expMonth).toBeNull(); + expect(cipher.card.expYear).toBeNull(); + + expect(cipher.fields.length).toBe(4); + + expect(cipher.fields[0].name).toBe("type"); + expect(cipher.fields[0].value).toBe("bank"); + + expect(cipher.fields[1].name).toBe("routing_number"); + expect(cipher.fields[1].value).toBe("routingNumber"); + + expect(cipher.fields[2].name).toBe("country"); + expect(cipher.fields[2].value).toBe("US"); + + expect(cipher.fields[3].name).toBe("issuing_bank"); + expect(cipher.fields[3].value).toBe("US-ALLY"); + + // CreditCard + const cipher2 = result.ciphers.shift(); + expect(cipher2.type).toBe(CipherType.Card); + expect(cipher2.name).toBe("John Doe"); + expect(cipher2.card.brand).toBe("Visa"); + expect(cipher2.card.cardholderName).toBe("John Doe"); + expect(cipher2.card.number).toBe("41111111111111111"); + expect(cipher2.card.code).toBe("123"); + expect(cipher2.card.expMonth).toBe("01"); + expect(cipher2.card.expYear).toBe("23"); + + expect(cipher2.fields.length).toBe(2); + + expect(cipher2.fields[0].name).toBe("type"); + expect(cipher2.fields[0].value).toBe("credit_card"); + + expect(cipher2.fields[1].name).toBe("country"); + expect(cipher2.fields[1].value).toBe("US"); + }); + + it("should parse ids records", async () => { + const result = await importer.parse(identityData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + + // Type card + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("John Doe card"); + expect(cipher.identity.fullName).toBe("John Doe"); + expect(cipher.identity.firstName).toBe("John"); + expect(cipher.identity.middleName).toBeNull(); + expect(cipher.identity.lastName).toBe("Doe"); + expect(cipher.identity.licenseNumber).toBe("123123123"); + + expect(cipher.fields.length).toBe(3); + + expect(cipher.fields[0].name).toEqual("type"); + expect(cipher.fields[0].value).toEqual("card"); + + expect(cipher.fields[1].name).toEqual("issue_date"); + expect(cipher.fields[1].value).toEqual("2022-1-30"); + + expect(cipher.fields[2].name).toEqual("expiration_date"); + expect(cipher.fields[2].value).toEqual("2032-1-30"); + + // Type passport + const cipher2 = result.ciphers.shift(); + expect(cipher2.type).toBe(CipherType.Identity); + expect(cipher2.name).toBe("John Doe passport"); + expect(cipher2.identity.fullName).toBe("John Doe"); + expect(cipher2.identity.firstName).toBe("John"); + expect(cipher2.identity.middleName).toBeNull(); + expect(cipher2.identity.lastName).toBe("Doe"); + expect(cipher2.identity.passportNumber).toBe("123123123"); + + expect(cipher2.fields.length).toBe(4); + + expect(cipher2.fields[0].name).toEqual("type"); + expect(cipher2.fields[0].value).toEqual("passport"); + expect(cipher2.fields[1].name).toEqual("issue_date"); + expect(cipher2.fields[1].value).toEqual("2022-1-30"); + expect(cipher2.fields[2].name).toEqual("expiration_date"); + expect(cipher2.fields[2].value).toEqual("2032-1-30"); + expect(cipher2.fields[3].name).toEqual("place_of_issue"); + expect(cipher2.fields[3].value).toEqual("somewhere in Germany"); + + // Type license + const cipher3 = result.ciphers.shift(); + expect(cipher3.type).toBe(CipherType.Identity); + expect(cipher3.name).toBe("John Doe license"); + expect(cipher3.identity.fullName).toBe("John Doe"); + expect(cipher3.identity.firstName).toBe("John"); + expect(cipher3.identity.middleName).toBeNull(); + expect(cipher3.identity.lastName).toBe("Doe"); + expect(cipher3.identity.licenseNumber).toBe("1234556"); + expect(cipher3.identity.state).toBe("DC"); + + expect(cipher3.fields.length).toBe(3); + expect(cipher3.fields[0].name).toEqual("type"); + expect(cipher3.fields[0].value).toEqual("license"); + expect(cipher3.fields[1].name).toEqual("issue_date"); + expect(cipher3.fields[1].value).toEqual("2022-8-10"); + expect(cipher3.fields[2].name).toEqual("expiration_date"); + expect(cipher3.fields[2].value).toEqual("2022-10-10"); + + // Type social_security + const cipher4 = result.ciphers.shift(); + expect(cipher4.type).toBe(CipherType.Identity); + expect(cipher4.name).toBe("John Doe social_security"); + expect(cipher4.identity.fullName).toBe("John Doe"); + expect(cipher4.identity.firstName).toBe("John"); + expect(cipher4.identity.middleName).toBeNull(); + expect(cipher4.identity.lastName).toBe("Doe"); + expect(cipher4.identity.ssn).toBe("123123123"); + + expect(cipher4.fields.length).toBe(1); + expect(cipher4.fields[0].name).toEqual("type"); + expect(cipher4.fields[0].value).toEqual("social_security"); + + // Type tax_number + const cipher5 = result.ciphers.shift(); + expect(cipher5.type).toBe(CipherType.Identity); + expect(cipher5.name).toBe("tax_number"); + expect(cipher5.identity.licenseNumber).toBe("123123123"); + + expect(cipher5.fields.length).toBe(1); + expect(cipher5.fields[0].name).toEqual("type"); + expect(cipher5.fields[0].value).toEqual("tax_number"); + }); + + it("should parse secureNote records", async () => { + const result = await importer.parse(secureNoteData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.ciphers.length).toBe(1); + + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.SecureNote); + expect(cipher.name).toBe("01"); + expect(cipher.notes).toBe("test"); + }); + + it("should parse personal information records (multiple identities)", async () => { + const result = await importer.parse(multiplePersonalInfoData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.ciphers.length).toBe(6); + + // name + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.SecureNote); + expect(cipher.name).toBe("MR John Doe"); + + expect(cipher.fields.length).toBe(7); + expect(cipher.fields[0].name).toEqual("type"); + expect(cipher.fields[0].value).toEqual("name"); + expect(cipher.fields[1].name).toEqual("title"); + expect(cipher.fields[1].value).toEqual("MR"); + expect(cipher.fields[2].name).toEqual("first_name"); + expect(cipher.fields[2].value).toEqual("John"); + expect(cipher.fields[3].name).toEqual("last_name"); + expect(cipher.fields[3].value).toEqual("Doe"); + expect(cipher.fields[4].name).toEqual("login"); + expect(cipher.fields[4].value).toEqual("jdoe"); + expect(cipher.fields[5].name).toEqual("date_of_birth"); + expect(cipher.fields[5].value).toEqual("2022-01-30"); + expect(cipher.fields[6].name).toEqual("place_of_birth"); + expect(cipher.fields[6].value).toEqual("world"); + + // email + const cipher2 = result.ciphers.shift(); + expect(cipher2.type).toBe(CipherType.SecureNote); + expect(cipher2.name).toBe("Johns email"); + + expect(cipher2.fields.length).toBe(4); + expect(cipher2.fields[0].name).toEqual("type"); + expect(cipher2.fields[0].value).toEqual("email"); + expect(cipher2.fields[1].name).toEqual("email"); + expect(cipher2.fields[1].value).toEqual("jdoe@example.com"); + expect(cipher2.fields[2].name).toEqual("email_type"); + expect(cipher2.fields[2].value).toEqual("personal"); + expect(cipher2.fields[3].name).toEqual("item_name"); + expect(cipher2.fields[3].value).toEqual("Johns email"); + + // number + const cipher3 = result.ciphers.shift(); + expect(cipher3.type).toBe(CipherType.SecureNote); + expect(cipher3.name).toBe("John's number"); + + expect(cipher3.fields.length).toBe(3); + expect(cipher3.fields[0].name).toEqual("type"); + expect(cipher3.fields[0].value).toEqual("number"); + expect(cipher3.fields[1].name).toEqual("item_name"); + expect(cipher3.fields[1].value).toEqual("John's number"); + expect(cipher3.fields[2].name).toEqual("phone_number"); + expect(cipher3.fields[2].value).toEqual("+49123123123"); + + // address + const cipher4 = result.ciphers.shift(); + expect(cipher4.type).toBe(CipherType.SecureNote); + expect(cipher4.name).toBe("John's home address"); + + expect(cipher4.fields.length).toBe(12); + expect(cipher4.fields[0].name).toEqual("type"); + expect(cipher4.fields[0].value).toEqual("address"); + expect(cipher4.fields[1].name).toEqual("item_name"); + expect(cipher4.fields[1].value).toEqual("John's home address"); + expect(cipher4.fields[2].name).toEqual("address"); + expect(cipher4.fields[2].value).toEqual("1 some street"); + expect(cipher4.fields[3].name).toEqual("country"); + expect(cipher4.fields[3].value).toEqual("de"); + expect(cipher4.fields[4].name).toEqual("state"); + expect(cipher4.fields[4].value).toEqual("DE-0-NW"); + expect(cipher4.fields[5].name).toEqual("city"); + expect(cipher4.fields[5].value).toEqual("some city"); + expect(cipher4.fields[6].name).toEqual("zip"); + expect(cipher4.fields[6].value).toEqual("123123"); + expect(cipher4.fields[7].name).toEqual("address_recipient"); + expect(cipher4.fields[7].value).toEqual("John"); + expect(cipher4.fields[8].name).toEqual("address_building"); + expect(cipher4.fields[8].value).toEqual("1"); + expect(cipher4.fields[9].name).toEqual("address_apartment"); + expect(cipher4.fields[9].value).toEqual("1"); + expect(cipher4.fields[10].name).toEqual("address_floor"); + expect(cipher4.fields[10].value).toEqual("1"); + expect(cipher4.fields[11].name).toEqual("address_door_code"); + expect(cipher4.fields[11].value).toEqual("123"); + + // website + const cipher5 = result.ciphers.shift(); + expect(cipher5.type).toBe(CipherType.SecureNote); + expect(cipher5.name).toBe("Website"); + + expect(cipher5.fields.length).toBe(3); + expect(cipher5.fields[0].name).toEqual("type"); + expect(cipher5.fields[0].value).toEqual("website"); + expect(cipher5.fields[1].name).toEqual("item_name"); + expect(cipher5.fields[1].value).toEqual("Website"); + expect(cipher5.fields[2].name).toEqual("url"); + expect(cipher5.fields[2].value).toEqual("website.com"); + + // 2nd name/identity + const cipher6 = result.ciphers.shift(); + expect(cipher6.type).toBe(CipherType.SecureNote); + expect(cipher6.name).toBe("Mrs Jane Doe"); + + expect(cipher6.fields.length).toBe(7); + expect(cipher6.fields[0].name).toEqual("type"); + expect(cipher6.fields[0].value).toEqual("name"); + expect(cipher6.fields[1].name).toEqual("title"); + expect(cipher6.fields[1].value).toEqual("Mrs"); + expect(cipher6.fields[2].name).toEqual("first_name"); + expect(cipher6.fields[2].value).toEqual("Jane"); + expect(cipher6.fields[3].name).toEqual("last_name"); + expect(cipher6.fields[3].value).toEqual("Doe"); + expect(cipher6.fields[4].name).toEqual("login"); + expect(cipher6.fields[4].value).toEqual("jdoe"); + expect(cipher6.fields[5].name).toEqual("date_of_birth"); + expect(cipher6.fields[5].value).toEqual("2022-01-30"); + expect(cipher6.fields[6].name).toEqual("place_of_birth"); + expect(cipher6.fields[6].value).toEqual("earth"); + }); + + it("should combine personal information records to one identity if only one identity present", async () => { + const result = await importer.parse(personalInfoData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("MR John Doe"); + expect(cipher.identity.fullName).toBe("MR John Doe"); + expect(cipher.identity.title).toBe("MR"); + expect(cipher.identity.firstName).toBe("John"); + expect(cipher.identity.middleName).toBeNull(); + expect(cipher.identity.lastName).toBe("Doe"); + expect(cipher.identity.username).toBe("jdoe"); + expect(cipher.identity.email).toBe("jdoe@example.com"); + expect(cipher.identity.phone).toBe("+49123123123"); + + expect(cipher.fields.length).toBe(9); + expect(cipher.fields[0].name).toBe("date_of_birth"); + expect(cipher.fields[0].value).toBe("2022-01-30"); + + expect(cipher.fields[1].name).toBe("place_of_birth"); + expect(cipher.fields[1].value).toBe("world"); + + expect(cipher.fields[2].name).toBe("email_type"); + expect(cipher.fields[2].value).toBe("personal"); + + expect(cipher.fields[3].name).toBe("address_recipient"); + expect(cipher.fields[3].value).toBe("John"); + + expect(cipher.fields[4].name).toBe("address_building"); + expect(cipher.fields[4].value).toBe("1"); + + expect(cipher.fields[5].name).toBe("address_apartment"); + expect(cipher.fields[5].value).toBe("1"); + + expect(cipher.fields[6].name).toBe("address_floor"); + expect(cipher.fields[6].value).toBe("1"); + + expect(cipher.fields[7].name).toBe("address_door_code"); + expect(cipher.fields[7].value).toBe("123"); + + expect(cipher.fields[8].name).toBe("url"); + expect(cipher.fields[8].value).toBe("website.com"); + }); +}); diff --git a/spec/common/importers/testData/dashlaneCsv/credentials.csv.ts b/spec/common/importers/testData/dashlaneCsv/credentials.csv.ts new file mode 100644 index 00000000..78e42cb1 --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/credentials.csv.ts @@ -0,0 +1,2 @@ +export const credentialsData = `username,username2,username3,title,password,note,url,category,otpSecret +jdoe,,,example.com,somePassword,some note for example.com,https://www.example.com,Entertainment,someTOTPSeed`; diff --git a/spec/common/importers/testData/dashlaneCsv/id.csv.ts b/spec/common/importers/testData/dashlaneCsv/id.csv.ts new file mode 100644 index 00000000..1c939557 --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/id.csv.ts @@ -0,0 +1,6 @@ +export const identityData = `type,number,name,issue_date,expiration_date,place_of_issue,state +card,123123123,John Doe,2022-1-30,2032-1-30,, +passport,123123123,John Doe,2022-1-30,2032-1-30,somewhere in Germany, +license,1234556,John Doe,2022-8-10,2022-10-10,,DC +social_security,123123123,John Doe,,,, +tax_number,123123123,,,,,`; diff --git a/spec/common/importers/testData/dashlaneCsv/multiplePersonalInfo.csv.ts b/spec/common/importers/testData/dashlaneCsv/multiplePersonalInfo.csv.ts new file mode 100644 index 00000000..cca5748b --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/multiplePersonalInfo.csv.ts @@ -0,0 +1,7 @@ +export const multiplePersonalInfoData = `type,title,first_name,middle_name,last_name,login,date_of_birth,place_of_birth,email,email_type,item_name,phone_number,address,country,state,city,zip,address_recipient,address_building,address_apartment,address_floor,address_door_code,job_title,url +name,MR,John,,Doe,jdoe,2022-01-30,world,,,,,,,,,,,,,,,, +email,,,,,,,,jdoe@example.com,personal,Johns email,,,,,,,,,,,,, +number,,,,,,,,,,John's number,+49123123123,,,,,,,,,,,, +address,,,,,,,,,,John's home address,,1 some street,de,DE-0-NW,some city,123123,John,1,1,1,123,, +website,,,,,,,,,,Website,,,,,,,,,,,,,website.com +name,Mrs,Jane,,Doe,jdoe,2022-01-30,earth,,,,,,,,,,,,,,,,`; diff --git a/spec/common/importers/testData/dashlaneCsv/payments.csv.ts b/spec/common/importers/testData/dashlaneCsv/payments.csv.ts new file mode 100644 index 00000000..336986c1 --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/payments.csv.ts @@ -0,0 +1,3 @@ +export const paymentsData = `type,account_name,account_holder,cc_number,code,expiration_month,expiration_year,routing_number,account_number,country,issuing_bank +bank,John's savings account,John Doe,,,,,routingNumber,accountNumber,US,US-ALLY +credit_card,John Doe,,41111111111111111,123,01,2023,,,US,`; diff --git a/spec/common/importers/testData/dashlaneCsv/personalInfo.csv.ts b/spec/common/importers/testData/dashlaneCsv/personalInfo.csv.ts new file mode 100644 index 00000000..ec99f800 --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/personalInfo.csv.ts @@ -0,0 +1,6 @@ +export const personalInfoData = `type,title,first_name,middle_name,last_name,login,date_of_birth,place_of_birth,email,email_type,item_name,phone_number,address,country,state,city,zip,address_recipient,address_building,address_apartment,address_floor,address_door_code,job_title,url +name,MR,John,,Doe,jdoe,2022-01-30,world,,,,,,,,,,,,,,,, +email,,,,,,,,jdoe@example.com,personal,Johns email,,,,,,,,,,,,, +number,,,,,,,,,,John's number,+49123123123,,,,,,,,,,,, +address,,,,,,,,,,John's home address,,1 some street,de,DE-0-NW,some city,123123,John,1,1,1,123,, +website,,,,,,,,,,Website,,,,,,,,,,,,,website.com`; diff --git a/spec/common/importers/testData/dashlaneCsv/securenotes.csv.ts b/spec/common/importers/testData/dashlaneCsv/securenotes.csv.ts new file mode 100644 index 00000000..22a3b904 --- /dev/null +++ b/spec/common/importers/testData/dashlaneCsv/securenotes.csv.ts @@ -0,0 +1,2 @@ +export const secureNoteData = `title,note +01,test`; From 18b954614c4c5f487662814ec4a19497223c635a Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Mon, 7 Mar 2022 23:11:23 +0100 Subject: [PATCH 115/120] Remove Dashlane json importer from the featured list (#711) --- common/src/enums/importOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/enums/importOptions.ts b/common/src/enums/importOptions.ts index 42f9619e..6535b133 100644 --- a/common/src/enums/importOptions.ts +++ b/common/src/enums/importOptions.ts @@ -8,7 +8,6 @@ export const featuredImportOptions = [ { id: "bitwardencsv", name: "Bitwarden (csv)" }, { id: "chromecsv", name: "Chrome (csv)" }, { id: "dashlanecsv", name: "Dashlane (csv)" }, - { id: "dashlanejson", name: "Dashlane (json)" }, { id: "firefoxcsv", name: "Firefox (csv)" }, { id: "keepass2xml", name: "KeePass 2 (xml)" }, { id: "lastpasscsv", name: "LastPass (csv)" }, @@ -21,6 +20,7 @@ export const regularImportOptions = [ { id: "1password1pif", name: "1Password (1pif)" }, { id: "1passwordwincsv", name: "1Password 6 and 7 Windows (csv)" }, { id: "1passwordmaccsv", name: "1Password 6 and 7 Mac (csv)" }, + { id: "dashlanejson", name: "Dashlane (json)" }, { id: "roboformcsv", name: "RoboForm (csv)" }, { id: "keepercsv", name: "Keeper (csv)" }, // Temporarily remove this option for the Feb release From fa3a95fed0100f66c0a76875cbd937e3754d83aa Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Mon, 7 Mar 2022 23:20:50 +0100 Subject: [PATCH 116/120] Fixes and improvements to MykiCsvImporter (#707) * Add test suite for existing importer * Fix 2fa-seed not copied on login records * Fix secure note title not being set * Add support for importing 2FA file * Fixed casing on import of MykiCsvImporter * Import all unmapped fields as customFields * WIP: Add import of UserIdCard * Add support for IdCards --- common/src/importers/mykiCsvImporter.ts | 87 ++- spec/common/importers/mykiCsvImporter.spec.ts | 633 ++++++++++++++++++ .../testData/mykiCsv/UserAccount.csv.ts | 3 + .../testData/mykiCsv/UserCreditCard.csv.ts | 3 + .../testData/mykiCsv/UserIdCard.csv.ts | 16 + .../testData/mykiCsv/UserIdentity.csv.ts | 3 + .../testData/mykiCsv/UserNote.csv.ts | 3 + .../testData/mykiCsv/UserTwofa.csv.ts | 3 + 8 files changed, 749 insertions(+), 2 deletions(-) create mode 100644 spec/common/importers/mykiCsvImporter.spec.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserAccount.csv.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserCreditCard.csv.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserIdCard.csv.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserIdentity.csv.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserNote.csv.ts create mode 100644 spec/common/importers/testData/mykiCsv/UserTwofa.csv.ts diff --git a/common/src/importers/mykiCsvImporter.ts b/common/src/importers/mykiCsvImporter.ts index a40c9f0b..d9a05e1e 100644 --- a/common/src/importers/mykiCsvImporter.ts +++ b/common/src/importers/mykiCsvImporter.ts @@ -2,12 +2,42 @@ import { CipherType } from "../enums/cipherType"; import { SecureNoteType } from "../enums/secureNoteType"; import { ImportResult } from "../models/domain/importResult"; import { CardView } from "../models/view/cardView"; +import { CipherView } from "../models/view/cipherView"; import { IdentityView } from "../models/view/identityView"; import { SecureNoteView } from "../models/view/secureNoteView"; import { BaseImporter } from "./baseImporter"; import { Importer } from "./importer"; +const mappedBaseColumns = ["nickname", "additionalInfo"]; +const _mappedUserAccountColumns = new Set( + mappedBaseColumns.concat(["url", "username", "password", "twofaSecret"]) +); +const _mappedCreditCardColumns = new Set( + mappedBaseColumns.concat(["cardNumber", "cardName", "exp_month", "exp_year", "cvv"]) +); + +const _mappedIdentityColumns = new Set( + mappedBaseColumns.concat([ + "title", + "firstName", + "middleName", + "lastName", + "email", + "firstAddressLine", + "secondAddressLine", + "city", + "country", + "zipCode", + ]) +); + +const _mappedIdCardColumns = new Set(mappedBaseColumns.concat(["idName", "idNumber", "idCountry"])); + +const _mappedTwoFaColumns = new Set(mappedBaseColumns.concat(["authToken"])); + +const _mappedUserNoteColumns = new Set(mappedBaseColumns.concat(["content"])); + export class MykiCsvImporter extends BaseImporter implements Importer { parse(data: string): Promise { const result = new ImportResult(); @@ -27,7 +57,14 @@ export class MykiCsvImporter extends BaseImporter implements Importer { cipher.login.uris = this.makeUriArray(value.url); cipher.login.username = this.getValueOrDefault(value.username); cipher.login.password = this.getValueOrDefault(value.password); - cipher.login.totp = this.getValueOrDefault(value.twoFactAuthToken); + cipher.login.totp = this.getValueOrDefault(value.twofaSecret); + + this.importUnmappedFields(cipher, value, _mappedUserAccountColumns); + } else if (value.authToken !== undefined) { + // TwoFA + cipher.login.totp = this.getValueOrDefault(value.authToken); + + this.importUnmappedFields(cipher, value, _mappedTwoFaColumns); } else if (value.cardNumber !== undefined) { // Cards cipher.card = new CardView(); @@ -38,6 +75,8 @@ export class MykiCsvImporter extends BaseImporter implements Importer { cipher.card.expMonth = this.getValueOrDefault(value.exp_month); cipher.card.expYear = this.getValueOrDefault(value.exp_year); cipher.card.code = this.getValueOrDefault(value.cvv); + + this.importUnmappedFields(cipher, value, _mappedCreditCardColumns); } else if (value.firstName !== undefined) { // Identities cipher.identity = new IdentityView(); @@ -53,13 +92,49 @@ export class MykiCsvImporter extends BaseImporter implements Importer { cipher.identity.city = this.getValueOrDefault(value.city); cipher.identity.country = this.getValueOrDefault(value.country); cipher.identity.postalCode = this.getValueOrDefault(value.zipCode); + + this.importUnmappedFields(cipher, value, _mappedIdentityColumns); + } else if (value.idType !== undefined) { + // IdCards + + cipher.identity = new IdentityView(); + cipher.type = CipherType.Identity; + this.processFullName(cipher, value.idName); + cipher.identity.country = this.getValueOrDefault(value.idCountry); + + switch (value.idType) { + // case "Driver's License": + // case "ID Card": + // case "Outdoor License": + // case "Software License": + // case "Tax Number": + // case "Bank Account": + // case "Insurance Card": + // case "Health Card": + // case "Membership": + // case "Database": + // case "Reward Program": + // case "Tour Visa": + case "Passport": + cipher.identity.passportNumber = value.idNumber; + break; + case "Social Security": + cipher.identity.ssn = value.idNumber; + break; + default: + cipher.identity.licenseNumber = value.idNumber; + break; + } + + this.importUnmappedFields(cipher, value, _mappedIdCardColumns); } else if (value.content !== undefined) { // Notes cipher.secureNote = new SecureNoteView(); cipher.type = CipherType.SecureNote; cipher.secureNote.type = SecureNoteType.Generic; - cipher.name = this.getValueOrDefault(value.title, "--"); cipher.notes = this.getValueOrDefault(value.content); + + this.importUnmappedFields(cipher, value, _mappedUserNoteColumns); } else { return; } @@ -71,4 +146,12 @@ export class MykiCsvImporter extends BaseImporter implements Importer { result.success = true; return Promise.resolve(result); } + + importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) { + const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x)); + unmappedFields.forEach((key) => { + const item = row as any; + this.processKvp(cipher, key, item[key]); + }); + } } diff --git a/spec/common/importers/mykiCsvImporter.spec.ts b/spec/common/importers/mykiCsvImporter.spec.ts new file mode 100644 index 00000000..d9538ee7 --- /dev/null +++ b/spec/common/importers/mykiCsvImporter.spec.ts @@ -0,0 +1,633 @@ +import { CipherType } from "jslib-common/enums/cipherType"; +import { MykiCsvImporter as Importer } from "jslib-common/importers/mykiCsvImporter"; +import { CipherView } from "jslib-common/models/view/cipherView"; + +import { userAccountData } from "./testData/mykiCsv/UserAccount.csv"; +import { userCreditCardData } from "./testData/mykiCsv/UserCreditCard.csv"; +import { userIdCardData } from "./testData/mykiCsv/UserIdCard.csv"; +import { userIdentityData } from "./testData/mykiCsv/UserIdentity.csv"; +import { userNoteData } from "./testData/mykiCsv/UserNote.csv"; +import { userTwoFaData } from "./testData/mykiCsv/UserTwofa.csv"; + +function expectDriversLicense(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Joe User's nickname"); + expect(cipher.notes).toBe("Additional information"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("123456"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Driver's License"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("02/02/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("02/02/2024"); +} + +function expectPassport(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Passport ID card"); + expect(cipher.notes).toBe("Additional information field"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.passportNumber).toBe("1234567"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Passport"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectSocialSecurity(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Social Security ID card"); + expect(cipher.notes).toBe("Additional information field text"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.ssn).toBe("123455678"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Social Security"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectIdCard(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("ID card type ID card"); + expect(cipher.notes).toBe("Additional Information field text"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("1234566"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("ID Card"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectTaxNumber(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Tax number ID card"); + expect(cipher.notes).toBe("Additinoal information text field"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("12345678"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Tax Number"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectBankAccount(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Bank account ID card"); + expect(cipher.notes).toBe("Additional text information here"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("12344556677"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Bank Account"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectInsuranceCard(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Insurance card ID card"); + expect(cipher.notes).toBe("Additional information text goes here"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("123456677"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Insurance Card"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2022"); +} + +function expectHealthCard(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Health card Id card"); + expect(cipher.notes).toBe("More info"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("1234670"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Health Card"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectMembershipCard(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Membership ID card"); + expect(cipher.notes).toBe("Add'l info"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("12345709"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Membership"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectDatabase(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Database ID card"); + expect(cipher.notes).toBe("Addin't info"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("12345089u"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Database"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectOutdoorLicense(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Outdoor license ID card"); + expect(cipher.notes).toBe("Additional info"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("123890090"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Outdoor License"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectRewardProgram(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Reward program Id card"); + expect(cipher.notes).toBe("1234890"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("12345890b"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Reward Program"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectSoftwareLicense(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Software license ID card"); + expect(cipher.notes).toBe( + "It seems like the fields don't change, which makes it pretty useless that they have so many ID card types." + ); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("1234567c"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Software License"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +function expectTourVisa(cipher: CipherView) { + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Tour visa ID card"); + expect(cipher.notes).toBe("Additional Informaion text"); + + expect(cipher.identity.fullName).toBe("Joe M User"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.licenseNumber).toBe("123456lkhj"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(5); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toEqual("tags"); + expect(cipher.fields[1].value).toEqual("someTag"); + + expect(cipher.fields[2].name).toEqual("idType"); + expect(cipher.fields[2].value).toEqual("Tour Visa"); + + expect(cipher.fields[3].name).toEqual("idIssuanceDate"); + expect(cipher.fields[3].value).toEqual("03/07/2022"); + + expect(cipher.fields[4].name).toEqual("idExpirationDate"); + expect(cipher.fields[4].value).toEqual("03/07/2028"); +} + +describe("Myki CSV Importer", () => { + let importer: Importer; + beforeEach(() => { + importer = new Importer(); + }); + + it("should parse userAccount records", async () => { + const result = await importer.parse(userAccountData); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + + expect(cipher.name).toEqual("PasswordNickname"); + expect(cipher.login.username).toEqual("user.name@email.com"); + expect(cipher.login.password).toEqual("abc123"); + expect(cipher.login.totp).toEqual("someTOTPSeed"); + expect(cipher.login.uris.length).toEqual(1); + const uriView = cipher.login.uris.shift(); + expect(uriView.uri).toEqual("http://www.google.com"); + expect(cipher.notes).toEqual("This is the additional information text."); + + expect(cipher.fields.length).toBe(2); + + expect(cipher.fields[0].name).toBe("status"); + expect(cipher.fields[0].value).toBe("active"); + + expect(cipher.fields[1].name).toBe("tags"); + expect(cipher.fields[1].value).toBe("someTag"); + }); + + it("should parse userTwoFa records", async () => { + const result = await importer.parse(userTwoFaData); + expect(result != null).toBe(true); + + const cipher = result.ciphers.shift(); + + expect(cipher.name).toEqual("2FA nickname"); + expect(cipher.login.username).toBeNull(); + expect(cipher.login.password).toBeNull(); + expect(cipher.login.totp).toBe("someTOTPSeed"); + expect(cipher.notes).toEqual("Additional information field content."); + + expect(cipher.fields.length).toBe(2); + + expect(cipher.fields[0].name).toBe("status"); + expect(cipher.fields[0].value).toBe("active"); + + expect(cipher.fields[1].name).toBe("tags"); + expect(cipher.fields[1].value).toBe("someTag"); + }); + + it("should parse creditCard records", async () => { + const result = await importer.parse(userCreditCardData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.ciphers.length).toBe(1); + + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.Card); + expect(cipher.name).toBe("Visa test card"); + expect(cipher.card.brand).toBe("Visa"); + expect(cipher.card.cardholderName).toBe("Joe User"); + expect(cipher.card.number).toBe("4111111111111111"); + expect(cipher.card.code).toBe("222"); + expect(cipher.card.expMonth).toBe("04"); + expect(cipher.card.expYear).toBe("24"); + + expect(cipher.notes).toBe("This is the additional information field"); + + expect(cipher.fields.length).toBe(2); + + expect(cipher.fields[0].name).toBe("status"); + expect(cipher.fields[0].value).toBe("active"); + + expect(cipher.fields[1].name).toBe("tags"); + expect(cipher.fields[1].value).toBe("someTag"); + }); + + it("should parse identity records", async () => { + const result = await importer.parse(userIdentityData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.Identity); + expect(cipher.name).toBe("Joe User's nickname"); + expect(cipher.identity.fullName).toBe("Mr Joe M User"); + expect(cipher.identity.title).toBe("Mr"); + expect(cipher.identity.firstName).toBe("Joe"); + expect(cipher.identity.middleName).toBe("M"); + expect(cipher.identity.lastName).toBe("User"); + expect(cipher.identity.email).toBe("joe.user@email.com"); + + expect(cipher.identity.address1).toBe("1 Example House"); + expect(cipher.identity.address2).toBe("Suite 300"); + + expect(cipher.identity.city).toBe("Portland"); + expect(cipher.identity.postalCode).toBe("04101"); + expect(cipher.identity.country).toBe("United States"); + + expect(cipher.fields.length).toBe(4); + + expect(cipher.fields[0].name).toEqual("status"); + expect(cipher.fields[0].value).toEqual("active"); + + expect(cipher.fields[1].name).toBe("tags"); + expect(cipher.fields[1].value).toBe("someTag"); + + expect(cipher.fields[2].name).toEqual("gender"); + expect(cipher.fields[2].value).toEqual("Male"); + + expect(cipher.fields[3].name).toEqual("number"); + expect(cipher.fields[3].value).toEqual("2223334444"); + }); + + it("should parse secureNote records", async () => { + const result = await importer.parse(userNoteData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + expect(result.ciphers.length).toBe(1); + + const cipher = result.ciphers.shift(); + expect(cipher.type).toBe(CipherType.SecureNote); + expect(cipher.name).toBe("The title of a secure note"); + expect(cipher.notes).toBe("The content of a secure note. Lorem ipsum, etc."); + + expect(cipher.fields.length).toBe(1); + + expect(cipher.fields[0].name).toBe("status"); + expect(cipher.fields[0].value).toBe("active"); + }); + + it("should parse idCard records", async () => { + const result = await importer.parse(userIdCardData); + + expect(result).not.toBeNull(); + expect(result.success).toBe(true); + + expect(result.ciphers.length).toBe(14); + + // Driver's license + const cipher = result.ciphers.shift(); + expectDriversLicense(cipher); + + // Passport + const cipher2 = result.ciphers.shift(); + expectPassport(cipher2); + + // Social Security + const cipher3 = result.ciphers.shift(); + expectSocialSecurity(cipher3); + + // Id Card + const cipher4 = result.ciphers.shift(); + expectIdCard(cipher4); + + // Tax Number + const cipher5 = result.ciphers.shift(); + expectTaxNumber(cipher5); + + // Bank Account + const cipher6 = result.ciphers.shift(); + expectBankAccount(cipher6); + + // Insurance card + const cipher7 = result.ciphers.shift(); + expectInsuranceCard(cipher7); + + // Health card + const cipher8 = result.ciphers.shift(); + expectHealthCard(cipher8); + + // Membership card + const cipher9 = result.ciphers.shift(); + expectMembershipCard(cipher9); + + // Database card + const cipher10 = result.ciphers.shift(); + expectDatabase(cipher10); + + // Outdoor license + const cipher11 = result.ciphers.shift(); + expectOutdoorLicense(cipher11); + + // Reward program + const cipher12 = result.ciphers.shift(); + expectRewardProgram(cipher12); + + // Software license + const cipher13 = result.ciphers.shift(); + expectSoftwareLicense(cipher13); + + // Tour visa + const cipher14 = result.ciphers.shift(); + expectTourVisa(cipher14); + }); +}); diff --git a/spec/common/importers/testData/mykiCsv/UserAccount.csv.ts b/spec/common/importers/testData/mykiCsv/UserAccount.csv.ts new file mode 100644 index 00000000..5ccf0971 --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserAccount.csv.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ +export const userAccountData = `nickname,url,username,password,additionalInfo,twofaSecret,status,tags +PasswordNickname,www.google.com,user.name@email.com,abc123,This is the additional information text.,someTOTPSeed,active,someTag`; diff --git a/spec/common/importers/testData/mykiCsv/UserCreditCard.csv.ts b/spec/common/importers/testData/mykiCsv/UserCreditCard.csv.ts new file mode 100644 index 00000000..0b127627 --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserCreditCard.csv.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ +export const userCreditCardData = `nickname,status,tags,cardNumber,cardName,exp_month,exp_year,cvv,additionalInfo +Visa test card,active,someTag,4111111111111111,Joe User,04,24,222,This is the additional information field`; diff --git a/spec/common/importers/testData/mykiCsv/UserIdCard.csv.ts b/spec/common/importers/testData/mykiCsv/UserIdCard.csv.ts new file mode 100644 index 00000000..8f3fa600 --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserIdCard.csv.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +export const userIdCardData = `nickname,status,tags,idType,idNumber,idName,idIssuanceDate,idExpirationDate,idCountry,additionalInfo +Joe User's nickname,active,someTag,Driver's License,123456,Joe M User,02/02/2022,02/02/2024,United States,Additional information +Passport ID card,active,someTag,Passport,1234567,Joe M User,03/07/2022,03/07/2028,United States,Additional information field +Social Security ID card,active,someTag,Social Security,123455678,Joe M User,03/07/2022,03/07/2028,United States,Additional information field text +ID card type ID card,active,someTag,ID Card,1234566,Joe M User,03/07/2022,03/07/2028,United States,Additional Information field text +Tax number ID card,active,someTag,Tax Number,12345678,Joe M User,03/07/2022,03/07/2028,United States,Additinoal information text field +Bank account ID card,active,someTag,Bank Account,12344556677,Joe M User,03/07/2022,03/07/2028,United States,Additional text information here +Insurance card ID card,active,someTag,Insurance Card,123456677,Joe M User,03/07/2022,03/07/2022,United States,Additional information text goes here +Health card Id card,active,someTag,Health Card,1234670,Joe M User,03/07/2022,03/07/2028,United States,More info +Membership ID card,active,someTag,Membership,12345709,Joe M User,03/07/2022,03/07/2028,United States,Add'l info +Database ID card,active,someTag,Database,12345089u,Joe M User,03/07/2022,03/07/2028,United States,Addin't info +Outdoor license ID card,active,someTag,Outdoor License,123890090,Joe M User,03/07/2022,03/07/2028,United States,Additional info +Reward program Id card,active,someTag,Reward Program,12345890b,Joe M User,03/07/2022,03/07/2028,United States,1234890 +Software license ID card,active,someTag,Software License,1234567c,Joe M User,03/07/2022,03/07/2028,United States,"It seems like the fields don't change, which makes it pretty useless that they have so many ID card types." +Tour visa ID card,active,someTag,Tour Visa,123456lkhj,Joe M User,03/07/2022,03/07/2028,United States,Additional Informaion text`; diff --git a/spec/common/importers/testData/mykiCsv/UserIdentity.csv.ts b/spec/common/importers/testData/mykiCsv/UserIdentity.csv.ts new file mode 100644 index 00000000..13afb16d --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserIdentity.csv.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ +export const userIdentityData = `nickname,status,tags,firstName,middleName,lastName,email,firstAddressLine,secondAddressLine,title,gender,number,city,country,zipCode,additionalInfo +Joe User's nickname,active,someTag,Joe,M,User,joe.user@email.com,1 Example House,Suite 300,Mr,Male,2223334444,Portland,United States,04101,Additional information field`; diff --git a/spec/common/importers/testData/mykiCsv/UserNote.csv.ts b/spec/common/importers/testData/mykiCsv/UserNote.csv.ts new file mode 100644 index 00000000..8094c92f --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserNote.csv.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ +export const userNoteData = `nickname,status,content +The title of a secure note,active,"The content of a secure note. Lorem ipsum, etc."`; diff --git a/spec/common/importers/testData/mykiCsv/UserTwofa.csv.ts b/spec/common/importers/testData/mykiCsv/UserTwofa.csv.ts new file mode 100644 index 00000000..68cfd44f --- /dev/null +++ b/spec/common/importers/testData/mykiCsv/UserTwofa.csv.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ +export const userTwoFaData = `nickname,status,tags,authToken,additionalInfo +2FA nickname,active,someTag,someTOTPSeed,"Additional information field content. "`; From 67a4fc85910645f2d05031f7c7d29342475e4648 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 8 Mar 2022 11:50:34 +0100 Subject: [PATCH 117/120] Component Library scaffolding (#625) --- .prettierignore | 1 + components/.browserslistrc | 16 + components/.gitignore | 44 + components/.storybook/main.js | 8 + components/.storybook/preview.js | 25 + components/.storybook/tsconfig.json | 10 + components/.storybook/typings.d.ts | 4 + components/README.md | 27 + components/angular.json | 93 + components/karma.conf.js | 42 + components/package-lock.json | 60805 ++++++++++++++++ components/package.json | 55 + components/src/app/app.component.ts | 9 + components/src/app/app.module.ts | 13 + components/src/badge/badge.component.ts | 39 + components/src/badge/badge.module.ts | 11 + components/src/badge/badge.stories.ts | 46 + components/src/badge/index.ts | 2 + components/src/button/Button.stories.ts | 49 + .../src/button/button.component.spec.ts | 57 + components/src/button/button.component.ts | 77 + components/src/button/button.module.ts | 11 + components/src/button/index.ts | 2 + components/src/callout/callout.component.html | 14 + .../src/callout/callout.component.spec.ts | 59 + components/src/callout/callout.component.ts | 63 + components/src/callout/callout.module.ts | 11 + components/src/callout/callout.stories.ts | 59 + components/src/callout/index.ts | 2 + components/src/favicon.ico | Bin 0 -> 948 bytes components/src/index.html | 13 + components/src/index.ts | 3 + components/src/main.ts | 7 + components/src/polyfills.ts | 52 + .../src/stories/Introduction.stories.mdx | 195 + components/src/styles.css | 11 + components/src/styles.scss | 42 + components/src/test.ts | 28 + components/src/tw-theme.css | 64 + components/src/utils/i18n-mock.service.ts | 19 + components/tailwind.config.base.js | 59 + components/tailwind.config.js | 6 + components/tsconfig.app.json | 10 + components/tsconfig.json | 32 + components/tsconfig.spec.json | 10 + 45 files changed, 62205 insertions(+) create mode 100644 components/.browserslistrc create mode 100644 components/.gitignore create mode 100644 components/.storybook/main.js create mode 100644 components/.storybook/preview.js create mode 100644 components/.storybook/tsconfig.json create mode 100644 components/.storybook/typings.d.ts create mode 100644 components/README.md create mode 100644 components/angular.json create mode 100644 components/karma.conf.js create mode 100644 components/package-lock.json create mode 100644 components/package.json create mode 100644 components/src/app/app.component.ts create mode 100644 components/src/app/app.module.ts create mode 100644 components/src/badge/badge.component.ts create mode 100644 components/src/badge/badge.module.ts create mode 100644 components/src/badge/badge.stories.ts create mode 100644 components/src/badge/index.ts create mode 100644 components/src/button/Button.stories.ts create mode 100644 components/src/button/button.component.spec.ts create mode 100644 components/src/button/button.component.ts create mode 100644 components/src/button/button.module.ts create mode 100644 components/src/button/index.ts create mode 100644 components/src/callout/callout.component.html create mode 100644 components/src/callout/callout.component.spec.ts create mode 100644 components/src/callout/callout.component.ts create mode 100644 components/src/callout/callout.module.ts create mode 100644 components/src/callout/callout.stories.ts create mode 100644 components/src/callout/index.ts create mode 100644 components/src/favicon.ico create mode 100644 components/src/index.html create mode 100644 components/src/index.ts create mode 100644 components/src/main.ts create mode 100644 components/src/polyfills.ts create mode 100644 components/src/stories/Introduction.stories.mdx create mode 100644 components/src/styles.css create mode 100644 components/src/styles.scss create mode 100644 components/src/test.ts create mode 100644 components/src/tw-theme.css create mode 100644 components/src/utils/i18n-mock.service.ts create mode 100644 components/tailwind.config.base.js create mode 100644 components/tailwind.config.js create mode 100644 components/tsconfig.app.json create mode 100644 components/tsconfig.json create mode 100644 components/tsconfig.spec.json diff --git a/.prettierignore b/.prettierignore index 17741a65..14951fa5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ # Build directories dist +.angular coverage # Github Workflows diff --git a/components/.browserslistrc b/components/.browserslistrc new file mode 100644 index 00000000..4f9ac269 --- /dev/null +++ b/components/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/components/.gitignore b/components/.gitignore new file mode 100644 index 00000000..1edd399c --- /dev/null +++ b/components/.gitignore @@ -0,0 +1,44 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +documentation.json + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/components/.storybook/main.js b/components/.storybook/main.js new file mode 100644 index 00000000..e7c9115a --- /dev/null +++ b/components/.storybook/main.js @@ -0,0 +1,8 @@ +module.exports = { + stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], + addons: ["@storybook/addon-links", "@storybook/addon-essentials"], + framework: "@storybook/angular", + core: { + builder: "webpack5", + }, +}; diff --git a/components/.storybook/preview.js b/components/.storybook/preview.js new file mode 100644 index 00000000..98d2d5b8 --- /dev/null +++ b/components/.storybook/preview.js @@ -0,0 +1,25 @@ +import { setCompodocJson } from "@storybook/addon-docs/angular"; +import { componentWrapperDecorator, addDecorator } from "@storybook/angular"; + +import docJson from "../documentation.json"; +setCompodocJson(docJson); + +export const parameters = { + actions: { argTypesRegex: "^on[A-Z].*" }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + docs: { inlineStories: true }, +}; + +const decorator = componentWrapperDecorator( + (story) => ` +
${story}
+
${story}
+` +); + +addDecorator(decorator); diff --git a/components/.storybook/tsconfig.json b/components/.storybook/tsconfig.json new file mode 100644 index 00000000..330b5861 --- /dev/null +++ b/components/.storybook/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.app.json", + "compilerOptions": { + "types": ["node"], + "allowSyntheticDefaultImports": true + }, + "exclude": ["../src/test.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"], + "include": ["../src/**/*", "../projects/**/*"], + "files": ["./typings.d.ts"] +} diff --git a/components/.storybook/typings.d.ts b/components/.storybook/typings.d.ts new file mode 100644 index 00000000..c94d67b1 --- /dev/null +++ b/components/.storybook/typings.d.ts @@ -0,0 +1,4 @@ +declare module "*.md" { + const content: string; + export default content; +} diff --git a/components/README.md b/components/README.md new file mode 100644 index 00000000..ce39c48f --- /dev/null +++ b/components/README.md @@ -0,0 +1,27 @@ +# Components + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.3. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/components/angular.json b/components/angular.json new file mode 100644 index 00000000..e1a44e08 --- /dev/null +++ b/components/angular.json @@ -0,0 +1,93 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "components": { + "projectType": "application", + "schematics": { + "@schematics/angular:application": { + "strict": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/components", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["src/styles.scss", "src/styles.css"], + "stylePreprocessorOptions": { + "includePaths": ["src/styles"] + }, + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "components:build:production" + }, + "development": { + "browserTarget": "components:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "components:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["src/styles.css"], + "scripts": [] + } + } + } + } + }, + "defaultProject": "components" +} diff --git a/components/karma.conf.js b/components/karma.conf.js new file mode 100644 index 00000000..557f1b59 --- /dev/null +++ b/components/karma.conf.js @@ -0,0 +1,42 @@ +/* eslint-disable */ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: "", + frameworks: ["jasmine", "@angular-devkit/build-angular"], + plugins: [ + require("karma-jasmine"), + require("karma-chrome-launcher"), + require("karma-jasmine-html-reporter"), + require("karma-coverage"), + require("@angular-devkit/build-angular/plugins/karma"), + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false, // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true, // removes the duplicated traces + }, + coverageReporter: { + dir: require("path").join(__dirname, "./coverage/components"), + subdir: ".", + reporters: [{ type: "html" }, { type: "text-summary" }], + }, + reporters: ["progress", "kjhtml"], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ["Chrome"], + singleRun: false, + restartOnFileChange: true, + }); +}; diff --git a/components/package-lock.json b/components/package-lock.json new file mode 100644 index 00000000..86bdc41e --- /dev/null +++ b/components/package-lock.json @@ -0,0 +1,60805 @@ +{ + "name": "components", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "components", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@bitwarden/jslib-angular": "file:../angular", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^12.2.13", + "@angular/cli": "^12.2.13", + "@angular/compiler-cli": "^12.2.13", + "@angular/elements": "^12.2.13", + "@babel/core": "^7.16.10", + "@compodoc/compodoc": "^1.1.16", + "@storybook/addon-actions": "^6.4.18", + "@storybook/addon-essentials": "^6.4.18", + "@storybook/addon-links": "^6.4.18", + "@storybook/angular": "^6.4.18", + "@storybook/builder-webpack5": "^6.4.18", + "@storybook/manager-webpack5": "^6.4.18", + "@types/jasmine": "~3.10.0", + "@types/node": "^12.11.1", + "@webcomponents/custom-elements": "^1.5.0", + "autoprefixer": "^10.4.2", + "babel-loader": "^8.2.3", + "jasmine-core": "~3.10.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.1.0", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "postcss": "^8.4.6", + "tailwindcss": "^3.0.18", + "typescript": "~4.3.5" + } + }, + "../angular": { + "name": "@bitwarden/jslib-common", + "version": "0.0.0", + "license": "GPL-3.0", + "dependencies": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", + "@bitwarden/jslib-common": "file:../common", + "duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git", + "rxjs": "^7.4.0", + "tldjs": "^2.3.1", + "zone.js": "0.11.4" + }, + "devDependencies": { + "@types/duo_web_sdk": "^2.7.1", + "rimraf": "^3.0.2", + "typescript": "4.3.5" + } + }, + "node_modules/@aduh95/viz.js": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.5.0.tgz", + "integrity": "sha512-ahLdpRAoGsdgEfy2SGV2wnnHrBSLDHuwA32v+BoNGnz1gqajr8VMzF8y6mIQt28hHi4LQ272wqSi78DK4YdT2g==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", + "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "1.0.0", + "sourcemap-codec": "1.4.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1302.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1302.3.tgz", + "integrity": "sha512-0m8jMKrFfIqsYt33zTUwSmyekyfuS67hna08RQ6USjzWQSE3z4S8ulCUARSjM6AzdMblX+whfy56nJUpT17NSA==", + "dev": true, + "peer": true, + "dependencies": { + "@angular-devkit/core": "13.2.3", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "peer": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/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, + "peer": true + }, + "node_modules/@angular-devkit/build-angular": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.16.tgz", + "integrity": "sha512-0UlSaX3LngsBUp6Da69XlptyeZn7CTt/3sKijQDtkEw/J37vpMcXYD4nUuU7q7mVMoPQwMyPWdF+JBsBFz6f7A==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "1.0.1", + "@angular-devkit/architect": "0.1202.16", + "@angular-devkit/build-optimizer": "0.1202.16", + "@angular-devkit/build-webpack": "0.1202.16", + "@angular-devkit/core": "12.2.16", + "@babel/core": "7.14.8", + "@babel/generator": "7.14.8", + "@babel/helper-annotate-as-pure": "7.14.5", + "@babel/plugin-proposal-async-generator-functions": "7.14.7", + "@babel/plugin-transform-async-to-generator": "7.14.5", + "@babel/plugin-transform-runtime": "7.14.5", + "@babel/preset-env": "7.14.8", + "@babel/runtime": "7.14.8", + "@babel/template": "7.14.5", + "@discoveryjs/json-ext": "0.5.3", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "12.2.16", + "ansi-colors": "4.1.1", + "babel-loader": "8.2.2", + "browserslist": "^4.9.1", + "cacache": "15.2.0", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "9.0.1", + "core-js": "3.16.0", + "critters": "0.0.12", + "css-loader": "6.2.0", + "css-minimizer-webpack-plugin": "3.0.2", + "esbuild-wasm": "0.13.8", + "find-cache-dir": "3.3.1", + "glob": "7.1.7", + "https-proxy-agent": "5.0.0", + "inquirer": "8.1.2", + "karma-source-map-support": "1.4.0", + "less": "4.1.1", + "less-loader": "10.0.1", + "license-webpack-plugin": "2.3.20", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "2.4.2", + "minimatch": "3.0.4", + "open": "8.2.1", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "6.0.1", + "piscina": "3.1.0", + "postcss": "8.3.6", + "postcss-import": "14.0.2", + "postcss-loader": "6.1.1", + "postcss-preset-env": "6.7.0", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "4.0.0", + "rxjs": "6.6.7", + "sass": "1.36.0", + "sass-loader": "12.1.0", + "semver": "7.3.5", + "source-map-loader": "3.0.0", + "source-map-support": "0.5.19", + "style-loader": "3.2.1", + "stylus": "0.54.8", + "stylus-loader": "6.1.0", + "terser": "5.7.1", + "terser-webpack-plugin": "5.1.4", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.3.0", + "webpack": "5.50.0", + "webpack-dev-middleware": "5.0.0", + "webpack-dev-server": "3.11.3", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "1.5.2" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.13.8" + }, + "peerDependencies": { + "@angular/compiler-cli": "^12.0.0", + "@angular/localize": "^12.0.0", + "@angular/service-worker": "^12.0.0", + "karma": "^6.3.0", + "ng-packagr": "^12.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0", + "tslint": "^6.1.0", + "typescript": "~4.2.3 || ~4.3.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "tslint": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "dependencies": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", + "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.8", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/@babel/core/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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/@angular-devkit/build-angular/node_modules/ajv-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/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" + } + }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs/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/@angular-devkit/build-angular/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.50.0.tgz", + "integrity": "sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag==", + "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.0", + "es-module-lexer": "^0.7.1", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/webpack/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/@angular-devkit/build-angular/node_modules/webpack/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/@angular-devkit/build-angular/node_modules/webpack/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/@angular-devkit/build-angular/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/@angular-devkit/build-optimizer": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.16.tgz", + "integrity": "sha512-7DO195vDwOnCCHrzjr6ajSNkvCzW6O/ERbVezCA46NZuS9lW9LnWpP3CE9iDnhzup7hjrM336/dXmYJO8Hw1MA==", + "dev": true, + "dependencies": { + "source-map": "0.7.3", + "tslib": "2.3.0", + "typescript": "4.3.5" + }, + "bin": { + "build-optimizer": "src/build-optimizer/cli.js" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-optimizer/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.16.tgz", + "integrity": "sha512-Zhnr0+W1og1rtbfKDPxD7jWDL4cg9LA21ls2pJKXc/h+YXdQ5uj4mFg69npL6aY0yver1w2rIz+Il/wdC/W1gw==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1202.16", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^3.1.4" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "dependencies": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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/@angular-devkit/build-webpack/node_modules/ajv-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/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/@angular-devkit/core": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.3.tgz", + "integrity": "sha512-/47RA8qmWzeS60xSdaprIn1MiSv0Iw83t0M9/ENH7irFS5vMAq62NCcwiWXH59pZmvvLbF+7xy/RgYUZLr4nHQ==", + "dev": true, + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/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/@angular-devkit/schematics": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.16.tgz", + "integrity": "sha512-ToyZBCGilSeeLmhAxmeJ0PykmbKLoME+uK78gC64xJtNu9e3oVnmog8b8g9Ay9hTwZJ96HvNa16po11Gfbbn6A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "12.2.16", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "dependencies": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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/@angular-devkit/schematics/node_modules/ajv-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/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/@angular/animations": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.16.tgz", + "integrity": "sha512-Kf6C7Ta+fCMq5DvT9JNVhBkcECrqFa3wumiC6ssGo5sNaEzXz+tlep9ZgEbqfxSn7gAN7L1DgsbS9u0O6tbUkg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/core": "12.2.16" + } + }, + "node_modules/@angular/cdk": { + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", + "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^12.0.0 || ^13.0.0-0", + "@angular/core": "^12.0.0 || ^13.0.0-0", + "rxjs": "^6.5.3 || ^7.0.0" + } + }, + "node_modules/@angular/cli": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.16.tgz", + "integrity": "sha512-4DUi8aHIZWzQycw8SN55ziHhRusHVYJ+2rzsfhy0eDgkry7gYVd4wUn+6Q4D8irywA21soNq1S5JjGAZwRDS6g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/architect": "0.1202.16", + "@angular-devkit/core": "12.2.16", + "@angular-devkit/schematics": "12.2.16", + "@schematics/angular": "12.2.16", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.2", + "ini": "2.0.0", + "inquirer": "8.1.2", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.5", + "npm-pick-manifest": "6.1.1", + "open": "8.2.1", + "ora": "5.4.1", + "pacote": "12.0.2", + "resolve": "1.20.0", + "semver": "7.3.5", + "symbol-observable": "4.0.0", + "uuid": "8.3.2" + }, + "bin": { + "ng": "bin/ng" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "dependencies": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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/@angular/cli/node_modules/ajv-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular/cli/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/@angular/common": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.16.tgz", + "integrity": "sha512-FEqTXTEsnbDInqV1yFlm97Tz1OFqZS5t0TUkm8gzXRgpIce/F/jLwAg0u1VQkgOsno6cNm0xTWPoZgu85NI4ug==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/core": "12.2.16", + "rxjs": "^6.5.3 || ^7.0.0" + } + }, + "node_modules/@angular/compiler": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.16.tgz", + "integrity": "sha512-nsYEw+yu8QyeqPf9nAmG419i1mtGM4v8+U+S3eQHQFXTgJzLymMykWHYu2ETdjUpNSLK6xcIQDBWtWnWSfJjAA==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.16.tgz", + "integrity": "sha512-tlalh8SJvdCWbUPRUR5GamaP+wSc/GuCsoUZpSbcczGKgSlbaEVXUYtVXm8/wuT6Slk2sSEbRs7tXGF2i7qxVw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.2.0", + "yargs": "^17.0.0" + }, + "bin": { + "ivy-ngcc": "ngcc/main-ivy-ngcc.js", + "ng-xi18n": "src/extract_i18n.js", + "ngc": "src/main.js", + "ngcc": "ngcc/main-ngcc.js" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/compiler": "12.2.16", + "typescript": ">=4.2.3 <4.4" + } + }, + "node_modules/@angular/compiler-cli/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/@angular/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.16.tgz", + "integrity": "sha512-jsmvaRdAfng99z2a9mAmkfcsCE1wm+tBYVDxnc5JquSXznwtncjzcoc2X0J0dzrkCDvzFfpTsZ9vehylytBc+A==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.0.0", + "zone.js": "~0.11.4" + } + }, + "node_modules/@angular/elements": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-12.2.16.tgz", + "integrity": "sha512-tOTf6FvnxZg/TjrmsbowHjrTYVl6WhTOQk3G4aYicrf+57a67L12F44Illr7I6preIvH5NepHivMTKN5rNBAmg==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16", + "rxjs": "^6.5.3 || ^7.0.0" + } + }, + "node_modules/@angular/forms": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.16.tgz", + "integrity": "sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/common": "12.2.16", + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16", + "rxjs": "^6.5.3 || ^7.0.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.16.tgz", + "integrity": "sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/animations": "12.2.16", + "@angular/common": "12.2.16", + "@angular/core": "12.2.16" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.16.tgz", + "integrity": "sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0" + }, + "peerDependencies": { + "@angular/common": "12.2.16", + "@angular/compiler": "12.2.16", + "@angular/core": "12.2.16", + "@angular/platform-browser": "12.2.16" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "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/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.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.4.tgz", + "integrity": "sha512-R9x5r4t4+hBqZTmioSnkrW+I6NmbojwjGT8p4G2Gw1thWbXIHGDnmGdLdFw0/7ljucdIrNRp7Npgb4CyBYzzJg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@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/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "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/core/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/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/core/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/@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/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/@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": { + "@babel/types": "^7.14.5" + }, + "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-class-features-plugin/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-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-create-regexp-features-plugin/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-define-polyfill-provider": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", + "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", + "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-function-name/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/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-module-transforms/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/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-remap-async-to-generator/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-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/helper-wrap-function/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/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/helpers/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/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/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "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.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "dev": true, + "dependencies": { + "@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.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-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", + "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-default-from": "^7.16.7" + }, + "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.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@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-private-property-in-object/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/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-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "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-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-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", + "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", + "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-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-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "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-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-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "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-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.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.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.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/@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/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.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "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-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "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-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/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/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^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-react-pure-annotations/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/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.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.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" + } + }, + "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-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^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.14.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz", + "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@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.7", + "@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.7", + "@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.7", + "@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.7", + "@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.6", + "@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.8", + "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.15.0", + "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/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.0.tgz", + "integrity": "sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/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/@babel/register/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@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.3", + "@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/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "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/traverse/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/@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/@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "node_modules/@bitwarden/jslib-angular": { + "resolved": "../angular", + "link": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@compodoc/compodoc": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.18.tgz", + "integrity": "sha512-+AFtcj2U3AJq6r8a2+PTdajIlS7m3pgvDhqgoYZJ4Rg/Zp9xvuDvUJU+5oHu8iHCAWwda3NoLUDjOZMNR8uIKg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/schematics": "^13.1.2", + "@babel/core": "^7.16.7", + "@babel/preset-env": "^7.16.7", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.0", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.10", + "chokidar": "^3.5.2", + "colors": "1.4.0", + "commander": "^8.3.0", + "cosmiconfig": "^7.0.1", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "findit2": "^2.2.3", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "handlebars": "^4.7.7", + "html-entities": "^2.3.2", + "i18next": "^21.6.5", + "inside": "^1.0.0", + "json5": "^2.2.0", + "lodash": "^4.17.21", + "loglevel": "^1.8.0", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "^4.0.9", + "minimist": "^1.2.5", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "^2.12.313", + "pdfmake": "^0.2.4", + "semver": "^7.3.5", + "traverse": "^0.6.6", + "ts-morph": "^13.0.2", + "uuid": "^8.3.2" + }, + "bin": { + "compodoc": "bin/index-cli.js" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.3.tgz", + "integrity": "sha512-+dyC4iKV0huvpjiuz4uyjLNK3FsCIp/Ghv5lXvhG6yok/dCAubsJItJOxi6G16aVCzG/E9zbsDfm9fNMyVOkgQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "13.2.3", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/compodoc/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@compodoc/compodoc/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/@compodoc/compodoc/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/@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@compodoc/live-server/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/@compodoc/ngd-core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.0.tgz", + "integrity": "sha512-nyBH7J7SJJ2AV6OeZhJ02kRtVB7ALnZJKgShjoL9CNmOFEj8AkdhP9qTBIgjaDrbsW5pF4nx32KQL2fT7RFnqw==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "fancy-log": "^1.3.3", + "typescript": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-core/node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@compodoc/ngd-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.0.tgz", + "integrity": "sha512-Jo4VCMzIUtgIAdRmhHhOoRRE01gCjc5CyrUERRx0VgEzkkCm1Wmu/XHSsQP6tSpCYHBjERghqaDqH5DabkR2oQ==", + "dev": true, + "dependencies": { + "@aduh95/viz.js": "^3.1.0", + "@compodoc/ngd-core": "~2.1.0", + "dot": "^1.1.3", + "fs-extra": "^9.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-transformer/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/@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "dev": true, + "dependencies": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "node_modules/@emotion/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", + "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "dev": true, + "dependencies": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "dev": true + }, + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true + }, + "node_modules/@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "dependencies": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "node_modules/@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", + "dev": true + }, + "node_modules/@emotion/styled": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz", + "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==", + "dev": true, + "dependencies": { + "@emotion/styled-base": "^10.3.0", + "babel-plugin-emotion": "^10.0.27" + }, + "peerDependencies": { + "@emotion/core": "^10.0.27", + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/styled-base": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz", + "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + }, + "peerDependencies": { + "@emotion/core": "^10.0.28", + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true + }, + "node_modules/@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", + "dev": true + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "dependencies": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak/node_modules/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 + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/transform/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/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/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/@jest/types/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/@jest/types/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/@jest/types/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/@jridgewell/resolve-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", + "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "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/@jridgewell/trace-mapping/node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "node_modules/@mdx-js/loader": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", + "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "dev": true, + "dependencies": { + "@mdx-js/mdx": "1.6.22", + "@mdx-js/react": "1.6.22", + "loader-utils": "2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dev": true, + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/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/@mdx-js/mdx/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/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@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, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@mrmlnc/readdir-enhanced/node_modules/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/@ngtools/webpack": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.16.tgz", + "integrity": "sha512-Y2wYX0ybpTYCuSXrG7+3FAtL4dSa7D1vMxymeJEmPTf5QcFTbllwcGQ82Q9lzTn3UDxvt6ZqAYfmWZHGp2GQ9w==", + "dev": true, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^12.0.0", + "typescript": "~4.2.3 || ~4.3.2", + "webpack": "^5.30.0" + } + }, + "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/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/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/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.2.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@schematics/angular": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.16.tgz", + "integrity": "sha512-EITPMaRE7iCosf0nyZFOpxTDAiPD3qm4QUxHKcwIaJTrzi89nBoUubw8+pFy5/Gtpadww80YD8ODV64B1bPGMA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "12.2.16", + "@angular-devkit/schematics": "12.2.16", + "jsonc-parser": "3.0.0" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "dependencies": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.14.1 || >=14.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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/@schematics/angular/node_modules/ajv-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/angular/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/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@storybook/addon-actions": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.4.19.tgz", + "integrity": "sha512-GpSvP8xV8GfNkmtGJjfCgaOx6mbjtyTK0aT9FqX9pU0s+KVMmoCTrBh43b7dWrwxxas01yleBK9VpYggzhi/Fw==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.4.19.tgz", + "integrity": "sha512-yn8MTE7lctO48Rdw+DmmA1wKdf5eyAbA/vrug5ske/U2WPgGc65sApzwT8BItZfuyAMjuT5RnCWwd7o6hGRgGQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-controls": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.4.19.tgz", + "integrity": "sha512-JHi5z9i6NsgQLfG5WOeQE1AyOrM+QJLrjT+uOYx40bq+OC1yWHH7qHiphPP8kjJJhCZlaQk1qqXYkkQXgaeHSw==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-docs": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.4.19.tgz", + "integrity": "sha512-OEPyx/5ZXmZOPqIAWoPjlIP8Q/YfNjAmBosA8tmA8t5KCSiq/vpLcAvQhxqK6n0wk/B8Xp67Z8RpLfXjU8R3tw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/loader": "^1.6.22", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/builder-webpack4": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/postinstall": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/source-loader": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "escodegen": "^2.0.0", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "nanoid": "^3.1.23", + "p-limit": "^3.1.0", + "prettier": ">=2.2.1 <=2.3.0", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/angular": "6.4.19", + "@storybook/html": "6.4.19", + "@storybook/react": "6.4.19", + "@storybook/vue": "6.4.19", + "@storybook/vue3": "6.4.19", + "@storybook/web-components": "6.4.19", + "lit": "^2.0.0", + "lit-html": "^1.4.1 || ^2.0.0", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0", + "svelte": "^3.31.2", + "sveltedoc-parser": "^4.1.0", + "vue": "^2.6.10 || ^3.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@storybook/angular": { + "optional": true + }, + "@storybook/html": { + "optional": true + }, + "@storybook/react": { + "optional": true + }, + "@storybook/vue": { + "optional": true + }, + "@storybook/vue3": { + "optional": true + }, + "@storybook/web-components": { + "optional": true + }, + "lit": { + "optional": true + }, + "lit-html": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "svelte": { + "optional": true + }, + "sveltedoc-parser": { + "optional": true + }, + "vue": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.4.19.tgz", + "integrity": "sha512-vbV8sjepMVEuwhTDBHjO3E6vXluG7RiEeozV1QVuS9lGhjQdvUPdZ9rDNUcP6WHhTdEkS/ffTMaGIy1v8oZd7g==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "6.4.19", + "@storybook/addon-backgrounds": "6.4.19", + "@storybook/addon-controls": "6.4.19", + "@storybook/addon-docs": "6.4.19", + "@storybook/addon-measure": "6.4.19", + "@storybook/addon-outline": "6.4.19", + "@storybook/addon-toolbars": "6.4.19", + "@storybook/addon-viewport": "6.4.19", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/node-logger": "6.4.19", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.9.6", + "@storybook/vue": "6.4.19", + "@storybook/web-components": "6.4.19", + "babel-loader": "^8.0.0", + "lit-html": "^1.4.1 || ^2.0.0-rc.3", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@storybook/vue": { + "optional": true + }, + "@storybook/web-components": { + "optional": true + }, + "lit-html": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-links": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.4.19.tgz", + "integrity": "sha512-ebFHYlGDQkHSmI5QEJb1NxGNToVOLgjKkxXUe+JXX7AfHvrWiXVrN/57aOtBPZzj4h2jRPRTZgwR5glhPIlfEQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.4.19.tgz", + "integrity": "sha512-PXeU0AlpnGEvnzBQ6snkzmlIpwE0ci8LdFtL1Vz1V1Xk5fbuETWYuEkPuk1oZ7L9igB9cfT32SyJlE5MC1iaGg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-outline": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.4.19.tgz", + "integrity": "sha512-7ZDXo8qrms6dx0KRP9PInXIie82h5g9XCNrGOUdfZkQPvgofJVj0kNv6p+WOiGiaVfKPC5KMgIofqzBTFV+k6Q==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.4.19.tgz", + "integrity": "sha512-2UtuX9yB1rD/CAZv1etnOnunfPTvsEKEg/J2HYMKE1lhenWC5muIUXvDXCXvwDC65WviPJ56nFNKaKK1Zz7JDg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.4.19.tgz", + "integrity": "sha512-T1hdImxbLj8suQSTbp6HSA1LLHOlqaNK5jjnqzEOoAxY0O8LNPXMJ2jKIeT2fPQ0v+tWGU3tbwf+3xFq0parVQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addons": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.19.tgz", + "integrity": "sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==", + "dev": true, + "dependencies": { + "@storybook/api": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/theming": "6.4.19", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/angular": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-6.4.19.tgz", + "integrity": "sha512-CyJg9reKbk69gkYK1QJhzPydVMeelJ1Fj2VvK5qKL6xEwHSj9buYmbS631i8AC0c9vIWv5lk2BENCLyGqdPYwQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/core": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@types/webpack-env": "^1.16.0", + "autoprefixer": "^9.8.6", + "core-js": "^3.8.2", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "global": "^4.4.0", + "postcss": "^7.0.36", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "react": "16.14.0", + "react-dom": "16.14.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "sass-loader": "^10.1.0", + "strip-json-comments": "3.1.1", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "ts-loader": "^8.0.14", + "tsconfig-paths-webpack-plugin": "^3.3.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "bin": { + "build-storybook": "bin/build.js", + "start-storybook": "bin/index.js", + "storybook-server": "bin/index.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@angular-devkit/architect": ">=0.8.9", + "@angular-devkit/build-angular": ">=0.8.9 || >= 12.0.0", + "@angular-devkit/core": "^0.6.1 || >=7.0.0", + "@angular/cli": ">=6.0.0", + "@angular/common": ">=6.0.0", + "@angular/compiler": ">=6.0.0", + "@angular/compiler-cli": ">=6.0.0", + "@angular/core": ">=6.0.0", + "@angular/forms": ">=6.0.0", + "@angular/platform-browser": ">=6.0.0", + "@angular/platform-browser-dynamic": ">=6.0.0", + "@babel/core": "*", + "@nrwl/workspace": ">=11.1.0", + "rxjs": "^6.0.0 || ^7.4.0", + "typescript": "^3.4.0 || >=4.0.0", + "zone.js": "^0.8.29 || ^0.9.0 || ^0.10.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "@angular/cli": { + "optional": true + }, + "@nrwl/workspace": { + "optional": true + } + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/angular/node_modules/@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 + }, + "node_modules/@storybook/angular/node_modules/@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 + }, + "node_modules/@storybook/angular/node_modules/@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 + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/angular/node_modules/@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 + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/angular/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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/@storybook/angular/node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/@storybook/angular/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, + "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" + } + }, + "node_modules/@storybook/angular/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/angular/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/angular/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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, + "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" + } + }, + "node_modules/@storybook/angular/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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/@storybook/angular/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/@storybook/angular/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/@storybook/angular/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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/@storybook/angular/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/@storybook/angular/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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/@storybook/angular/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/@storybook/angular/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/angular/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/angular/node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "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/@storybook/angular/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/angular/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/angular/node_modules/sass-loader": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.1.tgz", + "integrity": "sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.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/@storybook/angular/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/angular/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/@storybook/angular/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/@storybook/angular/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/angular/node_modules/terser-webpack-plugin/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/angular/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/angular/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/angular/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/angular/node_modules/webpack/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/@storybook/angular/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/angular/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/angular/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/api": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.19.tgz", + "integrity": "sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/builder-webpack4": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.4.19.tgz", + "integrity": "sha512-wxA6SMH11duc9D53aeVVBwrVRemFIoxHp/dOugkkg6ZZFAb4ZmWzf/ENc3vQIZdZpfNRi7IZIZEOfoHc994cmw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack4/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, + "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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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 + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/@storybook/builder-webpack4/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, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/builder-webpack4/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, + "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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/css-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/@storybook/builder-webpack4/node_modules/css-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/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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, + "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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/p-locate/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/@storybook/builder-webpack4/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "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/@storybook/builder-webpack4/node_modules/postcss-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/@storybook/builder-webpack4/node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/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==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true, + "engines": { + "node": ">= 4.3 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/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/@storybook/builder-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/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/@storybook/builder-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/builder-webpack4/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.4.19.tgz", + "integrity": "sha512-AWM4YMN1gPaf7jfntqZTCGpIQ1tF6YRU1JtczPG4ox28rTaO6NMfOBi9aRhBre/59pPOh9bF6u2gu/MIHmRW+w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/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, + "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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/@storybook/builder-webpack5/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, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/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, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/html-webpack-plugin/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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/@storybook/builder-webpack5/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": { + "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" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + }, + "node_modules/@storybook/channel-postmessage": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.4.19.tgz", + "integrity": "sha512-E5h/itFzQ/6M08LR4kqlgqqmeO3tmavI+nUAlZrkCrotpJFNMHE2i0PQHg0TkFJrRDpYcrwD+AjUW4IwdqrisQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^5.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channel-websocket": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.4.19.tgz", + "integrity": "sha512-cXKwQjIXttfdUyZlcHORelUmJ5nUKswsnCA/qy7IRWpZjD8yQJcNk1dYC+tTHDVqFgdRT89pL0hRRB1rlaaR8Q==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^5.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channels": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz", + "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/client-api": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.4.19.tgz", + "integrity": "sha512-OCrT5Um3FDvZnimQKwWtwsaI+5agPwq2i8YiqlofrI/NPMKp0I7DEkCGwE5IRD1Q8BIKqHcMo5tTmfYi0AxyOg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.19", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/client-logger": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz", + "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.4.19.tgz", + "integrity": "sha512-q/0V37YAJA7CNc+wSiiefeM9+3XVk8ixBNylY36QCGJgIeGQ5/79vPyUe6K4lLmsQwpmZsIq1s1Ad5+VbboeOA==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.1.2", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/core": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.4.19.tgz", + "integrity": "sha512-55LOQ/h/kf1jMhjN85t/pIEdIwWEG9yV7bdwv3niVvmoypCxyyjn9/QNK0RKYAeDSUtdm6FVoJ6k5CpxWz2d8w==", + "dev": true, + "dependencies": { + "@storybook/core-client": "6.4.19", + "@storybook/core-server": "6.4.19" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/builder-webpack5": "6.4.19", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-client": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.4.19.tgz", + "integrity": "sha512-rQHRZjhArPleE7/S8ZUolgzwY+hC0smSKX/3PQxO2GcebDjnJj6+iSV3h+aSMHMmTdoCQvjYw9aBpT8scuRe+A==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channel-websocket": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/preview-web": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/ui": "6.4.19", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.4.19.tgz", + "integrity": "sha512-X1pJJkO48DFxl6iyEemIKqRkJ7j9/cBh3BRBUr+xZHXBvnD0GKDXIocwh0PjSxSC6XSu3UCQnqtKi3PbjRl8Dg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/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, + "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/@storybook/core-common/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/@storybook/core-common/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-common/node_modules/@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 + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-common/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/@storybook/core-common/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, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/core-common/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, + "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" + } + }, + "node_modules/@storybook/core-common/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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, + "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" + } + }, + "node_modules/@storybook/core-common/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/core-common/node_modules/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, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/core-common/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/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/@storybook/core-common/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/terser-webpack-plugin/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/core-common/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-common/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/core-common/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/core-common/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/core-events": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz", + "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.4.19.tgz", + "integrity": "sha512-bKsUB9f7hl5ya2JXxpIrErmbDQjoH39FVbzYZWjMo4t/b7+Xyi6vYadwyWcqlpUQmis09ZaSMv8L/Tw0TuwLAA==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.19", + "@storybook/manager-webpack4": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@types/node": "^14.0.10", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "fs-extra": "^9.0.1", + "globby": "^11.0.2", + "ip": "^1.1.5", + "lodash": "^4.17.21", + "node-fetch": "^2.6.1", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^5.3.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/builder-webpack5": "6.4.19", + "@storybook/manager-webpack5": "6.4.19", + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-server/node_modules/@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 + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/core-server/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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, + "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" + } + }, + "node_modules/@storybook/core-server/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/core-server/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" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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, + "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" + } + }, + "node_modules/@storybook/core-server/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/core-server/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/core-server/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/core-server/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/@storybook/core-server/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/core-server/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/core-server/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.4.19.tgz", + "integrity": "sha512-gf/zRhGoAVsFwSyV2tc+jeJfZQkxF6QsaZgbUSe24/IUvGFCT/PS/jZq1qy7dECAwrTOfykgu8juyBtj6WhWyw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools/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/@storybook/manager-webpack4": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.4.19.tgz", + "integrity": "sha512-R8ugZjTYqXvlc6gDOcw909L65sIleOmIJLZR+N6/H85MivGXHu39jOwONqB7tVACufRty4FNecn8tEiQL2SAKA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.1", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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 + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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, + "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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/css-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/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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, + "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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/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, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/p-locate/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/@storybook/manager-webpack4/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/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==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/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/@storybook/manager-webpack4/node_modules/webpack/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/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/@storybook/manager-webpack4/node_modules/webpack/node_modules/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==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@storybook/manager-webpack4/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@storybook/manager-webpack5": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.4.19.tgz", + "integrity": "sha512-hVjWhWAOgWaymBy0HeRskN+MfKLpqLP4Txfw+3Xqg1qplgexV0w2O4BQrS/SNEH4V/1qF9h8XTsk3L3oQIj3Mg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.1", + "process": "^0.11.10", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@storybook/manager-webpack5/node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/@storybook/manager-webpack5/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/@storybook/manager-webpack5/node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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/@storybook/manager-webpack5/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": { + "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" + } + }, + "node_modules/@storybook/manager-webpack5/node_modules/webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + }, + "node_modules/@storybook/node-logger": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.4.19.tgz", + "integrity": "sha512-hO2Aar3PgPnPtNq2fVgiuGlqo3EEVR6TKVBXMq7foL3tN2k4BQFKLDHbm5qZQQntyYKurKsRUGKPJFPuI1ov/w==", + "dev": true, + "dependencies": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/node-logger/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/@storybook/node-logger/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/@storybook/node-logger/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/@storybook/node-logger/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/@storybook/postinstall": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.4.19.tgz", + "integrity": "sha512-/0tHHxyIV82zt1rw4BW70GmrQbDVu9IJPAxOqFzGjC1fNojwJ53mK6FfUsOzbhG5mWk5p0Ip5+zr74moP119AA==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-web": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.4.19.tgz", + "integrity": "sha512-jqltoBv5j7lvnxEfV9w8dLX9ASWGuvgz97yg8Yo5FqkftEwrHJenyvMGcTgDJKJPorF+wiz/9aIqnmd3LCAcZQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.19", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/router": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.19.tgz", + "integrity": "sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "history": "5.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/semver/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/@storybook/semver/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/@storybook/semver/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/@storybook/semver/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/@storybook/source-loader": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.4.19.tgz", + "integrity": "sha512-XqTsqddRglvfW7mhyjwoqd/B8L6samcBehhO0OEbsFp6FPWa9eXuObCxtRYIcjcSIe+ksbW3D/54ppEs1L/g1Q==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/store": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.4.19.tgz", + "integrity": "sha512-N9/ZjemRHGfT3InPIbqQqc6snkcfnf3Qh9oOr0smbfaVGJol//KOX65kzzobtzFcid0WxtTDZ3HmgFVH+GvuhQ==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/theming": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.19.tgz", + "integrity": "sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==", + "dev": true, + "dependencies": { + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@storybook/ui": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.4.19.tgz", + "integrity": "sha512-gFwdn5LA2U6oQ4bfUFLyHZnNasGQ01YVdwjbi+l6yjmnckBNtZfJoVTZ1rzGUbxSE9rK48InJRU+latTsr7xAg==", + "dev": true, + "dependencies": { + "@emotion/core": "^10.1.1", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.19", + "copy-to-clipboard": "^3.3.1", + "core-js": "^3.8.2", + "core-js-pure": "^3.8.2", + "downshift": "^6.0.15", + "emotion-theming": "^10.0.27", + "fuse.js": "^3.6.1", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "qs": "^6.10.0", + "react-draggable": "^4.4.3", + "react-helmet-async": "^1.0.7", + "react-sizeme": "^3.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "store2": "^2.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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/@ts-morph/common": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.12.3.tgz", + "integrity": "sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.7", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "dev": true, + "dependencies": { + "@types/color-name": "*" + } + }, + "node_modules/@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 + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, + "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.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "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/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/@types/is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.3.tgz", + "integrity": "sha512-SWyMrjgdAUHNQmutvDcKablrJhkDLy4wunTme8oYLjKp41GnHGxMRXr2MQMvy/qy8H3LdzwQk9gH4hZ6T++H8g==", + "dev": true + }, + "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/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "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": "12.20.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.46.tgz", + "integrity": "sha512-cPjLXj8d6anFPzFvOPxS3fvly3Shm5nTfl6g8X5smexixbuGUf7hfr21J5tX9JW+UPStp/5P5R8qrKL5IyVJ+A==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/npmlog": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", + "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", + "dev": true + }, + "node_modules/@types/overlayscrollbars": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", + "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==", + "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/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "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/react": { + "version": "17.0.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", + "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-syntax-highlighter": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", + "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react/node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/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/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "node_modules/@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", + "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", + "dev": true + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/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/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "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-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, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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 + }, + "node_modules/@webassemblyjs/helper-code-frame/node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-module-context/node_modules/@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 + }, + "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-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, + "dependencies": { + "@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" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "node_modules/@webassemblyjs/wast-parser/node_modules/@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 + }, + "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/@webcomponents/custom-elements": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.5.0.tgz", + "integrity": "sha512-c+7jPQCs9h/BYVcZ2Kna/3tsl3A/9EyXfvWjp5RiTDm1OpTcbZaCa1z4RNcTe/hUtXaqn64JjNW1yrWT+rZ8gg==", + "dev": 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/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "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/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", + "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.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==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "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-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, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "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/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "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-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-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "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/ansi-styles/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/ansi-styles/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/ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "dependencies": { + "entities": "^2.0.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/apache-crypt": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.5.tgz", + "integrity": "sha512-ICnYQH+DFVmw+S4Q0QY2XRXD8Ne8ewh8HgbuFH4K7022zCxgHM0Hz1xkRnUlEfAXNbwp1Cnhbedu60USIfDxvg==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.7.tgz", + "integrity": "sha512-JtHjzZmJxtzfTSjsCyHgPR155HBe5WGyUyHTaEkfy46qhwCFKx1Epm6nAxgUG3WfUZP1dWhGqj9Z2NOBeZ+uBw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=", + "dev": true + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true + }, + "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/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, + "engines": { + "node": ">=0.10.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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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/array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz", + "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "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/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=", + "dev": true, + "dependencies": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + } + }, + "node_modules/ast-transform/node_modules/escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=", + "dev": true, + "dependencies": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.4.0" + }, + "optionalDependencies": { + "source-map": "~0.1.30" + } + }, + "node_modules/ast-transform/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-transform/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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 + }, + "node_modules/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 + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "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==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "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-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/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/babel-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/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@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==", + "dev": true + }, + "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-emotion": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", + "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, + "node_modules/babel-plugin-emotion/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/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@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==", + "dev": true + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/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-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", + "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "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.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", + "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "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_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=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", + "dev": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", + "dev": true + }, + "node_modules/better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "dependencies": { + "open": "^7.0.3" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/better-opn/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/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/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, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "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.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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/body-parser/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/bonjour/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/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/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/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/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/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/boxen/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/boxen/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/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/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "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/brotli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz", + "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=", + "dev": true, + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "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-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=", + "dev": true, + "dependencies": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "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/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/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true, + "engines": { + "node": ">=0.4.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/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "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/cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "dev": true, + "dependencies": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "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==", + "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" + }, + "engines": { + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "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/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "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.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "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/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "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": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-dependency-plugin": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.1" + } + }, + "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/class-utils/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/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/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-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "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": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/code-block-writer": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.0.tgz", + "integrity": "sha512-GEqWvEWWsOvER+g9keO4ohFoD3ymwyCnqY3hoTr7GZipYFwEhMHJw+TtV0rfgRhNImM6QWZGO2XYjlJVyYT62w==", + "dev": true, + "dependencies": { + "tslib": "2.3.1" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "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==", + "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/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "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": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "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, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "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/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/compute-scroll-into-view": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", + "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==", + "dev": 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-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, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/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/concat-stream/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/concat-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/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "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/connect/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/connect/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/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/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "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/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/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, + "dependencies": { + "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" + } + }, + "node_modules/copy-concurrently/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/copy-concurrently/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/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dev": true, + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/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/copy-webpack-plugin/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/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/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/copy-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/core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "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-js-pure": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cp-file/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/cp-file/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/cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy/node_modules/@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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cpy/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/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, + "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" + } + }, + "node_modules/cpy/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/cpy/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, + "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" + } + }, + "node_modules/cpy/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/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, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/cpy/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, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpy/node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cpy/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/cpy/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/cpy/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/cpy/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/cpy/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/cpy/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/cpy/node_modules/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, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cpy/node_modules/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, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpy/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cpy/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/critters": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.12.tgz", + "integrity": "sha512-ujxKtKc/mWpjrOKeaACTaQ1aP0O31M0ZPWhfl85jZF1smPU4Ivb9va5Ox2poif4zVJQQo0LCFlzGtEZAsCAPcw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^4.1.3", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/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/critters/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/critters/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/critters/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/critters/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/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/cross-spawn/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/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/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "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-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "bin": { + "css-blank-pseudo": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/css-blank-pseudo/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/css-blank-pseudo/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/css-blank-pseudo/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-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-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "bin": { + "css-has-pseudo": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-has-pseudo/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/css-has-pseudo/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/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-has-pseudo/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-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.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", + "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-minimizer-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "p-limit": "^3.0.2", + "postcss": "^8.3.5", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/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/css-minimizer-webpack-plugin/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/css-minimizer-webpack-plugin/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/css-minimizer-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/css-minimizer-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/css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "dependencies": { + "css": "^2.0.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "bin": { + "css-prefers-color-scheme": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/css-prefers-color-scheme/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/css-prefers-color-scheme/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/css-prefers-color-scheme/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-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-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/cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", + "dev": true + }, + "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/csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "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/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decache": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", + "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", + "dev": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "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=", + "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==", + "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" + } + }, + "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/deep-object-diff": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", + "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "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==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "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/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "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/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/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/detect-port/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/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "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/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.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-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "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" + } + }, + "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": "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/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/dot": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.3.tgz", + "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", + "dev": true, + "engines": [ + "node >=0.2.6" + ], + "bin": { + "dottojs": "bin/dot-packer" + } + }, + "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": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "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/downshift": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz", + "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.14.8", + "compute-scroll-into-view": "^1.0.17", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.12.0" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/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/duplexer2/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/duplexer2/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/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/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/duplexify/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/duplexify/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/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.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "dev": true + }, + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dev": true, + "dependencies": { + "batch-processor": "1.0.0" + } + }, + "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/emotion-theming": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.3.0.tgz", + "integrity": "sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@emotion/weak-memoize": "0.2.5", + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "@emotion/core": "^10.0.27", + "react": ">=16.3.0" + } + }, + "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/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dev": true, + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/ws": { + "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": ">=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/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "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/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "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-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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" + } + }, + "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/es5-shim": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.5.tgz", + "integrity": "sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w==", + "dev": true, + "engines": { + "node": ">=0.4.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-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "dev": true + }, + "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/esbuild": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", + "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.13.8", + "esbuild-darwin-64": "0.13.8", + "esbuild-darwin-arm64": "0.13.8", + "esbuild-freebsd-64": "0.13.8", + "esbuild-freebsd-arm64": "0.13.8", + "esbuild-linux-32": "0.13.8", + "esbuild-linux-64": "0.13.8", + "esbuild-linux-arm": "0.13.8", + "esbuild-linux-arm64": "0.13.8", + "esbuild-linux-mips64le": "0.13.8", + "esbuild-linux-ppc64le": "0.13.8", + "esbuild-netbsd-64": "0.13.8", + "esbuild-openbsd-64": "0.13.8", + "esbuild-sunos-64": "0.13.8", + "esbuild-windows-32": "0.13.8", + "esbuild-windows-64": "0.13.8", + "esbuild-windows-arm64": "0.13.8" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", + "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", + "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", + "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", + "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", + "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", + "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", + "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", + "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", + "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", + "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", + "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", + "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", + "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", + "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-wasm": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.8.tgz", + "integrity": "sha512-UbD+3nloiSpJWXTCInZQrqPe8Y+RLfDkY/5kEHiXsw/lmaEvibe69qTzQu16m5R9je/0bF7VYQ5jaEOq0z9lLA==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", + "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", + "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", + "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "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": "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/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/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, + "optional": true, + "engines": { + "node": ">=0.10.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-scope/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/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/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/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/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "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/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "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/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", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "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": ">=6" + } + }, + "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, + "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" + } + }, + "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" + } + }, + "node_modules/expand-brackets/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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/expand-brackets/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/expand-brackets/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/expand-brackets/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/expand-brackets/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/expand-brackets/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/expand-brackets/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/expand-brackets/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/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/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "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.7", + "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/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/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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" + } + }, + "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" + } + }, + "node_modules/extglob/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/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/fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "dependencies": { + "color-support": "^1.1.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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/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/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/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/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-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/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/file-loader/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/file-loader/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/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-system-cache": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz", + "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=", + "dev": true, + "dependencies": { + "bluebird": "^3.3.5", + "fs-extra": "^0.30.0", + "ramda": "^0.21.0" + } + }, + "node_modules/file-system-cache/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/file-system-cache/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/file-system-cache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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, + "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.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": { + "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-cache-dir/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/find-cache-dir/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/find-cache-dir/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/find-cache-dir/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/find-cache-dir/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/find-cache-dir/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/find-cache-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/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha1-WKRmaX34piBc39vzlVNri9d3pfY=", + "dev": true, + "engines": { + "node": ">=0.8.22" + } + }, + "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/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "dev": true + }, + "node_modules/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, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/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/flush-write-stream/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/flush-write-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/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/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/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "engines": { + "node": ">=6.11.5", + "yarn": ">=1.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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, + "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" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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, + "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" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "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/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, + "dependencies": { + "map-cache": "^0.2.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_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/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/from2/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/from2/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/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-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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "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==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/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/fs-write-stream-atomic/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/fs-write-stream-atomic/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/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==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "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/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "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==", + "dev": true, + "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-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/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, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", + "dev": true + }, + "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": { + "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-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "dependencies": { + "@types/glob": "*" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "glob": "*" + } + }, + "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/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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/globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/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/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/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/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "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, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", + "dev": true, + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob/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, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "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" + } + }, + "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" + } + }, + "node_modules/has-values/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/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=", + "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=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/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.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/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "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/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/history": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz", + "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "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/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/hpack.js/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/hpack.js/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/hpack.js/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/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-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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/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/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-webpack-plugin/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/html-webpack-plugin/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/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth-connect": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.5.tgz", + "integrity": "sha512-zykAOKpVAXyzhOLm6+xyB/RtRcfN3uDfH4Al73DIfeSb6B7nr0WToLI6UyyM6ohtcLmbBPksWXzVbEDStz8ObQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "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-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/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, + "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" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/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, + "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" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/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/http-proxy-middleware/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.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/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/i18next": { + "version": "21.6.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.11.tgz", + "integrity": "sha512-tJ2+o0lVO+fhi8bPkCpBAeY1SgkqmQm5NzgPWCQssBrywJw98/o+Kombhty5nxQOpHtvMmsxcOopczUiH6bJxQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.12.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==", + "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/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "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/ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "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==", + "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-fresh/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/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, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/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/import-local/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/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, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/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 + }, + "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/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/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/inquirer/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/inquirer/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/inquirer/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/inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha1-20Xpk1c82z23C5gy6ChbrUZCR3A=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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": "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-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/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "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-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "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.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "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-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "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" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "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-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/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==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/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-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "dependencies": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "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-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "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-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "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.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-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, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "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-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=", + "dev": true + }, + "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-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "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/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "dependencies": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jasmine-core": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", + "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", + "dev": true + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-haste-map/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/jest-haste-map/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/jest-haste-map/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/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/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/jest-util/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/jest-util/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/jest-util/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/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/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/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-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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": "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/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/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "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/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "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/karma": { + "version": "6.3.16", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz", + "integrity": "sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ==", + "dev": true, + "dependencies": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "colors": "1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.2.0", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.1.1.tgz", + "integrity": "sha512-oxeOSBVK/jdZsiX03LhHQkO4eISSQb5GbHi6Nsw3Mw7G4u6yUgacBAftnO7q+emPBLMsrNbz1pGIrj+Jb3z17A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", + "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", + "dev": true, + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "karma": "*" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", + "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": ">=3.8", + "karma": ">=0.9", + "karma-jasmine": ">=1.1" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/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/karma/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/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/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/karma/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, + "engines": { + "node": ">=10" + } + }, + "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/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=6.0.0", + "yarn": ">=1.0.0" + } + }, + "node_modules/less": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", + "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.1.tgz", + "integrity": "sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/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, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/less/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/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "2.3.20", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", + "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", + "dev": true, + "dependencies": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/license-webpack-plugin/node_modules/@types/webpack-sources": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", + "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + } + }, + "node_modules/license-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/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": "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": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.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/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log4js": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "dev": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/log4js/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/loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dev": true, + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/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, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/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/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", + "dev": true + }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", + "dev": true + }, + "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/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-to-jsx": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.6.tgz", + "integrity": "sha512-1wrIGZYwIG2gR3yfRmbr4FlQmhaAKoKTpRo4wur4fp9p0njU1Hi7vR8fj0AUKKIcPduiJmPprzmCB5B/GvlC7g==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "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/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "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.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.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/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/memory-fs/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/memory-fs/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/memory-fs/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/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/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, + "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": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.2.tgz", + "integrity": "sha512-ZmqShkn79D36uerdED+9qdo1ZYG8C1YsWvXu0UMJxurZnSdgz7gQKO2EGv8T55MhDqG3DYmGtizZNpM/UbTlcA==", + "dev": true, + "dependencies": { + "schema-utils": "^3.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/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/mini-css-extract-plugin/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/mini-css-extract-plugin/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/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.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/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/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, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/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/morgan/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/morgan/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/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/move-concurrently/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/move-concurrently/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/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.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/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "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/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "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/nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "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-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "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-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": 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-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.1.tgz", + "integrity": "sha512-zJ4jePUHR8cceduZ53b6temRalyGpkC2Kc2r3ecNphmL+uWNoJ3YcOcUjpbG6WwoE/Ef6/+aEZz63neI2WIa1Q==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/node-gyp/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-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "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-libs-browser/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/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/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/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/normalize-package-data/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/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-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "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/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "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/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/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/object-copy/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/object-copy/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/object-copy/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/object-copy/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/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-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "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==", + "dev": true, + "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==", + "dev": true, + "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.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.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.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "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/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/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, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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/ora/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/ora/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/ora/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/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/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/overlayscrollbars": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", + "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", + "dev": true + }, + "node_modules/p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-all/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "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-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "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": "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/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-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, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/pacote": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", + "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^2.0.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "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/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, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/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/parallel-transform/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/parallel-transform/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/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-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "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": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "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-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 + }, + "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/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "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/pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/pdfmake": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.4.tgz", + "integrity": "sha512-EM39waHUe/Dg1W9C3XqYbpx6tfhYyU14JHZlI1HaW0AUEY32GbkRBjDLGWo9f7z/k3ea6k1p9yyDrflnvtZS1A==", + "dev": true, + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pdfmake/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/piscina": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", + "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/polished": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.4.tgz", + "integrity": "sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/polished/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/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/portfinder/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/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.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-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + } + }, + "node_modules/postcss-attribute-case-insensitive/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/postcss-attribute-case-insensitive/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/postcss-attribute-case-insensitive/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": { + "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-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-functional-notation/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/postcss-color-functional-notation/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/postcss-color-functional-notation/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-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-gray/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/postcss-color-gray/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/postcss-color-gray/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-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-hex-alpha/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/postcss-color-hex-alpha/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/postcss-color-hex-alpha/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-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-mod-function/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/postcss-color-mod-function/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/postcss-color-mod-function/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-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-rebeccapurple/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/postcss-color-rebeccapurple/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/postcss-color-rebeccapurple/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": { + "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-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-media/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/postcss-custom-media/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/postcss-custom-media/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-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-properties/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/postcss-custom-properties/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/postcss-custom-properties/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-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-selectors/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-custom-selectors/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/postcss-custom-selectors/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/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-custom-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-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class/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/postcss-dir-pseudo-class/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/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class/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": { + "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-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-double-position-gradients/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/postcss-double-position-gradients/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/postcss-double-position-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-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-env-function/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/postcss-env-function/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/postcss-env-function/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-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.26" + } + }, + "node_modules/postcss-flexbugs-fixes/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/postcss-flexbugs-fixes/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/postcss-flexbugs-fixes/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-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-focus-visible/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/postcss-focus-visible/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/postcss-focus-visible/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-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-focus-within/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/postcss-focus-within/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/postcss-focus-within/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-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-font-variant/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/postcss-font-variant/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/postcss-font-variant/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-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-gap-properties/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/postcss-gap-properties/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/postcss-gap-properties/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-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-image-set-function/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/postcss-image-set-function/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/postcss-image-set-function/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-import": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-initial/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/postcss-initial/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/postcss-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-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-lab-function/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/postcss-lab-function/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/postcss-lab-function/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-load-config": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz", + "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==", + "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.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz", + "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "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-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-logical/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/postcss-logical/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/postcss-logical/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-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-media-minmax/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/postcss-media-minmax/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/postcss-media-minmax/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": { + "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-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-nesting/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/postcss-nesting/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/postcss-nesting/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": { + "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-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-overflow-shorthand/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/postcss-overflow-shorthand/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/postcss-overflow-shorthand/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-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-page-break/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/postcss-page-break/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/postcss-page-break/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-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-place/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/postcss-place/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/postcss-place/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-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "dev": true, + "dependencies": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-preset-env/node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/postcss-preset-env/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/postcss-preset-env/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/postcss-preset-env/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-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-pseudo-class-any-link/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/postcss-pseudo-class-any-link/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/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-pseudo-class-any-link/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": { + "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-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-replace-overflow-wrap/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/postcss-replace-overflow-wrap/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/postcss-replace-overflow-wrap/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-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-selector-matches/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/postcss-selector-matches/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/postcss-selector-matches/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-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-selector-not/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/postcss-selector-not/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/postcss-selector-not/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-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/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dev": true, + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/prismjs": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz", + "integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise.allsettled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz", + "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==", + "dev": true, + "dependencies": { + "array.prototype.map": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", + "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "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/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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "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/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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/ramda": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=", + "dev": true + }, + "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.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "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.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "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/raw-loader/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/raw-loader/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/raw-loader/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/raw-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/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-colorful": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.1.tgz", + "integrity": "sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-draggable": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz", + "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==", + "dev": true, + "dependencies": { + "clsx": "^1.1.1", + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", + "dev": true, + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", + "dev": true + }, + "node_modules/react-helmet-async": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.2.3.tgz", + "integrity": "sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0", + "react-dom": "^16.6.0 || ^17.0.0" + } + }, + "node_modules/react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-popper": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", + "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "dev": true, + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17" + } + }, + "node_modules/react-popper-tooltip": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz", + "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@popperjs/core": "^2.5.4", + "react-popper": "^2.2.4" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0", + "react-dom": "^16.6.0 || ^17.0.0" + } + }, + "node_modules/react-router": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz", + "integrity": "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg==", + "dev": true, + "dependencies": { + "history": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz", + "integrity": "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA==", + "dev": true, + "dependencies": { + "history": "^5.2.0", + "react-router": "6.2.1" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-router-dom/node_modules/history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/react-router/node_modules/history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/react-sizeme": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", + "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", + "dev": true, + "dependencies": { + "element-resize-detector": "^1.2.2", + "invariant": "^2.2.4", + "shallowequal": "^1.1.0", + "throttle-debounce": "^3.0.1" + } + }, + "node_modules/react-syntax-highlighter": { + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz", + "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.1.1", + "lowlight": "^1.14.0", + "prismjs": "^1.21.0", + "refractor": "^3.1.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/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/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/refractor": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz", + "integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==", + "dev": true, + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.25.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==", + "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==", + "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-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-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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@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==", + "dev": true + }, + "node_modules/remark-mdx/node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/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/remark-mdx/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/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dev": true, + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/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, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/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/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 + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-cwd/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/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-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": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/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/resolve-url-loader/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/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/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "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/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/run-queue/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/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/sane/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, + "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" + } + }, + "node_modules/sane/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/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, + "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" + } + }, + "node_modules/sane/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/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/sane/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/sane/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/sane/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/sane/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/sane/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" + } + }, + "node_modules/sane/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.36.0.tgz", + "integrity": "sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.1.0.tgz", + "integrity": "sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "sass": "^1.3.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "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/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "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/schema-utils/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/schema-utils/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/schema-utils/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/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "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.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" + } + }, + "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/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/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/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-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "dev": true, + "dependencies": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-favicon/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/serve-favicon/node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "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/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 + }, + "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/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "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.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/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", + "dev": true + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, + "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/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "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-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/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/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/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/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/snapdragon/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/snapdragon/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/snapdragon/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/snapdragon/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/snapdragon/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/snapdragon/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/snapdragon/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/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/snapdragon/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/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "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/sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "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.3" + } + }, + "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/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "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.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/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-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", + "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader/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, + "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.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==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "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/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "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/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/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/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/static-eval/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/static-extend/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, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/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/static-extend/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/static-extend/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/static-extend/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/static-extend/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/static-extend/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/static-extend/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/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/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/static-module/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/static-module/node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/static-module/node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/static-module/node_modules/merge-source-map/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/static-module/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/static-module/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-module/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/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/store2": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.13.1.tgz", + "integrity": "sha512-iJtHSGmNgAUx0b/MCS6ASGxb//hGrHHRgzvN+K5bvkBTN7A9RTpPSf1WSp+nPGvWCJ1jRnvY7MKnuqfoi3OEqg==", + "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-browserify/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/stream-browserify/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/stream-browserify/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/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/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, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "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/stream-http/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/stream-http/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/stream-http/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/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 + }, + "node_modules/streamroller": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "dev": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">=8.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/string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padstart": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", + "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.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-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "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/stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "dependencies": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stylus-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.1.0.tgz", + "integrity": "sha512-qKO34QCsOtSJrXxQQmXsPeaVHh6hMumBAFIoJTcsSr2VzrA6o/CW9HCGR8spCjzJhN8oKQHdj/Ytx0wwXyElkw==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.5", + "klona": "^2.0.4", + "normalize-path": "^3.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylus": ">=0.52.4", + "webpack": "^5.0.0" + } + }, + "node_modules/stylus/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stylus/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/stylus/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/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/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/svgo/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/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/symbol.prototype.description": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + }, + "engines": { + "node": ">= 0.11.15" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==", + "dev": true + }, + "node_modules/tailwindcss": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", + "integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==", + "dev": true, + "dependencies": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss": "^8.4.6", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/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/tailwindcss/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/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/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/tailwindcss/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/tailwindcss/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/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/telejson": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", + "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", + "dev": true, + "dependencies": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + } + }, + "node_modules/telejson/node_modules/isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "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.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "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" + } + }, + "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/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/terser-webpack-plugin/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/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/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/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "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/throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/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/through2/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/through2/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/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/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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/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/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/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=", + "dev": true + }, + "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/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "*" + } + }, + "node_modules/ts-loader/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/ts-loader/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/ts-loader/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/ts-loader/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/ts-morph": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-13.0.3.tgz", + "integrity": "sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.12.3", + "code-block-writer": "^11.0.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths/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/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "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.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "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/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", + "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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-properties": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.3.1.tgz", + "integrity": "sha512-nIV3Tf3LcUEZttY/2g4ZJtGXhWwSkuLL+rCu0DIAMbjyVPj+8j5gNVz4T/sVbnQybIsd5SFGkPKg/756OY6jlA==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "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/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/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, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dev": true, + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "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/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/unset-value/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/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/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-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/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/url-loader/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/url-loader/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/url-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/url-parse": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", + "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", + "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/use-composed-ref": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.2.1.tgz", + "integrity": "sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "dev": true, + "dependencies": { + "use-isomorphic-layout-effect": "^1.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": 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.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "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/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "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/uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "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/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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/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==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": 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" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/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, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "optional": 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" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": 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" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/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, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "node_modules/watchpack-chokidar2/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, + "optional": 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/watchpack-chokidar2/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/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/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, + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/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=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.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/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/webpack": { + "version": "5.69.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.0.tgz", + "integrity": "sha512-E5Fqu89Gu8fR6vejRqu26h8ld/k6/dCVbeGUcuZjc+goQHDfCPU9rER71JmdtBYGmci7Ec2aFEATQ2IVXKy2wg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@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.9.0", + "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-dev-middleware": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", + "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^3.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": "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/webpack-dev-middleware/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/webpack-dev-middleware/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/webpack-dev-middleware/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-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "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.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", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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" + } + }, + "node_modules/webpack-dev-server/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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, + "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" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "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" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/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, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/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 + }, + "node_modules/webpack-dev-server/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, + "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" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/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, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/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, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/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, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/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 + }, + "node_modules/webpack-dev-server/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, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/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, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/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, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/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, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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/webpack-dev-server/node_modules/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, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/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, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/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=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/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==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/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, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/webpack-dev-server/node_modules/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, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/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, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-log/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, + "bin": { + "uuid": "bin/uuid" + } + }, + "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-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-subresource-integrity": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", + "dev": true, + "dependencies": { + "webpack-sources": "^1.3.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 2.21.0 < 5", + "webpack": ">= 1.12.11 < 6" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "dependencies": { + "debug": "^3.0.0" + } + }, + "node_modules/webpack-virtual-modules/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/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/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/webpack/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/webpack/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/webpack/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/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/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/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/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/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^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==", + "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-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/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/windows-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/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/windows-release/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/windows-release/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/windows-release/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/windows-release/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/windows-release/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/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/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "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/wrap-ansi/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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "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/xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "dev": true, + "dependencies": { + "sax": "^1.2.1" + } + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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" + } + }, + "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_modules/zone.js": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", + "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", + "peer": true, + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@aduh95/viz.js": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.5.0.tgz", + "integrity": "sha512-ahLdpRAoGsdgEfy2SGV2wnnHrBSLDHuwA32v+BoNGnz1gqajr8VMzF8y6mIQt28hHi4LQ272wqSi78DK4YdT2g==", + "dev": true + }, + "@ampproject/remapping": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.0.1.tgz", + "integrity": "sha512-Ta9bMA3EtUHDaZJXqUoT5cn/EecwOp+SXpKJqxDbDuMbLvEMu6YTyDDuvTWeStODfdmXyfMo7LymQyPkN3BicA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "1.0.0", + "sourcemap-codec": "1.4.8" + } + }, + "@angular-devkit/architect": { + "version": "0.1302.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1302.3.tgz", + "integrity": "sha512-0m8jMKrFfIqsYt33zTUwSmyekyfuS67hna08RQ6USjzWQSE3z4S8ulCUARSjM6AzdMblX+whfy56nJUpT17NSA==", + "dev": true, + "peer": true, + "requires": { + "@angular-devkit/core": "13.2.3", + "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "peer": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "peer": true + } + } + }, + "@angular-devkit/build-angular": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.16.tgz", + "integrity": "sha512-0UlSaX3LngsBUp6Da69XlptyeZn7CTt/3sKijQDtkEw/J37vpMcXYD4nUuU7q7mVMoPQwMyPWdF+JBsBFz6f7A==", + "dev": true, + "requires": { + "@ampproject/remapping": "1.0.1", + "@angular-devkit/architect": "0.1202.16", + "@angular-devkit/build-optimizer": "0.1202.16", + "@angular-devkit/build-webpack": "0.1202.16", + "@angular-devkit/core": "12.2.16", + "@babel/core": "7.14.8", + "@babel/generator": "7.14.8", + "@babel/helper-annotate-as-pure": "7.14.5", + "@babel/plugin-proposal-async-generator-functions": "7.14.7", + "@babel/plugin-transform-async-to-generator": "7.14.5", + "@babel/plugin-transform-runtime": "7.14.5", + "@babel/preset-env": "7.14.8", + "@babel/runtime": "7.14.8", + "@babel/template": "7.14.5", + "@discoveryjs/json-ext": "0.5.3", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "12.2.16", + "ansi-colors": "4.1.1", + "babel-loader": "8.2.2", + "browserslist": "^4.9.1", + "cacache": "15.2.0", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "9.0.1", + "core-js": "3.16.0", + "critters": "0.0.12", + "css-loader": "6.2.0", + "css-minimizer-webpack-plugin": "3.0.2", + "esbuild": "0.13.8", + "esbuild-wasm": "0.13.8", + "find-cache-dir": "3.3.1", + "glob": "7.1.7", + "https-proxy-agent": "5.0.0", + "inquirer": "8.1.2", + "karma-source-map-support": "1.4.0", + "less": "4.1.1", + "less-loader": "10.0.1", + "license-webpack-plugin": "2.3.20", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "2.4.2", + "minimatch": "3.0.4", + "open": "8.2.1", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "6.0.1", + "piscina": "3.1.0", + "postcss": "8.3.6", + "postcss-import": "14.0.2", + "postcss-loader": "6.1.1", + "postcss-preset-env": "6.7.0", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "4.0.0", + "rxjs": "6.6.7", + "sass": "1.36.0", + "sass-loader": "12.1.0", + "semver": "7.3.5", + "source-map-loader": "3.0.0", + "source-map-support": "0.5.19", + "style-loader": "3.2.1", + "stylus": "0.54.8", + "stylus-loader": "6.1.0", + "terser": "5.7.1", + "terser-webpack-plugin": "5.1.4", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.3.0", + "webpack": "5.50.0", + "webpack-dev-middleware": "5.0.0", + "webpack-dev-server": "3.11.3", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "1.5.2" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + } + }, + "@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "requires": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@babel/core": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", + "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.8", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.8", + "@babel/helpers": "^7.14.8", + "@babel/parser": "^7.14.8", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.8", + "@babel/types": "^7.14.8", + "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": { + "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.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@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 + }, + "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 + }, + "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": {} + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "requires": { + "ajv": "^8.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" + } + } + } + }, + "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, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", + "dev": true + }, + "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 + } + } + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "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 + } + } + }, + "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 + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, + "webpack": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.50.0.tgz", + "integrity": "sha512-hqxI7t/KVygs0WRv/kTgUW8Kl3YC81uyWQSo/7WUs5LsuRw0htH/fCwbVBGCuiX/t4s7qzjXFcf41O8Reiypag==", + "dev": true, + "requires": { + "@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.0", + "es-module-lexer": "^0.7.1", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.16.tgz", + "integrity": "sha512-7DO195vDwOnCCHrzjr6ajSNkvCzW6O/ERbVezCA46NZuS9lW9LnWpP3CE9iDnhzup7hjrM336/dXmYJO8Hw1MA==", + "dev": true, + "requires": { + "source-map": "0.7.3", + "tslib": "2.3.0", + "typescript": "4.3.5" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.16.tgz", + "integrity": "sha512-Zhnr0+W1og1rtbfKDPxD7jWDL4cg9LA21ls2pJKXc/h+YXdQ5uj4mFg69npL6aY0yver1w2rIz+Il/wdC/W1gw==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1202.16", + "rxjs": "6.6.7" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + } + }, + "@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "requires": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.3.tgz", + "integrity": "sha512-/47RA8qmWzeS60xSdaprIn1MiSv0Iw83t0M9/ENH7irFS5vMAq62NCcwiWXH59pZmvvLbF+7xy/RgYUZLr4nHQ==", + "dev": true, + "requires": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.16.tgz", + "integrity": "sha512-ToyZBCGilSeeLmhAxmeJ0PykmbKLoME+uK78gC64xJtNu9e3oVnmog8b8g9Ay9hTwZJ96HvNa16po11Gfbbn6A==", + "dev": true, + "requires": { + "@angular-devkit/core": "12.2.16", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "requires": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular/animations": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.16.tgz", + "integrity": "sha512-Kf6C7Ta+fCMq5DvT9JNVhBkcECrqFa3wumiC6ssGo5sNaEzXz+tlep9ZgEbqfxSn7gAN7L1DgsbS9u0O6tbUkg==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/cdk": { + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", + "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.2.0" + } + }, + "@angular/cli": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.16.tgz", + "integrity": "sha512-4DUi8aHIZWzQycw8SN55ziHhRusHVYJ+2rzsfhy0eDgkry7gYVd4wUn+6Q4D8irywA21soNq1S5JjGAZwRDS6g==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1202.16", + "@angular-devkit/core": "12.2.16", + "@angular-devkit/schematics": "12.2.16", + "@schematics/angular": "12.2.16", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.2", + "ini": "2.0.0", + "inquirer": "8.1.2", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.5", + "npm-pick-manifest": "6.1.1", + "open": "8.2.1", + "ora": "5.4.1", + "pacote": "12.0.2", + "resolve": "1.20.0", + "semver": "7.3.5", + "symbol-observable": "4.0.0", + "uuid": "8.3.2" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1202.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.16.tgz", + "integrity": "sha512-VUGyAr+5RmlcPjo8mZSRJ/wkm3hCPn9PJyorAnc1IzrqD+XkgcDME86HP3YheLsOsc1Mn7j6Zh3T1rAclAWw/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "12.2.16", + "rxjs": "6.6.7" + } + }, + "@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "requires": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular/common": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.16.tgz", + "integrity": "sha512-FEqTXTEsnbDInqV1yFlm97Tz1OFqZS5t0TUkm8gzXRgpIce/F/jLwAg0u1VQkgOsno6cNm0xTWPoZgu85NI4ug==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/compiler": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.16.tgz", + "integrity": "sha512-nsYEw+yu8QyeqPf9nAmG419i1mtGM4v8+U+S3eQHQFXTgJzLymMykWHYu2ETdjUpNSLK6xcIQDBWtWnWSfJjAA==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/compiler-cli": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.16.tgz", + "integrity": "sha512-tlalh8SJvdCWbUPRUR5GamaP+wSc/GuCsoUZpSbcczGKgSlbaEVXUYtVXm8/wuT6Slk2sSEbRs7tXGF2i7qxVw==", + "dev": true, + "requires": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.2.0", + "yargs": "^17.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 + } + } + }, + "@angular/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.16.tgz", + "integrity": "sha512-jsmvaRdAfng99z2a9mAmkfcsCE1wm+tBYVDxnc5JquSXznwtncjzcoc2X0J0dzrkCDvzFfpTsZ9vehylytBc+A==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/elements": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-12.2.16.tgz", + "integrity": "sha512-tOTf6FvnxZg/TjrmsbowHjrTYVl6WhTOQk3G4aYicrf+57a67L12F44Illr7I6preIvH5NepHivMTKN5rNBAmg==", + "dev": true, + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/forms": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.16.tgz", + "integrity": "sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/platform-browser": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.16.tgz", + "integrity": "sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.16.tgz", + "integrity": "sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@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, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@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 + }, + "@babel/core": { + "version": "7.17.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.4.tgz", + "integrity": "sha512-R9x5r4t4+hBqZTmioSnkrW+I6NmbojwjGT8p4G2Gw1thWbXIHGDnmGdLdFw0/7ljucdIrNRp7Npgb4CyBYzzJg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@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" + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/template": { + "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.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "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.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz", + "integrity": "sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@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, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@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, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.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.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", + "@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" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", + "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", + "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-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.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.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "dependencies": { + "@babel/template": { + "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.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@babel/template": { + "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.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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 + }, + "@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, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@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.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.16.7" + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "dependencies": { + "@babel/template": { + "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.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "dependencies": { + "@babel/template": { + "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.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "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.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.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.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "dev": true, + "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" + } + }, + "@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, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@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-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz", + "integrity": "sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-default-from": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.0", + "@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" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@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, + "requires": { + "@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.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.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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-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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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-default-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", + "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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-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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@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==", + "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/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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "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": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@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.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.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@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.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.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.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.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.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.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@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, + "requires": { + "@babel/types": "^7.16.7" + } + } + } + }, + "@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, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@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, + "requires": { + "@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==", + "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", + "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.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.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@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, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.8.tgz", + "integrity": "sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.7", + "@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.7", + "@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.7", + "@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.7", + "@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.7", + "@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.6", + "@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.8", + "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.15.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.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", + "@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/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + } + }, + "@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + } + }, + "@babel/register": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.0.tgz", + "integrity": "sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "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==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@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.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@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, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "@bitwarden/jslib-angular": { + "version": "file:../angular", + "requires": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@angular/router": "^12.2.13", + "@bitwarden/jslib-common": "file:../common", + "@types/duo_web_sdk": "^2.7.1", + "duo_web_sdk": "git+https://github.com/duosecurity/duo_web_sdk.git", + "rimraf": "^3.0.2", + "rxjs": "^7.4.0", + "tldjs": "^2.3.1", + "typescript": "4.3.5", + "zone.js": "0.11.4" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@compodoc/compodoc": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.18.tgz", + "integrity": "sha512-+AFtcj2U3AJq6r8a2+PTdajIlS7m3pgvDhqgoYZJ4Rg/Zp9xvuDvUJU+5oHu8iHCAWwda3NoLUDjOZMNR8uIKg==", + "dev": true, + "requires": { + "@angular-devkit/schematics": "^13.1.2", + "@babel/core": "^7.16.7", + "@babel/preset-env": "^7.16.7", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.0", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.10", + "chokidar": "^3.5.2", + "colors": "1.4.0", + "commander": "^8.3.0", + "cosmiconfig": "^7.0.1", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "findit2": "^2.2.3", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "handlebars": "^4.7.7", + "html-entities": "^2.3.2", + "i18next": "^21.6.5", + "inside": "^1.0.0", + "json5": "^2.2.0", + "lodash": "^4.17.21", + "loglevel": "^1.8.0", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "^4.0.9", + "minimist": "^1.2.5", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "^2.12.313", + "pdfmake": "^0.2.4", + "semver": "^7.3.5", + "traverse": "^0.6.6", + "ts-morph": "^13.0.2", + "uuid": "^8.3.2" + }, + "dependencies": { + "@angular-devkit/schematics": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.3.tgz", + "integrity": "sha512-+dyC4iKV0huvpjiuz4uyjLNK3FsCIp/Ghv5lXvhG6yok/dCAubsJItJOxi6G16aVCzG/E9zbsDfm9fNMyVOkgQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "13.2.3", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "@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, + "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/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, + "requires": { + "@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-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, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@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, + "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", + "@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" + }, + "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 + } + } + }, + "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" + } + }, + "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, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "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.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.21.0" + } + }, + "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, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "glob": { + "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", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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 + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "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" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "dependencies": { + "open": { + "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", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + } + } + }, + "@compodoc/ngd-core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.0.tgz", + "integrity": "sha512-nyBH7J7SJJ2AV6OeZhJ02kRtVB7ALnZJKgShjoL9CNmOFEj8AkdhP9qTBIgjaDrbsW5pF4nx32KQL2fT7RFnqw==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "fancy-log": "^1.3.3", + "typescript": "^4.0.3" + }, + "dependencies": { + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + } + } + }, + "@compodoc/ngd-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.0.tgz", + "integrity": "sha512-Jo4VCMzIUtgIAdRmhHhOoRRE01gCjc5CyrUERRx0VgEzkkCm1Wmu/XHSsQP6tSpCYHBjERghqaDqH5DabkR2oQ==", + "dev": true, + "requires": { + "@aduh95/viz.js": "^3.1.0", + "@compodoc/ngd-core": "~2.1.0", + "dot": "^1.1.3", + "fs-extra": "^9.0.1" + }, + "dependencies": { + "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" + } + } + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", + "dev": true + }, + "@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 + }, + "@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "dev": true, + "requires": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "@emotion/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", + "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "dev": true, + "requires": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "dev": true + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true + }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", + "dev": true + }, + "@emotion/styled": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz", + "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==", + "dev": true, + "requires": { + "@emotion/styled-base": "^10.3.0", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/styled-base": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz", + "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", + "dev": true + }, + "@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "requires": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "requires": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "requires": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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": "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" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "@jridgewell/resolve-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-1.0.0.tgz", + "integrity": "sha512-9oLAnygRMi8Q5QkYEU4XWK04B+nuoXoxjRvRxgjuChkLZFBja0YPSgdZ7dZtwhncLBcQe/I/E+fLuk5qxcYVJA==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "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" + }, + "dependencies": { + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + } + } + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@mdx-js/loader": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", + "integrity": "sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==", + "dev": true, + "requires": { + "@mdx-js/mdx": "1.6.22", + "@mdx-js/react": "1.6.22", + "loader-utils": "2.0.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "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" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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 + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "dev": true, + "requires": {} + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "dev": true + }, + "@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" + }, + "dependencies": { + "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 + } + } + }, + "@ngtools/webpack": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.16.tgz", + "integrity": "sha512-Y2wYX0ybpTYCuSXrG7+3FAtL4dSa7D1vMxymeJEmPTf5QcFTbllwcGQ82Q9lzTn3UDxvt6ZqAYfmWZHGp2GQ9w==", + "dev": true, + "requires": {} + }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "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" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", + "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^8.2.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", + "dev": true + }, + "@schematics/angular": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.16.tgz", + "integrity": "sha512-EITPMaRE7iCosf0nyZFOpxTDAiPD3qm4QUxHKcwIaJTrzi89nBoUubw8+pFy5/Gtpadww80YD8ODV64B1bPGMA==", + "dev": true, + "requires": { + "@angular-devkit/core": "12.2.16", + "@angular-devkit/schematics": "12.2.16", + "jsonc-parser": "3.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "12.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.16.tgz", + "integrity": "sha512-cnVtUYSET27B5mRIBp38mpKIX0iHv/hWKiPo74WCGrNwTgwmMHngjgQ4ySn/w1W4s8LL6TDW55ZkRdwyk8TVMQ==", + "dev": true, + "requires": { + "ajv": "8.6.2", + "ajv-formats": "2.1.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "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-formats": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz", + "integrity": "sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "dev": true + }, + "@storybook/addon-actions": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.4.19.tgz", + "integrity": "sha512-GpSvP8xV8GfNkmtGJjfCgaOx6mbjtyTK0aT9FqX9pU0s+KVMmoCTrBh43b7dWrwxxas01yleBK9VpYggzhi/Fw==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + } + }, + "@storybook/addon-backgrounds": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.4.19.tgz", + "integrity": "sha512-yn8MTE7lctO48Rdw+DmmA1wKdf5eyAbA/vrug5ske/U2WPgGc65sApzwT8BItZfuyAMjuT5RnCWwd7o6hGRgGQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-controls": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.4.19.tgz", + "integrity": "sha512-JHi5z9i6NsgQLfG5WOeQE1AyOrM+QJLrjT+uOYx40bq+OC1yWHH7qHiphPP8kjJJhCZlaQk1qqXYkkQXgaeHSw==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-docs": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.4.19.tgz", + "integrity": "sha512-OEPyx/5ZXmZOPqIAWoPjlIP8Q/YfNjAmBosA8tmA8t5KCSiq/vpLcAvQhxqK6n0wk/B8Xp67Z8RpLfXjU8R3tw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/loader": "^1.6.22", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/builder-webpack4": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/postinstall": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/source-loader": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "escodegen": "^2.0.0", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "nanoid": "^3.1.23", + "p-limit": "^3.1.0", + "prettier": ">=2.2.1 <=2.3.0", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-essentials": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.4.19.tgz", + "integrity": "sha512-vbV8sjepMVEuwhTDBHjO3E6vXluG7RiEeozV1QVuS9lGhjQdvUPdZ9rDNUcP6WHhTdEkS/ffTMaGIy1v8oZd7g==", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.4.19", + "@storybook/addon-backgrounds": "6.4.19", + "@storybook/addon-controls": "6.4.19", + "@storybook/addon-docs": "6.4.19", + "@storybook/addon-measure": "6.4.19", + "@storybook/addon-outline": "6.4.19", + "@storybook/addon-toolbars": "6.4.19", + "@storybook/addon-viewport": "6.4.19", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/node-logger": "6.4.19", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-links": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.4.19.tgz", + "integrity": "sha512-ebFHYlGDQkHSmI5QEJb1NxGNToVOLgjKkxXUe+JXX7AfHvrWiXVrN/57aOtBPZzj4h2jRPRTZgwR5glhPIlfEQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-measure": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.4.19.tgz", + "integrity": "sha512-PXeU0AlpnGEvnzBQ6snkzmlIpwE0ci8LdFtL1Vz1V1Xk5fbuETWYuEkPuk1oZ7L9igB9cfT32SyJlE5MC1iaGg==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/addon-outline": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.4.19.tgz", + "integrity": "sha512-7ZDXo8qrms6dx0KRP9PInXIie82h5g9XCNrGOUdfZkQPvgofJVj0kNv6p+WOiGiaVfKPC5KMgIofqzBTFV+k6Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-toolbars": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.4.19.tgz", + "integrity": "sha512-2UtuX9yB1rD/CAZv1etnOnunfPTvsEKEg/J2HYMKE1lhenWC5muIUXvDXCXvwDC65WviPJ56nFNKaKK1Zz7JDg==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addon-viewport": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.4.19.tgz", + "integrity": "sha512-T1hdImxbLj8suQSTbp6HSA1LLHOlqaNK5jjnqzEOoAxY0O8LNPXMJ2jKIeT2fPQ0v+tWGU3tbwf+3xFq0parVQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addons": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.19.tgz", + "integrity": "sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==", + "dev": true, + "requires": { + "@storybook/api": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/theming": "6.4.19", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/angular": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-6.4.19.tgz", + "integrity": "sha512-CyJg9reKbk69gkYK1QJhzPydVMeelJ1Fj2VvK5qKL6xEwHSj9buYmbS631i8AC0c9vIWv5lk2BENCLyGqdPYwQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/core": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@types/webpack-env": "^1.16.0", + "autoprefixer": "^9.8.6", + "core-js": "^3.8.2", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "global": "^4.4.0", + "postcss": "^7.0.36", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "react": "16.14.0", + "react-dom": "16.14.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "sass-loader": "^10.1.0", + "strip-json-comments": "3.1.1", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "ts-loader": "^8.0.14", + "tsconfig-paths-webpack-plugin": "^3.3.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@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/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-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-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" + } + }, + "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 + }, + "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": {} + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "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 + }, + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": 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" + } + } + } + }, + "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" + } + }, + "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-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-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-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 + }, + "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 + }, + "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-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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "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" + }, + "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" + } + } + } + }, + "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, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "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" + } + }, + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.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" + } + }, + "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" + } + }, + "sass-loader": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.1.tgz", + "integrity": "sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "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" + } + }, + "serialize-javascript": { + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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" + } + }, + "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==", + "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" + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "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": "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" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/api": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.19.tgz", + "integrity": "sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==", + "dev": true, + "requires": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/builder-webpack4": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.4.19.tgz", + "integrity": "sha512-wxA6SMH11duc9D53aeVVBwrVRemFIoxHp/dOugkkg6ZZFAb4ZmWzf/ENc3vQIZdZpfNRi7IZIZEOfoHc994cmw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@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 + } + } + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "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/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-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-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" + } + }, + "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 + }, + "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": {} + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "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 + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "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" + } + }, + "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-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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": 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" + } + } + } + }, + "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 + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "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-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-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-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 + }, + "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" + } + }, + "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 + }, + "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-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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "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" + }, + "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" + } + } + } + }, + "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, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "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": { + "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" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "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" + } + }, + "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" + } + }, + "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, + "requires": { + "randombytes": "^2.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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + } + }, + "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" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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.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" + } + }, + "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": "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" + } + }, + "serialize-javascript": { + "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" + } + }, + "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==", + "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" + } + } + } + }, + "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==", + "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" + } + }, + "webpack-filter-warnings-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", + "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", + "dev": true, + "requires": {} + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/builder-webpack5": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.4.19.tgz", + "integrity": "sha512-AWM4YMN1gPaf7jfntqZTCGpIQ1tF6YRU1JtczPG4ox28rTaO6NMfOBi9aRhBre/59pPOh9bF6u2gu/MIHmRW+w==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/preview-web": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@storybook/theming": "6.4.19", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@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 + } + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "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 + }, + "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": {} + }, + "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" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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, + "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 + } + } + }, + "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" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "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 + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "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 + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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-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, + "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 + } + } + }, + "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, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "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" + } + }, + "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 + } + } + }, + "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, + "requires": { + "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-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + } + } + }, + "@storybook/channel-postmessage": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.4.19.tgz", + "integrity": "sha512-E5h/itFzQ/6M08LR4kqlgqqmeO3tmavI+nUAlZrkCrotpJFNMHE2i0PQHg0TkFJrRDpYcrwD+AjUW4IwdqrisQ==", + "dev": true, + "requires": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^5.3.2" + } + }, + "@storybook/channel-websocket": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.4.19.tgz", + "integrity": "sha512-cXKwQjIXttfdUyZlcHORelUmJ5nUKswsnCA/qy7IRWpZjD8yQJcNk1dYC+tTHDVqFgdRT89pL0hRRB1rlaaR8Q==", + "dev": true, + "requires": { + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^5.3.2" + } + }, + "@storybook/channels": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz", + "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-api": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.4.19.tgz", + "integrity": "sha512-OCrT5Um3FDvZnimQKwWtwsaI+5agPwq2i8YiqlofrI/NPMKp0I7DEkCGwE5IRD1Q8BIKqHcMo5tTmfYi0AxyOg==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.19", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz", + "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/components": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.4.19.tgz", + "integrity": "sha512-q/0V37YAJA7CNc+wSiiefeM9+3XVk8ixBNylY36QCGJgIeGQ5/79vPyUe6K4lLmsQwpmZsIq1s1Ad5+VbboeOA==", + "dev": true, + "requires": { + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.1.2", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.4.19.tgz", + "integrity": "sha512-55LOQ/h/kf1jMhjN85t/pIEdIwWEG9yV7bdwv3niVvmoypCxyyjn9/QNK0RKYAeDSUtdm6FVoJ6k5CpxWz2d8w==", + "dev": true, + "requires": { + "@storybook/core-client": "6.4.19", + "@storybook/core-server": "6.4.19" + } + }, + "@storybook/core-client": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.4.19.tgz", + "integrity": "sha512-rQHRZjhArPleE7/S8ZUolgzwY+hC0smSKX/3PQxO2GcebDjnJj6+iSV3h+aSMHMmTdoCQvjYw9aBpT8scuRe+A==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/channel-websocket": "6.4.19", + "@storybook/client-api": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/preview-web": "6.4.19", + "@storybook/store": "6.4.19", + "@storybook/ui": "6.4.19", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.4.19.tgz", + "integrity": "sha512-X1pJJkO48DFxl6iyEemIKqRkJ7j9/cBh3BRBUr+xZHXBvnD0GKDXIocwh0PjSxSC6XSu3UCQnqtKi3PbjRl8Dg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@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 + } + } + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "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/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-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-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" + } + }, + "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 + }, + "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": {} + }, + "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" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "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 + }, + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": 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" + } + } + } + }, + "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" + }, + "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" + } + }, + "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" + } + } + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + } + } + }, + "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" + } + }, + "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 + }, + "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-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-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-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 + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "serialize-javascript": { + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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" + } + }, + "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" + } + }, + "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==", + "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" + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "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" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/core-events": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz", + "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/core-server": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.4.19.tgz", + "integrity": "sha512-bKsUB9f7hl5ya2JXxpIrErmbDQjoH39FVbzYZWjMo4t/b7+Xyi6vYadwyWcqlpUQmis09ZaSMv8L/Tw0TuwLAA==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.19", + "@storybook/manager-webpack4": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.19", + "@types/node": "^14.0.10", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "fs-extra": "^9.0.1", + "globby": "^11.0.2", + "ip": "^1.1.5", + "lodash": "^4.17.21", + "node-fetch": "^2.6.1", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^5.3.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3" + }, + "dependencies": { + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "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/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-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-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" + } + }, + "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 + }, + "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": {} + }, + "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" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": 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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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-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-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-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 + }, + "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 + }, + "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-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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "serialize-javascript": { + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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==", + "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" + } + }, + "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" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "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" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.4.19.tgz", + "integrity": "sha512-gf/zRhGoAVsFwSyV2tc+jeJfZQkxF6QsaZgbUSe24/IUvGFCT/PS/jZq1qy7dECAwrTOfykgu8juyBtj6WhWyw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@storybook/manager-webpack4": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.4.19.tgz", + "integrity": "sha512-R8ugZjTYqXvlc6gDOcw909L65sIleOmIJLZR+N6/H85MivGXHu39jOwONqB7tVACufRty4FNecn8tEiQL2SAKA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.1", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "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/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-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-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" + } + }, + "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 + }, + "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": {} + }, + "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" + } + }, + "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" + } + } + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "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 + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": 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" + } + } + } + }, + "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" + } + }, + "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 + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "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-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-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-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 + }, + "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" + } + }, + "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 + }, + "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-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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "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" + }, + "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" + } + } + } + }, + "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, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "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" + } + }, + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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==", + "dev": true, + "requires": { + "randombytes": "^2.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.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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" + } + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + } + }, + "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" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "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.5.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.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" + } + }, + "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": "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" + } + }, + "serialize-javascript": { + "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" + } + }, + "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==", + "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" + } + } + } + }, + "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==", + "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" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@storybook/manager-webpack5": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.4.19.tgz", + "integrity": "sha512-hVjWhWAOgWaymBy0HeRskN+MfKLpqLP4Txfw+3Xqg1qplgexV0w2O4BQrS/SNEH4V/1qF9h8XTsk3L3oQIj3Mg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.19", + "@storybook/core-client": "6.4.19", + "@storybook/core-common": "6.4.19", + "@storybook/node-logger": "6.4.19", + "@storybook/theming": "6.4.19", + "@storybook/ui": "6.4.19", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.1", + "process": "^0.11.10", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "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 + }, + "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": {} + }, + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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, + "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 + } + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.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 + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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-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, + "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 + } + } + }, + "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, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "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" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "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 + } + } + }, + "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, + "requires": { + "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-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + } + } + }, + "@storybook/node-logger": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.4.19.tgz", + "integrity": "sha512-hO2Aar3PgPnPtNq2fVgiuGlqo3EEVR6TKVBXMq7foL3tN2k4BQFKLDHbm5qZQQntyYKurKsRUGKPJFPuI1ov/w==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "@storybook/postinstall": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.4.19.tgz", + "integrity": "sha512-/0tHHxyIV82zt1rw4BW70GmrQbDVu9IJPAxOqFzGjC1fNojwJ53mK6FfUsOzbhG5mWk5p0Ip5+zr74moP119AA==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/preview-web": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.4.19.tgz", + "integrity": "sha512-jqltoBv5j7lvnxEfV9w8dLX9ASWGuvgz97yg8Yo5FqkftEwrHJenyvMGcTgDJKJPorF+wiz/9aIqnmd3LCAcZQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/channel-postmessage": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.19", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.19.tgz", + "integrity": "sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "history": "5.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, + "@storybook/source-loader": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.4.19.tgz", + "integrity": "sha512-XqTsqddRglvfW7mhyjwoqd/B8L6samcBehhO0OEbsFp6FPWa9eXuObCxtRYIcjcSIe+ksbW3D/54ppEs1L/g1Q==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/store": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.4.19.tgz", + "integrity": "sha512-N9/ZjemRHGfT3InPIbqQqc6snkcfnf3Qh9oOr0smbfaVGJol//KOX65kzzobtzFcid0WxtTDZ3HmgFVH+GvuhQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/theming": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.19.tgz", + "integrity": "sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==", + "dev": true, + "requires": { + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/ui": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.4.19.tgz", + "integrity": "sha512-gFwdn5LA2U6oQ4bfUFLyHZnNasGQ01YVdwjbi+l6yjmnckBNtZfJoVTZ1rzGUbxSE9rK48InJRU+latTsr7xAg==", + "dev": true, + "requires": { + "@emotion/core": "^10.1.1", + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.19", + "copy-to-clipboard": "^3.3.1", + "core-js": "^3.8.2", + "core-js-pure": "^3.8.2", + "downshift": "^6.0.15", + "emotion-theming": "^10.0.27", + "fuse.js": "^3.6.1", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "qs": "^6.10.0", + "react-draggable": "^4.4.3", + "react-helmet-async": "^1.0.7", + "react-sizeme": "^3.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "store2": "^2.12.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@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 + }, + "@ts-morph/common": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.12.3.tgz", + "integrity": "sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "path-browserify": "^1.0.1" + } + }, + "@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "dev": true, + "requires": { + "@types/color-name": "*" + } + }, + "@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/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, + "@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, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@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, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@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, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "@types/is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jasmine": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.3.tgz", + "integrity": "sha512-SWyMrjgdAUHNQmutvDcKablrJhkDLy4wunTme8oYLjKp41GnHGxMRXr2MQMvy/qy8H3LdzwQk9gH4hZ6T++H8g==", + "dev": true + }, + "@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 + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@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 + }, + "@types/node": { + "version": "12.20.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.46.tgz", + "integrity": "sha512-cPjLXj8d6anFPzFvOPxS3fvly3Shm5nTfl6g8X5smexixbuGUf7hfr21J5tX9JW+UPStp/5P5R8qrKL5IyVJ+A==", + "dev": true + }, + "@types/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/npmlog": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", + "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", + "dev": true + }, + "@types/overlayscrollbars": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", + "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==", + "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/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "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/react": { + "version": "17.0.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz", + "integrity": "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + } + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", + "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "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 + } + } + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.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 + } + } + }, + "@types/webpack-env": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", + "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", + "dev": true + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@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, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@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 + }, + "@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 + }, + "@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 + }, + "@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" + }, + "dependencies": { + "@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/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/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" + } + } + } + }, + "@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" + }, + "dependencies": { + "@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/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-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, + "requires": { + "@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.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.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.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.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.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.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.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.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.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.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.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.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.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.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-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" + }, + "dependencies": { + "@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-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/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, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webcomponents/custom-elements": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.5.0.tgz", + "integrity": "sha512-c+7jPQCs9h/BYVcZ2Kna/3tsl3A/9EyXfvWjp5RiTDm1OpTcbZaCa1z4RNcTe/hUtXaqn64JjNW1yrWT+rZ8gg==", + "dev": true + }, + "@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 + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "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, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", + "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "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" + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "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-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, + "requires": {} + }, + "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" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "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-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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" + }, + "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 + } + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "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" + } + }, + "apache-crypt": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.5.tgz", + "integrity": "sha512-ICnYQH+DFVmw+S4Q0QY2XRXD8Ne8ewh8HgbuFH4K7022zCxgHM0Hz1xkRnUlEfAXNbwp1Cnhbedu60USIfDxvg==", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.1.4" + } + }, + "apache-md5": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.7.tgz", + "integrity": "sha512-JtHjzZmJxtzfTSjsCyHgPR155HBe5WGyUyHTaEkfy46qhwCFKx1Epm6nAxgUG3WfUZP1dWhGqj9Z2NOBeZ+uBw==", + "dev": true + }, + "app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "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" + } + }, + "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": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "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-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 + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "array.prototype.map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz", + "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "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 + }, + "ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=", + "dev": true, + "requires": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + }, + "dependencies": { + "escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=", + "dev": true, + "requires": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0", + "source-map": "~0.1.30" + } + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=", + "dev": true + }, + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=", + "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 + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "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.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.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" + } + }, + "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, + "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" + } + }, + "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" + } + }, + "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-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "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-emotion": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", + "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@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==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.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 + } + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", + "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "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.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", + "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.4" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "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" + } + } + } + }, + "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 + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", + "dev": true + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", + "dev": true + }, + "better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "requires": { + "open": "^7.0.3" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.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.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "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.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "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 + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "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" + }, + "dependencies": { + "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 + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "brotli": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz", + "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=", + "dev": true, + "requires": { + "base64-js": "^1.1.2" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "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-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=", + "dev": true, + "requires": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "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": { + "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.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.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true + }, + "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 + }, + "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 + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "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": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "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-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "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 + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "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": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "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.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "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" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "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.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "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" + } + }, + "circular-dependency-plugin": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", + "dev": true, + "requires": {} + }, + "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" + } + }, + "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-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-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-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" + } + }, + "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 + } + } + }, + "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, + "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-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "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, + "requires": { + "colors": "1.4.0", + "string-width": "^4.2.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "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": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "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" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "dev": true + }, + "code-block-writer": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.0.tgz", + "integrity": "sha512-GEqWvEWWsOvER+g9keO4ohFoD3ymwyCnqY3hoTr7GZipYFwEhMHJw+TtV0rfgRhNImM6QWZGO2XYjlJVyYT62w==", + "dev": true, + "requires": { + "tslib": "2.3.1" + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "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-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-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colord": { + "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.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "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 + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "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 + }, + "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 + } + } + }, + "compute-scroll-into-view": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", + "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.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 + } + } + }, + "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 + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "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.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.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": { + "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.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" + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "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-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "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": { + "minimist": "^1.2.5" + } + }, + "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" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dev": true, + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "copy-webpack-plugin": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", + "dev": true, + "requires": { + "fast-glob": "^3.2.5", + "glob-parent": "^6.0.0", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "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": {} + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + }, + "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" + } + } + } + }, + "core-js": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==", + "dev": true + }, + "core-js-compat": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", + "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "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-js-pure": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", + "dev": true + }, + "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 + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "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", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "@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 + }, + "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" + } + }, + "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" + } + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "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 + }, + "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-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-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" + } + }, + "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" + } + }, + "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 + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "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" + } + } + } + }, + "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" + } + }, + "critters": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.12.tgz", + "integrity": "sha512-ujxKtKc/mWpjrOKeaACTaQ1aP0O31M0ZPWhfl85jZF1smPU4Ivb9va5Ox2poif4zVJQQo0LCFlzGtEZAsCAPcw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^4.1.3", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "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-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "timsort": "^0.3.0" + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.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 + } + } + }, + "css-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.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", + "semver": "^7.3.5" + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "p-limit": "^3.0.2", + "postcss": "^8.3.5", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "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" + }, + "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": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", + "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": "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.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "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, + "requires": { + "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" + } + }, + "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, + "requires": {} + }, + "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" + } + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "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" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "date-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decache": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", + "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", + "dev": true, + "requires": { + "callsite": "^1.0.0" + } + }, + "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==", + "dev": true, + "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.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 + }, + "deep-object-diff": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", + "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "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" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "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", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "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" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "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": { + "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" + } + }, + "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 + }, + "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" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "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 + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "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 + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.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 + } + } + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "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" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "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" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "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": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "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" + } + }, + "domutils": { + "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", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.3.tgz", + "integrity": "sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg==", + "dev": true + }, + "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" + } + }, + "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 + }, + "downshift": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz", + "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.14.8", + "compute-scroll-into-view": "^1.0.17", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "tslib": "^2.3.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "dev": true + }, + "element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dev": true, + "requires": { + "batch-processor": "1.0.0" + } + }, + "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 + }, + "emotion-theming": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.3.0.tgz", + "integrity": "sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/weak-memoize": "0.2.5", + "hoist-non-react-statics": "^3.3.0" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "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" + } + }, + "engine.io": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dev": true, + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "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==", + "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" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.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.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "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 + }, + "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" + } + }, + "es5-shim": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.5.tgz", + "integrity": "sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w==", + "dev": true + }, + "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-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "dev": true + }, + "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" + } + }, + "esbuild": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", + "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", + "dev": true, + "optional": true, + "requires": { + "esbuild-android-arm64": "0.13.8", + "esbuild-darwin-64": "0.13.8", + "esbuild-darwin-arm64": "0.13.8", + "esbuild-freebsd-64": "0.13.8", + "esbuild-freebsd-arm64": "0.13.8", + "esbuild-linux-32": "0.13.8", + "esbuild-linux-64": "0.13.8", + "esbuild-linux-arm": "0.13.8", + "esbuild-linux-arm64": "0.13.8", + "esbuild-linux-mips64le": "0.13.8", + "esbuild-linux-ppc64le": "0.13.8", + "esbuild-netbsd-64": "0.13.8", + "esbuild-openbsd-64": "0.13.8", + "esbuild-sunos-64": "0.13.8", + "esbuild-windows-32": "0.13.8", + "esbuild-windows-64": "0.13.8", + "esbuild-windows-arm64": "0.13.8" + } + }, + "esbuild-android-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", + "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", + "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", + "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", + "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", + "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", + "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", + "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", + "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", + "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", + "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", + "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", + "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", + "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", + "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", + "dev": true, + "optional": true + }, + "esbuild-wasm": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.8.tgz", + "integrity": "sha512-UbD+3nloiSpJWXTCInZQrqPe8Y+RLfDkY/5kEHiXsw/lmaEvibe69qTzQu16m5R9je/0bF7VYQ5jaEOq0z9lLA==", + "dev": true + }, + "esbuild-windows-32": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", + "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", + "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", + "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", + "dev": true, + "optional": true + }, + "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 + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "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, + "optional": 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" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 + }, + "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" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "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 + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "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" + } + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "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-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-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-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-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" + } + }, + "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 + }, + "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 + }, + "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.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "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.7", + "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" + }, + "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 + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "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 + } + } + }, + "ext": { + "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.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "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" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "requires": { + "color-support": "^1.1.3" + } + }, + "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.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.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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 + }, + "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, + "requires": { + "reusify": "^1.0.4" + } + }, + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, + "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, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.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 + }, + "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-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" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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-system-cache": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz", + "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=", + "dev": true, + "requires": { + "bluebird": "^3.3.5", + "fs-extra": "^0.30.0", + "ramda": "^0.21.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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-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" + } + }, + "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 + } + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha1-WKRmaX34piBc39vzlVNri9d3pfY=", + "dev": true + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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-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-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-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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "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" + } + } + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "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 + }, + "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 + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.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-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-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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true + }, + "fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "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 + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "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-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", + "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-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, + "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 + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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 + }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "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.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "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 + }, + "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 + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.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 + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", + "dev": true, + "requires": { + "is-glob": "^3.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" + } + } + } + }, + "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==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "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-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-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": { + "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.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" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "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 + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "history": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz", + "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "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" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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 + } + } + } + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.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" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + } + }, + "http-auth-connect": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.5.tgz", + "integrity": "sha512-zykAOKpVAXyzhOLm6+xyB/RtRcfN3uDfH4Al73DIfeSb6B7nr0WToLI6UyyM6ohtcLmbBPksWXzVbEDStz8ObQ==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "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.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.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "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 + }, + "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-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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-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-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-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" + } + }, + "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" + } + } + } + }, + "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 + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "i18next": { + "version": "21.6.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.11.tgz", + "integrity": "sha512-tJ2+o0lVO+fhi8bPkCpBAeY1SgkqmQm5NzgPWCQssBrywJw98/o+Kombhty5nxQOpHtvMmsxcOopczUiH6bJxQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.0" + } + }, + "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==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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" + }, + "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-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" + } + }, + "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": { + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "inquirer": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha1-20Xpk1c82z23C5gy6ChbrUZCR3A=", + "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" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "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 + }, + "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", + "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": "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-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-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^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.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.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, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "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, + "requires": { + "has": "^1.0.3" + } + }, + "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-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==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "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-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-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.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-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-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "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, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "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.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "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-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "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.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "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-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=", + "dev": true + }, + "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-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "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": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "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 + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.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 + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.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 + }, + "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" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.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 + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "jasmine-core": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz", + "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA==", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "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 + }, + "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" + } + }, + "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" + } + } + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "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, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.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": "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" + } + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "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": "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 + }, + "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" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "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" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "karma": { + "version": "6.3.16", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.16.tgz", + "integrity": "sha512-nEU50jLvDe5yvXqkEJRf8IuvddUkOY2x5Xc4WXHz6dxINgGDrgD2uqQWeVrJs4hbfNaotn+HQ1LZJ4yOXrL7xQ==", + "dev": true, + "requires": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "colors": "1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.2.0", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "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" + } + }, + "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 + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "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 + } + } + }, + "karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "dev": true, + "requires": { + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.1.1.tgz", + "integrity": "sha512-oxeOSBVK/jdZsiX03LhHQkO4eISSQb5GbHi6Nsw3Mw7G4u6yUgacBAftnO7q+emPBLMsrNbz1pGIrj+Jb3z17A==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.1.tgz", + "integrity": "sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw==", + "dev": true, + "requires": { + "jasmine-core": "^3.6.0" + } + }, + "karma-jasmine-html-reporter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", + "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", + "dev": true, + "requires": {} + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "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 + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + } + }, + "less": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.1.tgz", + "integrity": "sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": 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, + "optional": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "less-loader": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.0.1.tgz", + "integrity": "sha512-Crln//HpW9M5CbtdfWm3IO66Cvx1WhZQvNybXgfB2dD/6Sav9ppw+IWqs/FQKPBFO4B6X0X28Z0WNznshgwUzA==", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "license-webpack-plugin": { + "version": "2.3.20", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.20.tgz", + "integrity": "sha512-AHVueg9clOKACSHkhmEI+PCC9x8+qsQVuKECZD3ETxETK5h/PCv5/MUzyG1gm8OMcip/s1tcNxqo9Qb7WhjGsg==", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + }, + "dependencies": { + "@types/webpack-sources": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", + "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.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 + } + } + }, + "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.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": { + "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": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "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.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "log4js": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "dev": true, + "requires": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + }, + "dependencies": { + "debug": { + "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" + } + } + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true + }, + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "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": "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" + } + }, + "lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dev": true, + "requires": { + "fault": "^1.0.0", + "highlight.js": "~10.7.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" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "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-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", + "dev": true + }, + "map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", + "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" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "markdown-to-jsx": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.6.tgz", + "integrity": "sha512-1wrIGZYwIG2gR3yfRmbr4FlQmhaAKoKTpRo4wur4fp9p0njU1Hi7vR8fj0AUKKIcPduiJmPprzmCB5B/GvlC7g==", + "dev": true, + "requires": {} + }, + "marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "dev": true + }, + "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" + } + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "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 + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "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.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" + } + }, + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", + "dev": true, + "requires": { + "map-or-similar": "^1.5.0" + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "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": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "mime-db": "1.51.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 + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mini-css-extract-plugin": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.2.tgz", + "integrity": "sha512-ZmqShkn79D36uerdED+9qdo1ZYG8C1YsWvXu0UMJxurZnSdgz7gQKO2EGv8T55MhDqG3DYmGtizZNpM/UbTlcA==", + "dev": true, + "requires": { + "schema-utils": "^3.1.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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": { + "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.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "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-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.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-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.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": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.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" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "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": { + "minimist": "^1.2.5" + } + }, + "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" + } + } + } + }, + "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 + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "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" + } + }, + "needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "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 + }, + "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 + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "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-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "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-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "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-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.1.tgz", + "integrity": "sha512-zJ4jePUHR8cceduZ53b6temRalyGpkC2Kc2r3ecNphmL+uWNoJ3YcOcUjpbG6WwoE/Ef6/+aEZz63neI2WIa1Q==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "npmlog": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", + "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.0", + "set-blocking": "^2.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" + } + } + } + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "optional": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "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": { + "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" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "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 + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.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=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "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, + "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 + }, + "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" + } + }, + "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" + } + }, + "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-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" + } + }, + "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 + } + } + }, + "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-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "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==", + "dev": true, + "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==", + "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.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.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "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": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "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" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "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-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "overlayscrollbars": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", + "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", + "dev": true + }, + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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": "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" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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-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-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 + }, + "pacote": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.2.tgz", + "integrity": "sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^2.0.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^3.0.0", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.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 + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.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" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, + "parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "requires": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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 + }, + "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": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "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-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.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 + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "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" + } + }, + "pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "requires": {} + }, + "pdfmake": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.4.tgz", + "integrity": "sha512-EM39waHUe/Dg1W9C3XqYbpx6tfhYyU14JHZlI1HaW0AUEY32GbkRBjDLGWo9f7z/k3ea6k1p9yyDrflnvtZS1A==", + "dev": true, + "requires": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "picocolors": { + "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.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": 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" + } + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "piscina": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz", + "integrity": "sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "polished": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.4.tgz", + "integrity": "sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.7" + }, + "dependencies": { + "@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, + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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.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-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "dev": true, + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "dev": true, + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "dev": true, + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "dev": true, + "requires": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.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 + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.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 + } + } + }, + "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, + "requires": {} + }, + "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": {} + }, + "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": {} + }, + "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": {} + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "dev": true, + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-import": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-initial": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "dev": true, + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-load-config": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz", + "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==", + "dev": true, + "requires": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.1.tgz", + "integrity": "sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.5" + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.3" + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "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-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": {} + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "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, + "requires": { + "cssnano-utils": "^3.0.2", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "dev": true, + "requires": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + }, + "dependencies": { + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "dev": true, + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.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 + } + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "postcss-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "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, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "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, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "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, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "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 + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "prismjs": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz", + "integrity": "sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ==", + "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 + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promise.allsettled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz", + "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + } + }, + "promise.prototype.finally": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", + "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "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, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "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.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==", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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.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", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "ramda": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz", + "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=", + "dev": true + }, + "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.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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" + } + } + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-colorful": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.1.tgz", + "integrity": "sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==", + "dev": true, + "requires": {} + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-draggable": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz", + "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==", + "dev": true, + "requires": { + "clsx": "^1.1.1", + "prop-types": "^15.6.0" + } + }, + "react-element-to-jsx-string": { + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", + "dev": true, + "requires": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", + "dev": true + }, + "react-helmet-async": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.2.3.tgz", + "integrity": "sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + } + }, + "react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "react-popper": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", + "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "dev": true, + "requires": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + } + }, + "react-popper-tooltip": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz", + "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@popperjs/core": "^2.5.4", + "react-popper": "^2.2.4" + } + }, + "react-router": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.1.tgz", + "integrity": "sha512-2fG0udBtxou9lXtK97eJeET2ki5//UWfQSl1rlJ7quwe6jrktK9FCCc8dQb5QY6jAv3jua8bBQRhhDOM/kVRsg==", + "dev": true, + "requires": { + "history": "^5.2.0" + }, + "dependencies": { + "history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6" + } + } + } + }, + "react-router-dom": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.1.tgz", + "integrity": "sha512-I6Zax+/TH/cZMDpj3/4Fl2eaNdcvoxxHoH1tYOREsQ22OKDYofGebrNm6CTPUcvLvZm63NL/vzCYdjf9CUhqmA==", + "dev": true, + "requires": { + "history": "^5.2.0", + "react-router": "6.2.1" + }, + "dependencies": { + "history": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.2.0.tgz", + "integrity": "sha512-uPSF6lAJb3nSePJ43hN3eKj1dTWpN9gMod0ZssbFTIsen+WehTmEadgL+kg78xLJFdRfrrC//SavDzmRVdE+Ig==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6" + } + } + } + }, + "react-sizeme": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", + "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", + "dev": true, + "requires": { + "element-resize-detector": "^1.2.2", + "invariant": "^2.2.4", + "shallowequal": "^1.1.0", + "throttle-debounce": "^3.0.1" + } + }, + "react-syntax-highlighter": { + "version": "13.5.3", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz", + "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.1.1", + "lowlight": "^1.14.0", + "prismjs": "^1.21.0", + "refractor": "^3.1.0" + } + }, + "react-textarea-autosize": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", + "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.0.0", + "use-latest": "^1.0.0" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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" + } + }, + "readdirp": { + "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" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "refractor": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz", + "integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==", + "dev": true, + "requires": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.25.0" + }, + "dependencies": { + "prismjs": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", + "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==", + "dev": true + } + } + }, + "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 + }, + "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, + "requires": { + "regenerate": "^1.4.2" + } + }, + "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 + }, + "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, + "requires": { + "@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" + } + }, + "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 + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "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, + "requires": { + "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" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "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, + "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 + }, + "remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "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" + } + }, + "@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==", + "dev": true + }, + "@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==", + "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" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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 + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "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 + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "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 + }, + "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" + } + } + } + }, + "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 + }, + "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-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 + }, + "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.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "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" + }, + "dependencies": { + "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-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-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": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "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", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.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 + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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 + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "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" + } + }, + "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" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "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": { + "queue-microtask": "^1.2.2" + } + }, + "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" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + } + } + }, + "rxjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz", + "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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 + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "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" + } + }, + "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" + } + } + } + }, + "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-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-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-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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "sass": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.36.0.tgz", + "integrity": "sha512-fQzEjipfOv5kh930nu3Imzq3ie/sGDc/4KtQMJlt7RRdrkQSfe37Bwi/Rf/gfuYHsIuE1fIlDMvpyMcEwjnPvg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.1.0.tgz", + "integrity": "sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.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" + }, + "dependencies": { + "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": {} + }, + "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 + } + } + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "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.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" + } + }, + "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" + } + }, + "send": { + "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", + "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" + }, + "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 + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "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 + } + } + }, + "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, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "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 + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "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.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.2" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "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" + } + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", + "dev": true + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, + "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 + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "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 + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "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-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-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-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-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" + } + }, + "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 + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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 + } + } + }, + "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" + } + } + } + }, + "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": { + "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 + }, + "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" + } + } + } + }, + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "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": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "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.3" + }, + "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" + } + } + } + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.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.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "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 + }, + "source-map-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", + "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "source-map-js": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "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", + "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.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "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" + } + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "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": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "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 + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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, + "optional": 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" + } + }, + "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-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-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-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" + } + }, + "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 + } + } + }, + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "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" + } + }, + "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, + "optional": true + }, + "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" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "store2": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.13.1.tgz", + "integrity": "sha512-iJtHSGmNgAUx0b/MCS6ASGxb//hGrHHRgzvN+K5bvkBTN7A9RTpPSf1WSp+nPGvWCJ1jRnvY7MKnuqfoi3OEqg==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "streamroller": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "dev": true, + "requires": { + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" + } + }, + "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": { + "safe-buffer": "~5.2.0" + }, + "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 + } + } + }, + "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.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.padstart": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", + "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "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" + } + }, + "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, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "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 + }, + "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.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": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", + "dev": true, + "requires": {} + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dev": true, + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "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, + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", + "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "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 + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "stylus-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.1.0.tgz", + "integrity": "sha512-qKO34QCsOtSJrXxQQmXsPeaVHh6hMumBAFIoJTcsSr2VzrA6o/CW9HCGR8spCjzJhN8oKQHdj/Ytx0wwXyElkw==", + "dev": true, + "requires": { + "fast-glob": "^3.2.5", + "klona": "^2.0.4", + "normalize-path": "^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==", + "dev": true, + "requires": { + "has-flag": "^3.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.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.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": { + "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 + } + } + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "symbol.prototype.description": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + } + }, + "synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==", + "dev": true + }, + "tailwindcss": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", + "integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==", + "dev": true, + "requires": { + "arg": "^5.0.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss": "^8.4.6", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + }, + "resolve": { + "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.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "telejson": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz", + "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==", + "dev": true, + "requires": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + }, + "dependencies": { + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } + } + }, + "terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dev": true, + "requires": { + "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 + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dev": true, + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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 + }, + "throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "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, + "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 + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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": { + "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 + }, + "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": "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": "^7.0.0" + } + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=", + "dev": true + }, + "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 + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, + "ts-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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" + } + } + } + }, + "ts-morph": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-13.0.3.tgz", + "integrity": "sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.12.3", + "code-block-writer": "^11.0.0" + } + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.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" + } + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "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" + } + }, + "chalk": { + "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", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "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" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "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-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "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 + }, + "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 + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", + "dev": true + }, + "uglify-js": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.1.tgz", + "integrity": "sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==", + "dev": true, + "optional": true + }, + "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" + } + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "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 + }, + "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, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "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 + }, + "unicode-properties": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.3.1.tgz", + "integrity": "sha512-nIV3Tf3LcUEZttY/2g4ZJtGXhWwSkuLL+rCu0DIAMbjyVPj+8j5gNVz4T/sVbnQybIsd5SFGkPKg/756OY6jlA==", + "dev": true, + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "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 + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + } + } + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "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 + }, + "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" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true + }, + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "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 + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "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", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "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-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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" + } + } + } + }, + "url-parse": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", + "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", + "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 + }, + "use-composed-ref": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.2.1.tgz", + "integrity": "sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==", + "dev": true, + "requires": {} + }, + "use-isomorphic-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", + "dev": true, + "requires": {} + }, + "use-latest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", + "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "dev": true, + "requires": { + "use-isomorphic-layout-effect": "^1.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "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": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "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 + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "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", + "graceful-fs": "^4.1.2" + } + }, + "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==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": 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, + "optional": 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, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": 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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-extendable": "^0.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, + "optional": 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, + "optional": true, + "requires": { + "is-extglob": "^2.1.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, + "optional": 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, + "optional": 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, + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": 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, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": 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" + } + }, + "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, + "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, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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, + "optional": true, + "requires": { + "safe-buffer": "~5.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, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "webpack": { + "version": "5.69.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.0.tgz", + "integrity": "sha512-E5Fqu89Gu8fR6vejRqu26h8ld/k6/dCVbeGUcuZjc+goQHDfCPU9rER71JmdtBYGmci7Ec2aFEATQ2IVXKy2wg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@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.9.0", + "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" + }, + "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 + }, + "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": {} + }, + "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": {} + }, + "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, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.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 + }, + "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" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "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 + } + } + }, + "webpack-dev-middleware": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.0.0.tgz", + "integrity": "sha512-9zng2Z60pm6A98YoRcA0wSxw1EYn7B7y5owX/Tckyt9KGyULTkLtiavjaXlWqOMkM0YtqGgL3PvMOFgyFLq8vw==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "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": {} + }, + "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 + }, + "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-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "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.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", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "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": {} + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + }, + "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" + } + } + } + }, + "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" + } + }, + "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 + }, + "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" + } + } + } + }, + "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 + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "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-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-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-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" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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_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" + } + }, + "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": { + "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 + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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==", + "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" + } + }, + "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 + }, + "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" + } + } + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "webpack-hot-middleware": { + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" + } + }, + "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" + }, + "dependencies": { + "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 + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "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, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "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 + } + } + }, + "webpack-subresource-integrity": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha512-GBWYBoyalbo5YClwWop9qe6Zclp8CIXYGIz12OPclJhIrSplDxs1Ls1JDMH8xBPPrg1T6ISaTW9Y6zOrwEiAzw==", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", + "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "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" + } + } + } + }, + "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, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "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 + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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-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-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "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" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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 + }, + "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" + } + }, + "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" + } + } + } + }, + "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 + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "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" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "requires": { + "microevent.ts": "~0.1.1" + } + }, + "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, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + }, + "xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "dev": true, + "requires": { + "sax": "^1.2.1" + } + }, + "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": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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 + }, + "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": "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.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "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 + }, + "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 + }, + "zone.js": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", + "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", + "peer": true, + "requires": { + "tslib": "^2.0.0" + } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true + } + } +} diff --git a/components/package.json b/components/package.json new file mode 100644 index 00000000..99c7c49c --- /dev/null +++ b/components/package.json @@ -0,0 +1,55 @@ +{ + "name": "components", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "docs:json": "compodoc -p ./tsconfig.json -e json -d .", + "storybook": "npm run docs:json && start-storybook -p 6006", + "build-storybook": "npm run docs:json && build-storybook" + }, + "private": true, + "dependencies": { + "@angular/animations": "^12.2.13", + "@angular/cdk": "^12.2.13", + "@angular/common": "^12.2.13", + "@angular/compiler": "^12.2.13", + "@angular/core": "^12.2.13", + "@angular/forms": "^12.2.13", + "@angular/platform-browser": "^12.2.13", + "@angular/platform-browser-dynamic": "^12.2.13", + "@bitwarden/jslib-angular": "file:../angular", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^12.2.13", + "@angular/cli": "^12.2.13", + "@angular/compiler-cli": "^12.2.13", + "@angular/elements": "^12.2.13", + "@babel/core": "^7.16.10", + "@compodoc/compodoc": "^1.1.16", + "@storybook/addon-actions": "^6.4.18", + "@storybook/addon-essentials": "^6.4.18", + "@storybook/addon-links": "^6.4.18", + "@storybook/angular": "^6.4.18", + "@storybook/builder-webpack5": "^6.4.18", + "@storybook/manager-webpack5": "^6.4.18", + "@types/jasmine": "~3.10.0", + "@types/node": "^12.11.1", + "@webcomponents/custom-elements": "^1.5.0", + "autoprefixer": "^10.4.2", + "babel-loader": "^8.2.3", + "jasmine-core": "~3.10.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.1.0", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "postcss": "^8.4.6", + "tailwindcss": "^3.0.18", + "typescript": "~4.3.5" + } +} diff --git a/components/src/app/app.component.ts b/components/src/app/app.component.ts new file mode 100644 index 00000000..d4c9ddd2 --- /dev/null +++ b/components/src/app/app.component.ts @@ -0,0 +1,9 @@ +import { Component } from "@angular/core"; + +@Component({ + selector: "app-root", + template: "", +}) +export class AppComponent { + title = "components"; +} diff --git a/components/src/app/app.module.ts b/components/src/app/app.module.ts new file mode 100644 index 00000000..9da535ff --- /dev/null +++ b/components/src/app/app.module.ts @@ -0,0 +1,13 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; +import { BrowserModule } from "@angular/platform-browser"; + +import { AppComponent } from "./app.component"; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, CommonModule], + providers: [{ provide: "WINDOW", useValue: window }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/components/src/badge/badge.component.ts b/components/src/badge/badge.component.ts new file mode 100644 index 00000000..4f62affb --- /dev/null +++ b/components/src/badge/badge.component.ts @@ -0,0 +1,39 @@ +import { Component, Input } from "@angular/core"; + +type BadgeTypes = "primary" | "secondary" | "success" | "danger" | "warning" | "info"; + +const styles: Record = { + primary: ["tw-bg-primary-500", "hover:tw-bg-primary-700"], + secondary: ["tw-bg-secondary-500", "hover:tw-bg-secondary-700"], + success: ["tw-bg-success-500", "hover:tw-bg-success-700"], + danger: ["tw-bg-danger-500", "hover:tw-bg-danger-700"], + warning: ["tw-bg-warning-500", "hover:tw-bg-warning-700"], + info: ["tw-bg-info-500", "hover:tw-bg-info-700"], +}; + +@Component({ + selector: "bit-badge", + template: ``, +}) +export class BadgeComponent { + @Input() + type: BadgeTypes = "primary"; + + get classes() { + return [ + "tw-inline-block", + "tw-py-0.5", + "tw-px-1", + "tw-font-bold", + "tw-leading-none", + "tw-text-center", + "tw-text-contrast", + "tw-align-baseline", + "tw-rounded", + "tw-border-collapse", + "tw-box-border", + "tw-whitespace-no-wrap", + "tw-text-xs", + ].concat(styles[this.type]); + } +} diff --git a/components/src/badge/badge.module.ts b/components/src/badge/badge.module.ts new file mode 100644 index 00000000..b40b2d7b --- /dev/null +++ b/components/src/badge/badge.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; + +import { BadgeComponent } from "./badge.component"; + +@NgModule({ + imports: [CommonModule], + exports: [BadgeComponent], + declarations: [BadgeComponent], +}) +export class BadgeModule {} diff --git a/components/src/badge/badge.stories.ts b/components/src/badge/badge.stories.ts new file mode 100644 index 00000000..f464e230 --- /dev/null +++ b/components/src/badge/badge.stories.ts @@ -0,0 +1,46 @@ +import { Meta, Story } from "@storybook/angular"; + +import { BadgeComponent } from "./badge.component"; + +export default { + title: "Jslib/Badge", + component: BadgeComponent, + args: { + type: "primary", + }, +} as Meta; + +const Template: Story = (args: BadgeComponent) => ({ + props: args, + template: ` + Test Content + `, +}); + +export const Primary = Template.bind({}); +Primary.args = {}; + +export const Secondary = Template.bind({}); +Secondary.args = { + type: "secondary", +}; + +export const Success = Template.bind({}); +Success.args = { + type: "success", +}; + +export const Danger = Template.bind({}); +Danger.args = { + type: "danger", +}; + +export const Warning = Template.bind({}); +Warning.args = { + type: "warning", +}; + +export const Info = Template.bind({}); +Info.args = { + type: "info", +}; diff --git a/components/src/badge/index.ts b/components/src/badge/index.ts new file mode 100644 index 00000000..6b025a58 --- /dev/null +++ b/components/src/badge/index.ts @@ -0,0 +1,2 @@ +export * from "./badge.component"; +export * from "./badge.module"; diff --git a/components/src/button/Button.stories.ts b/components/src/button/Button.stories.ts new file mode 100644 index 00000000..c5a2461a --- /dev/null +++ b/components/src/button/Button.stories.ts @@ -0,0 +1,49 @@ +import { Meta, Story } from "@storybook/angular"; + +import { ButtonComponent } from "./button.component"; + +// More on default export: https://storybook.js.org/docs/angular/writing-stories/introduction#default-export +export default { + title: "Jslib/Button", + component: ButtonComponent, + args: { + buttonType: "primary", + }, + // More on argTypes: https://storybook.js.org/docs/angular/api/argtypes +} as Meta; + +// More on component templates: https://storybook.js.org/docs/angular/writing-stories/introduction#using-args +const Template: Story = (args: ButtonComponent) => ({ + props: args, + template: ``, +}); + +export const Primary = Template.bind({}); +// More on args: https://storybook.js.org/docs/angular/writing-stories/args +Primary.args = { + buttonType: "primary", +}; + +export const Secondary = Template.bind({}); +Secondary.args = { + buttonType: "secondary", +}; + +export const Danger = Template.bind({}); +Danger.args = { + buttonType: "danger", +}; + +const DisabledTemplate: Story = (args) => ({ + props: args, + template: ` + + + + `, +}); + +export const Disabled = DisabledTemplate.bind({}); +Disabled.args = { + size: "small", +}; diff --git a/components/src/button/button.component.spec.ts b/components/src/button/button.component.spec.ts new file mode 100644 index 00000000..f174f28c --- /dev/null +++ b/components/src/button/button.component.spec.ts @@ -0,0 +1,57 @@ +import { Component } from "@angular/core"; +import { TestBed, waitForAsync } from "@angular/core/testing"; +import { By } from "@angular/platform-browser"; + +import { ButtonModule } from "./index"; + +describe("Button", () => { + beforeEach( + waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ButtonModule], + declarations: [TestApp], + }); + + TestBed.compileComponents(); + }) + ); + + it("should apply classes based on type", () => { + const fixture = TestBed.createComponent(TestApp); + + const testAppComponent: TestApp = fixture.debugElement.componentInstance; + const buttonDebugElement = fixture.debugElement.query(By.css("button")); + const linkDebugElement = fixture.debugElement.query(By.css("a")); + + testAppComponent.buttonType = "primary"; + fixture.detectChanges(); + expect(buttonDebugElement.nativeElement.classList.contains("tw-bg-primary-500")).toBe(true); + expect(linkDebugElement.nativeElement.classList.contains("tw-bg-primary-500")).toBe(true); + + testAppComponent.buttonType = "secondary"; + fixture.detectChanges(); + expect(buttonDebugElement.nativeElement.classList.contains("tw-border-text-muted")).toBe(true); + expect(linkDebugElement.nativeElement.classList.contains("tw-border-text-muted")).toBe(true); + + testAppComponent.buttonType = "danger"; + fixture.detectChanges(); + expect(buttonDebugElement.nativeElement.classList.contains("tw-border-danger-500")).toBe(true); + expect(linkDebugElement.nativeElement.classList.contains("tw-border-danger-500")).toBe(true); + + testAppComponent.buttonType = null; + fixture.detectChanges(); + expect(buttonDebugElement.nativeElement.classList.contains("tw-border-text-muted")).toBe(true); + expect(linkDebugElement.nativeElement.classList.contains("tw-border-text-muted")).toBe(true); + }); +}); + +@Component({ + selector: "test-app", + template: ` + +
Link + `, +}) +class TestApp { + buttonType: string; +} diff --git a/components/src/button/button.component.ts b/components/src/button/button.component.ts new file mode 100644 index 00000000..a56ae245 --- /dev/null +++ b/components/src/button/button.component.ts @@ -0,0 +1,77 @@ +import { Input, HostBinding, OnChanges, Directive } from "@angular/core"; + +export type ButtonTypes = "primary" | "secondary" | "danger"; + +const buttonStyles: Record = { + primary: [ + "tw-border-primary-500", + "tw-bg-primary-500", + "!tw-text-contrast", + "hover:tw-bg-primary-700", + "hover:tw-border-primary-700", + "focus:tw-bg-primary-700", + "focus:tw-border-primary-700", + ].join(" "), + secondary: [ + "tw-bg-transparent", + "tw-border-text-muted", + "!tw-text-muted", + "hover:tw-bg-secondary-500", + "hover:tw-border-secondary-500", + "hover:tw-text-contrast", + "focus:tw-bg-secondary-500", + "focus:tw-border-secondary-500", + "focus:tw-text-contrast", + ].join(" "), + danger: [ + "tw-bg-transparent", + "tw-border-danger-500", + "!tw-text-danger", + "hover:tw-bg-danger-500", + "hover:tw-border-danger-500", + "hover:tw-text-contrast", + "focus:tw-bg-danger-500", + "focus:tw-border-danger-500", + "focus:tw-text-contrast", + ].join(" "), +}; + +@Directive({ + selector: "button[bit-button], a[bit-button]", +}) +export class ButtonComponent implements OnChanges { + @HostBinding("class") @Input("class") classList = ""; + + @Input() + buttonType: ButtonTypes = "secondary"; + + @Input() + block = false; + + ngOnChanges() { + this.classList = this.classes.join(" "); + } + + get classes(): string[] { + return [ + "tw-font-semibold", + "tw-py-1.5", + "tw-px-3", + "tw-rounded", + "tw-transition", + "tw-border", + "tw-border-solid", + "tw-text-center", + "hover:tw-no-underline", + "disabled:tw-bg-secondary-100", + "disabled:tw-border-secondary-100", + "disabled:!tw-text-main", + "focus:tw-outline-none", + "focus:tw-ring", + "focus:tw-ring-offset-2", + "focus:tw-ring-primary-700", + this.block ? "tw-w-full tw-block" : "", + buttonStyles[this.buttonType ?? "secondary"], + ]; + } +} diff --git a/components/src/button/button.module.ts b/components/src/button/button.module.ts new file mode 100644 index 00000000..448e7c9d --- /dev/null +++ b/components/src/button/button.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; + +import { ButtonComponent } from "./button.component"; + +@NgModule({ + imports: [CommonModule], + exports: [ButtonComponent], + declarations: [ButtonComponent], +}) +export class ButtonModule {} diff --git a/components/src/button/index.ts b/components/src/button/index.ts new file mode 100644 index 00000000..ff86120c --- /dev/null +++ b/components/src/button/index.ts @@ -0,0 +1,2 @@ +export * from "./button.component"; +export * from "./button.module"; diff --git a/components/src/callout/callout.component.html b/components/src/callout/callout.component.html new file mode 100644 index 00000000..006cedf6 --- /dev/null +++ b/components/src/callout/callout.component.html @@ -0,0 +1,14 @@ +
+

+ + {{ title }} +

+ +
diff --git a/components/src/callout/callout.component.spec.ts b/components/src/callout/callout.component.spec.ts new file mode 100644 index 00000000..ec84a2e4 --- /dev/null +++ b/components/src/callout/callout.component.spec.ts @@ -0,0 +1,59 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { I18nMockService } from "src/utils/i18n-mock.service"; + +import { I18nService } from "jslib-common/abstractions/i18n.service"; + +import { CalloutComponent } from "."; + +describe("Callout", () => { + let component: CalloutComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [CalloutComponent], + providers: [ + { + provide: I18nService, + useFactory: () => + new I18nMockService({ + warning: "Warning", + error: "Error", + }), + }, + ], + }); + fixture = TestBed.createComponent(CalloutComponent); + component = fixture.componentInstance; + }); + + describe("default state", () => { + it("success", () => { + component.type = "success"; + fixture.detectChanges(); + expect(component.title).toBeUndefined(); + expect(component.icon).toBe("bwi-check"); + }); + + it("info", () => { + component.type = "info"; + fixture.detectChanges(); + expect(component.title).toBeUndefined(); + expect(component.icon).toBe("bwi-info-circle"); + }); + + it("warning", () => { + component.type = "warning"; + fixture.detectChanges(); + expect(component.title).toBe("Warning"); + expect(component.icon).toBe("bwi-exclamation-triangle"); + }); + + it("danger", () => { + component.type = "danger"; + fixture.detectChanges(); + expect(component.title).toBe("Error"); + expect(component.icon).toBe("bwi-error"); + }); + }); +}); diff --git a/components/src/callout/callout.component.ts b/components/src/callout/callout.component.ts new file mode 100644 index 00000000..0e152073 --- /dev/null +++ b/components/src/callout/callout.component.ts @@ -0,0 +1,63 @@ +import { Component, Input, OnInit } from "@angular/core"; + +import { I18nService } from "jslib-common/abstractions/i18n.service"; + +type CalloutTypes = "success" | "info" | "warning" | "danger"; + +const defaultIcon: Record = { + success: "bwi-check", + info: "bwi-info-circle", + warning: "bwi-exclamation-triangle", + danger: "bwi-error", +}; + +const defaultI18n: Partial> = { + warning: "warning", + danger: "error", +}; + +@Component({ + selector: "bit-callout", + templateUrl: "callout.component.html", +}) +export class CalloutComponent implements OnInit { + @Input() type: CalloutTypes = "info"; + @Input() icon: string; + @Input() title: string; + @Input() useAlertRole = false; + + constructor(private i18nService: I18nService) {} + + ngOnInit() { + this.icon ??= defaultIcon[this.type]; + if (this.title == null && defaultI18n[this.type] != null) { + this.title = this.i18nService.t(defaultI18n[this.type]); + } + } + + get calloutClass() { + switch (this.type) { + case "danger": + return "tw-border-l-danger-500"; + case "info": + return "tw-border-l-info-500"; + case "success": + return "tw-border-l-success-500"; + case "warning": + return "tw-border-l-warning-500"; + } + } + + get headerClass() { + switch (this.type) { + case "danger": + return "tw-text-danger"; + case "info": + return "tw-text-info"; + case "success": + return "tw-text-success"; + case "warning": + return "tw-text-warning"; + } + } +} diff --git a/components/src/callout/callout.module.ts b/components/src/callout/callout.module.ts new file mode 100644 index 00000000..fac89dfb --- /dev/null +++ b/components/src/callout/callout.module.ts @@ -0,0 +1,11 @@ +import { CommonModule } from "@angular/common"; +import { NgModule } from "@angular/core"; + +import { CalloutComponent } from "./callout.component"; + +@NgModule({ + imports: [CommonModule], + exports: [CalloutComponent], + declarations: [CalloutComponent], +}) +export class CalloutModule {} diff --git a/components/src/callout/callout.stories.ts b/components/src/callout/callout.stories.ts new file mode 100644 index 00000000..b6307144 --- /dev/null +++ b/components/src/callout/callout.stories.ts @@ -0,0 +1,59 @@ +import { Meta, moduleMetadata, Story } from "@storybook/angular"; + +import { I18nService } from "jslib-common/abstractions/i18n.service"; + +import { I18nMockService } from "../utils/i18n-mock.service"; + +import { CalloutComponent } from "./callout.component"; + +export default { + title: "Jslib/Callout", + component: CalloutComponent, + decorators: [ + moduleMetadata({ + providers: [ + { + provide: I18nService, + useFactory: () => { + return new I18nMockService({ + warning: "Warning", + error: "Error", + }); + }, + }, + ], + }), + ], + args: { + type: "warning", + }, +} as Meta; + +const Template: Story = (args: CalloutComponent) => ({ + props: args, + template: ` + Content + `, +}); + +export const Success = Template.bind({}); +Success.args = { + type: "success", + title: "Success", +}; + +export const Info = Template.bind({}); +Info.args = { + type: "info", + title: "Info", +}; + +export const Warning = Template.bind({}); +Warning.args = { + type: "warning", +}; + +export const Danger = Template.bind({}); +Danger.args = { + type: "danger", +}; diff --git a/components/src/callout/index.ts b/components/src/callout/index.ts new file mode 100644 index 00000000..b3201946 --- /dev/null +++ b/components/src/callout/index.ts @@ -0,0 +1,2 @@ +export * from "./callout.module"; +export * from "./callout.component"; diff --git a/components/src/favicon.ico b/components/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + Components + + + + + + + + diff --git a/components/src/index.ts b/components/src/index.ts new file mode 100644 index 00000000..f4ca42de --- /dev/null +++ b/components/src/index.ts @@ -0,0 +1,3 @@ +export * from "./badge"; +export * from "./button"; +export * from "./callout"; diff --git a/components/src/main.ts b/components/src/main.ts new file mode 100644 index 00000000..1dd4f8ad --- /dev/null +++ b/components/src/main.ts @@ -0,0 +1,7 @@ +import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; + +import { AppModule } from "./app/app.module"; + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err) => console.error(err)); // eslint-disable-line diff --git a/components/src/polyfills.ts b/components/src/polyfills.ts new file mode 100644 index 00000000..40a0e9f0 --- /dev/null +++ b/components/src/polyfills.ts @@ -0,0 +1,52 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import "zone.js"; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/components/src/stories/Introduction.stories.mdx b/components/src/stories/Introduction.stories.mdx new file mode 100644 index 00000000..a69b74b3 --- /dev/null +++ b/components/src/stories/Introduction.stories.mdx @@ -0,0 +1,195 @@ +import { Meta } from "@storybook/addon-docs"; + + + + + +# Welcome to Storybook + +Storybook helps you build UI components in isolation from your app's business logic, data, and context. +That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA. + +Browse example stories now by navigating to them in the sidebar. +View their code in the `src/stories` directory to learn how they work. +We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages. + +
Configure
+ + + +
Learn
+ + + +
+ TipEdit the Markdown in{" "} + src/stories/Introduction.stories.mdx +
diff --git a/components/src/styles.css b/components/src/styles.css new file mode 100644 index 00000000..6714e5dd --- /dev/null +++ b/components/src/styles.css @@ -0,0 +1,11 @@ +/* You can add global styles to this file, and also import other style files */ + +@import "./tw-theme.css"; + +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + font-size: 14px; +} diff --git a/components/src/styles.scss b/components/src/styles.scss new file mode 100644 index 00000000..beb241da --- /dev/null +++ b/components/src/styles.scss @@ -0,0 +1,42 @@ +@import "../../angular/src/scss/webfonts.css"; +@import "./../../../src/scss/variables"; +@import "../../angular/src/scss/bwicons/styles/style.scss"; +@import "../../angular/src/scss/icons.scss"; + +@import "~bootstrap/scss/_functions"; +@import "~bootstrap/scss/_variables"; +@import "~bootstrap/scss/_mixins"; +@import "~bootstrap/scss/_root"; +@import "~bootstrap/scss/_reboot"; +@import "~bootstrap/scss/_type"; +@import "~bootstrap/scss/_images"; +@import "~bootstrap/scss/_code"; +@import "~bootstrap/scss/_grid"; +@import "~bootstrap/scss/_tables"; +@import "~bootstrap/scss/_forms"; +@import "~bootstrap/scss/_buttons"; +@import "~bootstrap/scss/_transitions"; +@import "~bootstrap/scss/_dropdown"; +@import "~bootstrap/scss/_button-group"; +@import "~bootstrap/scss/_input-group"; +@import "~bootstrap/scss/_custom-forms"; +@import "~bootstrap/scss/_nav"; +@import "~bootstrap/scss/_navbar"; +@import "~bootstrap/scss/_card"; +@import "~bootstrap/scss/_breadcrumb"; +@import "~bootstrap/scss/_pagination"; +@import "~bootstrap/scss/_badge"; +@import "~bootstrap/scss/_jumbotron"; +@import "~bootstrap/scss/_alert"; +@import "~bootstrap/scss/_progress"; +@import "~bootstrap/scss/_media"; +@import "~bootstrap/scss/_list-group"; +@import "~bootstrap/scss/_close"; +//@import "~bootstrap/scss/_toasts"; +@import "~bootstrap/scss/_modal"; +@import "~bootstrap/scss/_tooltip"; +@import "~bootstrap/scss/_popover"; +@import "~bootstrap/scss/_carousel"; +@import "~bootstrap/scss/_spinners"; +@import "~bootstrap/scss/_utilities"; +@import "~bootstrap/scss/_print"; diff --git a/components/src/test.ts b/components/src/test.ts new file mode 100644 index 00000000..06061ec6 --- /dev/null +++ b/components/src/test.ts @@ -0,0 +1,28 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files +// eslint-disable-next-line +import "zone.js/testing"; + +import { getTestBed } from "@angular/core/testing"; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from "@angular/platform-browser-dynamic/testing"; + +declare const require: { + context( + path: string, + deep?: boolean, + filter?: RegExp + ): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); + +// Then we find all the tests. +const context = require.context("./", true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/components/src/tw-theme.css b/components/src/tw-theme.css new file mode 100644 index 00000000..bab26d05 --- /dev/null +++ b/components/src/tw-theme.css @@ -0,0 +1,64 @@ +:root { + --color-background: #ffffff; + --color-background-elevation: #fbfbfb; + + --color-primary-300: #6795e8; + --color-primary-500: #175ddc; + --color-primary-700: #1252a3; + + --color-secondary-100: #f0f0f0; + --color-secondary-300: #ced4dc; + --color-secondary-500: #89929f; + --color-secondary-700: #212529; + + --color-success-500: #017e45; + --color-success-700: #003f23; + + --color-danger-500: #c83522; + --color-danger-700: #641a11; + + --color-warning-500: #8b6609; + --color-warning-700: #463304; + + --color-info-500: #555555; + --color-info-700: #2b2b2b; + + --color-text-main: #212529; + --color-text-muted: #6d757e; + --color-text-contrast: #ffffff; + --tw-ring-offset-color: #1f242e; +} + +.theme_light { + /* should be left empty as white is the default */ +} + +.theme_dark { + --color-background: #1f242e; + --color-background-elevation: #161c26; + + --color-primary-300: #175ddc; + --color-primary-500: #6a99f0; + --color-primary-700: #b4ccf9; + + --color-secondary-100: #2f343d; + --color-secondary-300: #6e7689; + --color-secondary-500: #bac0ce; + --color-secondary-700: #ffffff; + + --color-success-500: #52e07c; + --color-success-700: #a8efbe; + + --color-danger-500: #ff8d85; + --color-danger-700: #ffbfbb; + + --color-warning-500: #ffeb66; + --color-warning-700: #fff5b3; + + --color-info-500: #a4b0c6; + --color-info-700: #d1d7e2; + + --color-text-main: #ffffff; + --color-text-muted: #bac0ce; + --color-text-contrast: #191e26; +} diff --git a/components/src/utils/i18n-mock.service.ts b/components/src/utils/i18n-mock.service.ts new file mode 100644 index 00000000..9eb200b3 --- /dev/null +++ b/components/src/utils/i18n-mock.service.ts @@ -0,0 +1,19 @@ +import { I18nService } from "jslib-common/abstractions/i18n.service"; + +export class I18nMockService implements I18nService { + locale: string; + supportedTranslationLocales: string[]; + translationLocale: string; + collator: Intl.Collator; + localeNames: Map; + + constructor(private lookupTable: Record) {} + + t(id: string, p1?: string, p2?: string, p3?: string) { + return this.lookupTable[id]; + } + + translate(id: string, p1?: string, p2?: string, p3?: string) { + return this.t(id, p1, p2, p3); + } +} diff --git a/components/tailwind.config.base.js b/components/tailwind.config.base.js new file mode 100644 index 00000000..39a02bc2 --- /dev/null +++ b/components/tailwind.config.base.js @@ -0,0 +1,59 @@ +/* eslint-disable */ +const colors = require("tailwindcss/colors"); + +module.exports = { + prefix: "tw-", + content: ["./src/**/*.{html,ts}", "./jslib/components/src/**/*.{html,ts}"], + safelist: [], + corePlugins: { preflight: false }, + theme: { + colors: { + transparent: colors.transparent, + current: colors.current, + primary: { + 300: "var(--color-primary-300)", + 500: "var(--color-primary-500)", + 700: "var(--color-primary-700)", + }, + secondary: { + 100: "var(--color-secondary-100)", + 300: "var(--color-secondary-300)", + 500: "var(--color-secondary-500)", + 700: "var(--color-secondary-700)", + }, + success: { + 500: "var(--color-success-500)", + 700: "var(--color-success-700)", + }, + danger: { + 500: "var(--color-danger-500)", + 700: "var(--color-danger-700)", + }, + warning: { + 500: "var(--color-warning-500)", + 700: "var(--color-warning-700)", + }, + info: { + 500: "var(--color-info-500)", + 700: "var(--color-info-700)", + }, + "text-muted": "var(--color-text-muted)", + background: "var(--color-background)", + "background-elevation": "var(--color-background-elevation)", + }, + textColor: { + main: "var(--color-text-main)", + muted: "var(--color-text-muted)", + contrast: "var(--color-text-contrast)", + success: "var(--color-success-500)", + danger: "var(--color-danger-500)", + warning: "var(--color-warning-500)", + info: "var(--color-info-500)", + }, + ringOffsetColor: ({ theme }) => ({ + DEFAULT: theme("colors.background"), + ...theme("colors"), + }), + }, + plugins: [], +}; diff --git a/components/tailwind.config.js b/components/tailwind.config.js new file mode 100644 index 00000000..c458a0ab --- /dev/null +++ b/components/tailwind.config.js @@ -0,0 +1,6 @@ +/* eslint-disable */ +const config = require("./tailwind.config.base"); + +config.content = ["./src/**/*.{html,ts}", "./.storybook/preview.js"]; + +module.exports = config; diff --git a/components/tsconfig.app.json b/components/tsconfig.app.json new file mode 100644 index 00000000..2722dbe8 --- /dev/null +++ b/components/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["**/*.stories.*"] +} diff --git a/components/tsconfig.json b/components/tsconfig.json new file mode 100644 index 00000000..96869dd4 --- /dev/null +++ b/components/tsconfig.json @@ -0,0 +1,32 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": false, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2017", + "module": "es2020", + "lib": ["es2020", "dom"], + "paths": { + "jslib-common/*": ["../common/src/*"] + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/components/tsconfig.spec.json b/components/tsconfig.spec.json new file mode 100644 index 00000000..669344f8 --- /dev/null +++ b/components/tsconfig.spec.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine"] + }, + "files": ["src/test.ts", "src/polyfills.ts"], + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +} From 744649573a387575aabf9bc5eefc8eb559958f3d Mon Sep 17 00:00:00 2001 From: Daniel James Smith Date: Tue, 8 Mar 2022 13:42:35 +0100 Subject: [PATCH 118/120] Fixes for format change of 1pux files (#714) * Remove unneeded ItemCollection type * Mark item.trashed as optional property * Adjust format of test files to be identical to current exports --- .../onepassword1PuxImporter.ts | 4 +- .../types/onepassword1PuxImporterTypes.ts | 7 +- .../onePassword1Pux/APICredentials.ts | 262 +- .../testData/onePassword1Pux/BankAccount.ts | 366 +- .../testData/onePassword1Pux/CreditCard.ts | 590 +- .../testData/onePassword1Pux/Database.ts | 322 +- .../onePassword1Pux/DriversLicense.ts | 382 +- .../testData/onePassword1Pux/EmailAccount.ts | 586 +- .../testData/onePassword1Pux/IdentityData.ts | 838 +- .../testData/onePassword1Pux/LoginData.ts | 204 +- .../testData/onePassword1Pux/MedicalRecord.ts | 318 +- .../testData/onePassword1Pux/Membership.ts | 294 +- .../onePassword1Pux/Onepux_example.ts | 122 +- .../onePassword1Pux/OutdoorLicense.ts | 262 +- .../testData/onePassword1Pux/Passport.ts | 384 +- .../testData/onePassword1Pux/Password.ts | 54 +- .../onePassword1Pux/RewardsProgram.ts | 338 +- .../importers/testData/onePassword1Pux/SSN.ts | 112 +- .../onePassword1Pux/SanitizedExport.ts | 8488 ++++++++--------- .../testData/onePassword1Pux/SecureNote.ts | 42 +- .../testData/onePassword1Pux/Server.ts | 376 +- .../onePassword1Pux/SoftwareLicense.ts | 478 +- .../onePassword1Pux/WirelessRouter.ts | 286 +- 23 files changed, 7507 insertions(+), 7608 deletions(-) diff --git a/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts b/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts index ad30100f..23ca3e09 100644 --- a/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts +++ b/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts @@ -18,7 +18,6 @@ import { ExportData, FieldsEntity, Item, - ItemCollection, LoginFieldTypeEnum, Overview, PasswordHistoryEntity, @@ -38,8 +37,7 @@ export class OnePassword1PuxImporter extends BaseImporter implements Importer { // TODO Add handling of multiple vaults // const personalVaults = account.vaults[0].filter((v) => v.attrs.type === VaultAttributeTypeEnum.Personal); account.vaults.forEach((vault: VaultsEntity) => { - vault.items.forEach((itemCollection: ItemCollection) => { - const item: Item = itemCollection.item; + vault.items.forEach((item: Item) => { if (item.trashed === true) { return; } diff --git a/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts b/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts index eaefcd86..278fcb75 100644 --- a/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts +++ b/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts @@ -15,7 +15,7 @@ export interface AccountAttributes { } export interface VaultsEntity { attrs: VaultAttributes; - items?: ItemCollection[] | null; + items?: Item[] | null; } export interface VaultAttributes { uuid: string; @@ -24,9 +24,6 @@ export interface VaultAttributes { name: string; type: string; } -export interface ItemCollection { - item: Item; -} export enum CategoryEnum { Login = "001", @@ -56,7 +53,7 @@ export interface Item { favIndex: number; createdAt: number; updatedAt: number; - trashed: boolean; + trashed?: boolean; categoryUuid: string; details: Details; overview: Overview; diff --git a/spec/common/importers/testData/onePassword1Pux/APICredentials.ts b/spec/common/importers/testData/onePassword1Pux/APICredentials.ts index 39ca32b5..41b75331 100644 --- a/spec/common/importers/testData/onePassword1Pux/APICredentials.ts +++ b/spec/common/importers/testData/onePassword1Pux/APICredentials.ts @@ -22,145 +22,143 @@ export const APICredentialsData: ExportData = { }, items: [ { - item: { - uuid: "6nqnjdqyk5mwvqbdgbdr47oabe", - favIndex: 0, - createdAt: 1619465969, - updatedAt: 1619466052, - trashed: false, - categoryUuid: "112", - details: { - loginFields: [], - notesPlain: "My API Credential", - sections: [ - { - title: "", - fields: [ - { - title: "username", - id: "username", - value: { - string: "apiuser@nullvalue.test", - }, - indexAtSource: 0, - guarded: true, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "none", - }, + uuid: "6nqnjdqyk5mwvqbdgbdr47oabe", + favIndex: 0, + createdAt: 1619465969, + updatedAt: 1619466052, + trashed: false, + categoryUuid: "112", + details: { + loginFields: [], + notesPlain: "My API Credential", + sections: [ + { + title: "", + fields: [ + { + title: "username", + id: "username", + value: { + string: "apiuser@nullvalue.test", }, - { - title: "credential", - id: "credential", - value: { - concealed: "apiapiapiapiapiapiappy", - }, - indexAtSource: 1, - guarded: true, - multiline: false, - dontGenerate: true, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "default", - }, + indexAtSource: 0, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", }, - { - title: "type", - id: "type", - value: { - menu: "jwt", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "credential", + id: "credential", + value: { + concealed: "apiapiapiapiapiapiappy", }, - { - title: "filename", - id: "filename", - value: { - string: "filename.jwt", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 1, + guarded: true, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "default", }, - { - title: "valid from", - id: "validFrom", - value: { - date: 1301918460, - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "type", + id: "type", + value: { + menu: "jwt", }, - { - title: "expires", - id: "expires", - value: { - date: 1932811260, - }, - indexAtSource: 5, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "hostname", - id: "hostname", - value: { - string: "not.your.everyday.hostname", - }, - indexAtSource: 6, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "uRL", - correction: "default", - capitalization: "default", - }, + }, + { + title: "filename", + id: "filename", + value: { + string: "filename.jwt", }, - ], - }, - ], - passwordHistory: [], - }, - overview: { - subtitle: "", - title: "API Credential", - url: "", - ps: 0, - pbe: 0.0, - pgrng: false, - }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "valid from", + id: "validFrom", + value: { + date: 1301918460, + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "expires", + id: "expires", + value: { + date: 1932811260, + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "hostname", + id: "hostname", + value: { + string: "not.your.everyday.hostname", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "uRL", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "", + title: "API Credential", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, }, }, ], diff --git a/spec/common/importers/testData/onePassword1Pux/BankAccount.ts b/spec/common/importers/testData/onePassword1Pux/BankAccount.ts index 0f62bd2d..1ada2714 100644 --- a/spec/common/importers/testData/onePassword1Pux/BankAccount.ts +++ b/spec/common/importers/testData/onePassword1Pux/BankAccount.ts @@ -22,200 +22,198 @@ export const BankAccountData: ExportData = { }, items: [ { - item: { - uuid: "u2l4sjbencvsowwjuj3dfpt73q", - favIndex: 0, - createdAt: 1619466056, - updatedAt: 1619466187, - trashed: false, - categoryUuid: "101", - details: { - loginFields: [], - notesPlain: "My Bank Account", - sections: [ - { - title: "", - fields: [ - { - title: "bank name", - id: "bankName", - value: { - string: "Super Credit Union", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "words", - }, + uuid: "u2l4sjbencvsowwjuj3dfpt73q", + favIndex: 0, + createdAt: 1619466056, + updatedAt: 1619466187, + trashed: false, + categoryUuid: "101", + details: { + loginFields: [], + notesPlain: "My Bank Account", + sections: [ + { + title: "", + fields: [ + { + title: "bank name", + id: "bankName", + value: { + string: "Super Credit Union", }, - { - title: "name on account", - id: "owner", - value: { - string: "Cool Guy", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "words", - }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", }, - { - title: "type", - id: "accountType", - value: { - menu: "checking", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "name on account", + id: "owner", + value: { + string: "Cool Guy", }, - { - title: "routing number", - id: "routingNo", - value: { - string: "111000999", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", }, - { - title: "account number", - id: "accountNo", - value: { - string: "192837465918273645", - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + }, + { + title: "type", + id: "accountType", + value: { + menu: "checking", }, - { - title: "SWIFT", - id: "swift", - value: { - string: "123456", - }, - indexAtSource: 5, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "IBAN", - id: "iban", - value: { - string: "DE12 123456", - }, - indexAtSource: 6, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + }, + { + title: "routing number", + id: "routingNo", + value: { + string: "111000999", }, - { - title: "PIN", - id: "telephonePin", - value: { - concealed: "5555", - }, - indexAtSource: 7, - guarded: false, - multiline: false, - dontGenerate: true, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", }, - ], - }, - { - title: "Branch Information", - name: "branchInfo", - fields: [ - { - title: "phone", - id: "branchPhone", - value: { - phone: "9399399933", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "namePhonePad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "account number", + id: "accountNo", + value: { + string: "192837465918273645", }, - { - title: "address", - id: "branchAddress", - value: { - string: "1 Fifth Avenue", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "sentences", - }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", }, - ], - }, - ], - passwordHistory: [], - }, - overview: { - subtitle: "Super Credit Union", - tags: ["Finance"], - title: "Bank Account", - url: "", - ps: 0, - pbe: 0.0, - pgrng: false, - }, + }, + { + title: "SWIFT", + id: "swift", + value: { + string: "123456", + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "IBAN", + id: "iban", + value: { + string: "DE12 123456", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "PIN", + id: "telephonePin", + value: { + concealed: "5555", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + { + title: "Branch Information", + name: "branchInfo", + fields: [ + { + title: "phone", + id: "branchPhone", + value: { + phone: "9399399933", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "address", + id: "branchAddress", + value: { + string: "1 Fifth Avenue", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "sentences", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "Super Credit Union", + tags: ["Finance"], + title: "Bank Account", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, }, }, ], diff --git a/spec/common/importers/testData/onePassword1Pux/CreditCard.ts b/spec/common/importers/testData/onePassword1Pux/CreditCard.ts index 2c769446..ccdd4aa9 100644 --- a/spec/common/importers/testData/onePassword1Pux/CreditCard.ts +++ b/spec/common/importers/testData/onePassword1Pux/CreditCard.ts @@ -22,319 +22,317 @@ export const CreditCardData: ExportData = { }, items: [ { - item: { - uuid: "vpxi2esuujz7nrbojp34rd5aja", - favIndex: 0, - createdAt: 1619465282, - updatedAt: 1619465447, - trashed: false, - categoryUuid: "002", - details: { - loginFields: [], - notesPlain: "My parents' credit card. ", - sections: [ - { - title: "", - fields: [ - { - title: "cardholder name", - id: "cardholder", - value: { - string: "Fred Engels", - }, - indexAtSource: 0, - guarded: true, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "words", - }, + uuid: "vpxi2esuujz7nrbojp34rd5aja", + favIndex: 0, + createdAt: 1619465282, + updatedAt: 1619465447, + trashed: false, + categoryUuid: "002", + details: { + loginFields: [], + notesPlain: "My parents' credit card. ", + sections: [ + { + title: "", + fields: [ + { + title: "cardholder name", + id: "cardholder", + value: { + string: "Fred Engels", }, - { - title: "type", - id: "type", - value: { - creditCardType: "discover", - }, - indexAtSource: 1, - guarded: true, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 0, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", }, - { - title: "number", - id: "ccnum", - value: { - creditCardNumber: "6011111111111117", - }, - indexAtSource: 2, - guarded: true, - clipboardFilter: "0123456789", - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "type", + id: "type", + value: { + creditCardType: "discover", }, - { - title: "verification number", - id: "cvv", - value: { - concealed: "1312", - }, - indexAtSource: 3, - guarded: true, - multiline: false, - dontGenerate: true, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + indexAtSource: 1, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "expiry date", - id: "expiry", - value: { - monthYear: 209912, - }, - indexAtSource: 4, - guarded: true, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "number", + id: "ccnum", + value: { + creditCardNumber: "6011111111111117", }, - { - title: "valid from", - id: "validFrom", - value: { - monthYear: 200101, - }, - indexAtSource: 5, - guarded: true, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 2, + guarded: true, + clipboardFilter: "0123456789", + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", }, - { - title: "", - id: "txbzvwzpck7ejhfres3733rbpm", - value: { - string: "card", - }, - indexAtSource: 6, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "verification number", + id: "cvv", + value: { + concealed: "1312", }, - ], - }, - { - title: "Contact Information", - name: "contactInfo", - fields: [ - { - title: "issuing bank", - id: "bank", - value: { - string: "Some bank", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "words", - }, + indexAtSource: 3, + guarded: true, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", }, - { - title: "phone (local)", - id: "phoneLocal", - value: { - phone: "123456", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "namePhonePad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "expiry date", + id: "expiry", + value: { + monthYear: 209912, }, - { - title: "phone (toll free)", - id: "phoneTollFree", - value: { - phone: "0800123456", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "namePhonePad", - correction: "default", - capitalization: "default", - }, + indexAtSource: 4, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "phone (intl)", - id: "phoneIntl", - value: { - phone: "+49123456", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "namePhonePad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "valid from", + id: "validFrom", + value: { + monthYear: 200101, }, - { - title: "website", - id: "website", - value: { - url: "somebank.com", - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 5, + guarded: true, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - ], - }, - { - title: "Additional Details", - name: "details", - fields: [ - { - title: "PIN", - id: "pin", - value: { - concealed: "1234", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: true, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "", + id: "txbzvwzpck7ejhfres3733rbpm", + value: { + string: "card", }, - { - title: "credit limit", - id: "creditLimit", - value: { - string: "$1312", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "cash withdrawal limit", - id: "cashLimit", - value: { - string: "$500", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + }, + ], + }, + { + title: "Contact Information", + name: "contactInfo", + fields: [ + { + title: "issuing bank", + id: "bank", + value: { + string: "Some bank", }, - { - title: "interest rate", - id: "interest", - value: { - string: "1%", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numbersAndPunctuation", - correction: "default", - capitalization: "default", - }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", }, - { - title: "issue number", - id: "issuenumber", - value: { - string: "123456", - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "default", - }, + }, + { + title: "phone (local)", + id: "phoneLocal", + value: { + phone: "123456", }, - ], - }, - ], - passwordHistory: [], - }, - overview: { - subtitle: "1234 **** 6789", - tags: ["Finance"], - title: "Parent's Credit Card", - url: "", - ps: 0, - pbe: 0.0, - pgrng: false, - }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "phone (toll free)", + id: "phoneTollFree", + value: { + phone: "0800123456", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "phone (intl)", + id: "phoneIntl", + value: { + phone: "+49123456", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "namePhonePad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "website", + id: "website", + value: { + url: "somebank.com", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + { + title: "Additional Details", + name: "details", + fields: [ + { + title: "PIN", + id: "pin", + value: { + concealed: "1234", + }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: true, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", + }, + }, + { + title: "credit limit", + id: "creditLimit", + value: { + string: "$1312", + }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "cash withdrawal limit", + id: "cashLimit", + value: { + string: "$500", + }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "interest rate", + id: "interest", + value: { + string: "1%", + }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numbersAndPunctuation", + correction: "default", + capitalization: "default", + }, + }, + { + title: "issue number", + id: "issuenumber", + value: { + string: "123456", + }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "1234 **** 6789", + tags: ["Finance"], + title: "Parent's Credit Card", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, }, }, ], diff --git a/spec/common/importers/testData/onePassword1Pux/Database.ts b/spec/common/importers/testData/onePassword1Pux/Database.ts index 3aaad2da..594f5384 100644 --- a/spec/common/importers/testData/onePassword1Pux/Database.ts +++ b/spec/common/importers/testData/onePassword1Pux/Database.ts @@ -22,177 +22,175 @@ export const DatabaseData: ExportData = { }, items: [ { - item: { - uuid: "ospvepl3ex2y6hjwwqwyvtf2sy", - favIndex: 0, - createdAt: 1619466193, - updatedAt: 1619466276, - trashed: false, - categoryUuid: "102", - details: { - loginFields: [], - notesPlain: "My Database", - sections: [ - { - title: "", - fields: [ - { - title: "type", - id: "database_type", - value: { - menu: "postgresql", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + uuid: "ospvepl3ex2y6hjwwqwyvtf2sy", + favIndex: 0, + createdAt: 1619466193, + updatedAt: 1619466276, + trashed: false, + categoryUuid: "102", + details: { + loginFields: [], + notesPlain: "My Database", + sections: [ + { + title: "", + fields: [ + { + title: "type", + id: "database_type", + value: { + menu: "postgresql", }, - { - title: "server", - id: "hostname", - value: { - string: "my.secret.db.server", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "uRL", - correction: "default", - capitalization: "default", - }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "port", - id: "port", - value: { - string: "1337", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + }, + { + title: "server", + id: "hostname", + value: { + string: "my.secret.db.server", }, - { - title: "database", - id: "database", - value: { - string: "user_database", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "none", - }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "uRL", + correction: "default", + capitalization: "default", }, - { - title: "username", - id: "username", - value: { - string: "cooldbuser", - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "none", - }, + }, + { + title: "port", + id: "port", + value: { + string: "1337", }, - { - title: "password", - id: "password", - value: { - concealed: "^+kTjhLaN7wVPAhGU)*J", - }, - indexAtSource: 5, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "numberPad", + correction: "default", + capitalization: "default", }, - { - title: "SID", - id: "sid", - value: { - string: "ASDIUFU-283234", - }, - indexAtSource: 6, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "database", + id: "database", + value: { + string: "user_database", }, - { - title: "alias", - id: "alias", - value: { - string: "cdbu", - }, - indexAtSource: 7, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", }, - { - title: "connection options", - id: "options", - value: { - string: "ssh", - }, - indexAtSource: 8, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "username", + id: "username", + value: { + string: "cooldbuser", }, - ], - }, - ], - passwordHistory: [], - }, - overview: { - subtitle: "my.secret.db.server", - title: "Database", - url: "", - ps: 0, - pbe: 0.0, - pgrng: false, - }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", + }, + }, + { + title: "password", + id: "password", + value: { + concealed: "^+kTjhLaN7wVPAhGU)*J", + }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "SID", + id: "sid", + value: { + string: "ASDIUFU-283234", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "alias", + id: "alias", + value: { + string: "cdbu", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "connection options", + id: "options", + value: { + string: "ssh", + }, + indexAtSource: 8, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "my.secret.db.server", + title: "Database", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, }, }, ], diff --git a/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts b/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts index 4a55b20c..468069ae 100644 --- a/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts +++ b/spec/common/importers/testData/onePassword1Pux/DriversLicense.ts @@ -22,209 +22,207 @@ export const DriversLicenseData: ExportData = { }, items: [ { - item: { - uuid: "nntuge2g7s2wrlokyfhea354ay", - favIndex: 0, - createdAt: 1619466279, - updatedAt: 1619466425, - trashed: false, - categoryUuid: "103", - details: { - loginFields: [], - notesPlain: "My Driver's License", - sections: [ - { - title: "", - fields: [ - { - title: "full name", - id: "fullname", - value: { - string: "Michael Scarn", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "words", - }, + uuid: "nntuge2g7s2wrlokyfhea354ay", + favIndex: 0, + createdAt: 1619466279, + updatedAt: 1619466425, + trashed: false, + categoryUuid: "103", + details: { + loginFields: [], + notesPlain: "My Driver's License", + sections: [ + { + title: "", + fields: [ + { + title: "full name", + id: "fullname", + value: { + string: "Michael Scarn", }, - { - title: "address", - id: "address", - value: { - string: "2120 Mifflin Rd.", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "sentences", - }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "words", }, - { - title: "date of birth", - id: "birthdate", - value: { - date: 252504060, - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "address", + id: "address", + value: { + string: "2120 Mifflin Rd.", }, - { - title: "sex", - id: "sex", - value: { - gender: "male", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "sentences", }, - { - title: "height", - id: "height", - value: { - string: "5'11\"", - }, - indexAtSource: 4, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "date of birth", + id: "birthdate", + value: { + date: 252504060, }, - { - title: "number", - id: "number", - value: { - string: "12345678901", - }, - indexAtSource: 5, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 2, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "license class", - id: "class", - value: { - string: "C", - }, - indexAtSource: 6, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "sex", + id: "sex", + value: { + gender: "male", }, - { - title: "conditions / restrictions", - id: "conditions", - value: { - string: "B", - }, - indexAtSource: 7, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 3, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "state", - id: "state", - value: { - string: "Pennsylvania", - }, - indexAtSource: 8, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "height", + id: "height", + value: { + string: "5'11\"", }, - { - title: "country", - id: "country", - value: { - string: "United States", - }, - indexAtSource: 9, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + indexAtSource: 4, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "expiry date", - id: "expiry_date", - value: { - monthYear: 203012, - }, - indexAtSource: 10, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + }, + { + title: "number", + id: "number", + value: { + string: "12345678901", }, - ], - }, - ], - passwordHistory: [], - }, - overview: { - subtitle: "12345678901", - title: "Michael Scarn", - url: "", - ps: 0, - pbe: 0.0, - pgrng: false, - }, + indexAtSource: 5, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "license class", + id: "class", + value: { + string: "C", + }, + indexAtSource: 6, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "conditions / restrictions", + id: "conditions", + value: { + string: "B", + }, + indexAtSource: 7, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "state", + id: "state", + value: { + string: "Pennsylvania", + }, + indexAtSource: 8, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "country", + id: "country", + value: { + string: "United States", + }, + indexAtSource: 9, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + { + title: "expiry date", + id: "expiry_date", + value: { + monthYear: 203012, + }, + indexAtSource: 10, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", + }, + }, + ], + }, + ], + passwordHistory: [], + }, + overview: { + subtitle: "12345678901", + title: "Michael Scarn", + url: "", + ps: 0, + pbe: 0.0, + pgrng: false, }, }, ], diff --git a/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts b/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts index 2db083fd..1f83a6d8 100644 --- a/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts +++ b/spec/common/importers/testData/onePassword1Pux/EmailAccount.ts @@ -22,317 +22,315 @@ export const EmailAccountData: ExportData = { }, items: [ { - item: { - uuid: "p3hohdgwpt4u2ra2fc3tvzomsm", - favIndex: 0, - createdAt: 1619466428, - updatedAt: 1619466585, - trashed: false, - categoryUuid: "111", - details: { - loginFields: [], - notesPlain: "My Email Config", - sections: [ - { - title: "", - fields: [ - { - title: "type", - id: "pop_type", - value: { - menu: "either", - }, - indexAtSource: 0, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "default", - capitalization: "default", - }, + uuid: "p3hohdgwpt4u2ra2fc3tvzomsm", + favIndex: 0, + createdAt: 1619466428, + updatedAt: 1619466585, + trashed: false, + categoryUuid: "111", + details: { + loginFields: [], + notesPlain: "My Email Config", + sections: [ + { + title: "", + fields: [ + { + title: "type", + id: "pop_type", + value: { + menu: "either", }, - { - title: "username", - id: "pop_username", - value: { - string: "someuser@nullvalue.test", - }, - indexAtSource: 1, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "default", - correction: "no", - capitalization: "none", - }, + indexAtSource: 0, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "default", + capitalization: "default", }, - { - title: "server", - id: "pop_server", - value: { - string: "mailserver.nullvalue.test", - }, - indexAtSource: 2, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "uRL", - correction: "default", - capitalization: "default", - }, + }, + { + title: "username", + id: "pop_username", + value: { + string: "someuser@nullvalue.test", }, - { - title: "port number", - id: "pop_port", - value: { - string: "587", - }, - indexAtSource: 3, - guarded: false, - multiline: false, - dontGenerate: false, - inputTraits: { - keyboard: "numberPad", - correction: "default", - capitalization: "default", - }, + indexAtSource: 1, + guarded: false, + multiline: false, + dontGenerate: false, + inputTraits: { + keyboard: "default", + correction: "no", + capitalization: "none", }, - { - title: "password", - id: "pop_password", - value: { - concealed: "u1jsf Date: Tue, 8 Mar 2022 15:21:49 +0100 Subject: [PATCH 119/120] Add premium and unless-premium directives (#710) --- .../src/directives/not-premium.directive.ts | 27 +++++++++++++++++++ angular/src/directives/premium.directive.ts | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 angular/src/directives/not-premium.directive.ts create mode 100644 angular/src/directives/premium.directive.ts diff --git a/angular/src/directives/not-premium.directive.ts b/angular/src/directives/not-premium.directive.ts new file mode 100644 index 00000000..15a01f71 --- /dev/null +++ b/angular/src/directives/not-premium.directive.ts @@ -0,0 +1,27 @@ +import { Directive, OnInit, TemplateRef, ViewContainerRef } from "@angular/core"; + +import { StateService } from "jslib-common/abstractions/state.service"; + +/** + * Hides the element if the user has premium. + */ +@Directive({ + selector: "[appNotPremium]", +}) +export class NotPremiumDirective implements OnInit { + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + private stateService: StateService + ) {} + + async ngOnInit(): Promise { + const premium = await this.stateService.getCanAccessPremium(); + + if (premium) { + this.viewContainer.clear(); + } else { + this.viewContainer.createEmbeddedView(this.templateRef); + } + } +} diff --git a/angular/src/directives/premium.directive.ts b/angular/src/directives/premium.directive.ts new file mode 100644 index 00000000..c403f5b9 --- /dev/null +++ b/angular/src/directives/premium.directive.ts @@ -0,0 +1,27 @@ +import { Directive, OnInit, TemplateRef, ViewContainerRef } from "@angular/core"; + +import { StateService } from "jslib-common/abstractions/state.service"; + +/** + * Only shows the element if the user has premium. + */ +@Directive({ + selector: "[appPremium]", +}) +export class PremiumDirective implements OnInit { + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef, + private stateService: StateService + ) {} + + async ngOnInit(): Promise { + const premium = await this.stateService.getCanAccessPremium(); + + if (premium) { + this.viewContainer.createEmbeddedView(this.templateRef); + } else { + this.viewContainer.clear(); + } + } +} From 3f20122e5bc9364762c1b477f79f9b99e242d05b Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Fri, 11 Mar 2022 07:16:50 +1000 Subject: [PATCH 120/120] Avoid duplicate fullSync api calls (#716) --- common/src/services/sync.service.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/services/sync.service.ts b/common/src/services/sync.service.ts index cc512e50..93611238 100644 --- a/common/src/services/sync.service.ts +++ b/common/src/services/sync.service.ts @@ -13,6 +13,7 @@ import { SendService } from "../abstractions/send.service"; import { SettingsService } from "../abstractions/settings.service"; import { StateService } from "../abstractions/state.service"; import { SyncService as SyncServiceAbstraction } from "../abstractions/sync.service"; +import { sequentialize } from "../misc/sequentialize"; import { CipherData } from "../models/data/cipherData"; import { CollectionData } from "../models/data/collectionData"; import { FolderData } from "../models/data/folderData"; @@ -71,6 +72,7 @@ export class SyncService implements SyncServiceAbstraction { await this.stateService.setLastSync(date.toJSON(), { userId: userId }); } + @sequentialize(() => "fullSync") async fullSync(forceSync: boolean, allowThrowOnError = false): Promise { this.syncStarted(); const isAuthenticated = await this.stateService.getIsAuthenticated();