From 282df6a4e54a9144a0ad35b417ff848fec4666fd Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 23 Aug 2023 15:50:57 +0200 Subject: [PATCH 01/31] chore(runtime): clone runtime basis as separate package --- packages/snack-runtime/.eslintignore | 4 + packages/snack-runtime/.eslintrc.js | 4 + packages/snack-runtime/.gitignore | 2 + packages/snack-runtime/assets/favicon.png | Bin 0 -> 1466 bytes packages/snack-runtime/assets/splash.png | Bin 0 -> 13071 bytes packages/snack-runtime/babel.config.js | 7 + packages/snack-runtime/index.ts | 0 packages/snack-runtime/package.json | 54 + packages/snack-runtime/src/Analytics.tsx | 28 + packages/snack-runtime/src/App.tsx | 519 + packages/snack-runtime/src/AppLoading.tsx | 25 + .../src/BarCodeScannerView.native.tsx | 94 + .../snack-runtime/src/BarCodeScannerView.tsx | 38 + packages/snack-runtime/src/Console.tsx | 64 + packages/snack-runtime/src/Errors.tsx | 325 + packages/snack-runtime/src/Files.tsx | 167 + packages/snack-runtime/src/LoadingView.tsx | 68 + .../snack-runtime/src/LoadingView.web.tsx | 40 + packages/snack-runtime/src/Logger.tsx | 24 + packages/snack-runtime/src/Messaging.tsx | 60 + packages/snack-runtime/src/Modules.tsx | 903 ++ .../src/NativeModules/Amplitude.native.tsx | 11 + .../src/NativeModules/Amplitude.tsx | 9 + .../NativeModules/AssetRegistry.native.tsx | 3 + .../src/NativeModules/AssetRegistry.tsx | 19 + .../src/NativeModules/CanvasKit.tsx | 6 + .../src/NativeModules/CanvasKit.web.tsx | 61 + .../NativeModules/EXDevLauncher.native.tsx | 2 + .../src/NativeModules/EXDevLauncher.tsx | 1 + .../NativeModules/ExceptionManager.native.tsx | 3 + .../src/NativeModules/ExceptionManager.tsx | 1 + .../src/NativeModules/ExpoRouterEntry.tsx | 25 + .../src/NativeModules/FileSystem.tsx | 3 + .../src/NativeModules/FileSystem.web.tsx | 139 + .../src/NativeModules/Linking.tsx | 7 + .../src/NativeModules/Linking.web.tsx | 18 + .../src/NativeModules/LogBox.tsx | 3 + .../src/NativeModules/LogBox.web.tsx | 7 + .../src/NativeModules/ReactNativeSkia.tsx | 58 + .../src/NativeModules/ViewShot.tsx | 3 + .../src/NativeModules/ViewShot.web.tsx | 10 + .../src/NativeModules/getDeviceIdAsync.tsx | 13 + .../NativeModules/getDeviceIdAsync.web.tsx | 35 + packages/snack-runtime/src/Profiling.tsx | 39 + .../snack-runtime/src/UpdateIndicator.tsx | 94 + .../snack-runtime/src/UpdateIndicator.web.tsx | 72 + packages/snack-runtime/src/UrlUtils.ts | 22 + .../src/__tests__/UrlUtils-test.ts | 41 + packages/snack-runtime/src/aliases/common.tsx | 52 + packages/snack-runtime/src/aliases/index.tsx | 25 + .../snack-runtime/src/aliases/index.web.tsx | 14 + packages/snack-runtime/src/polyfill.tsx | 4 + packages/snack-runtime/src/polyfill.web.tsx | 1 + .../snack-runtime/src/react-native-logo.png | Bin 0 -> 22616 bytes .../RuntimeTrafficMirroringTransport.ts | 187 + .../src/transports/RuntimeTransport.ts | 43 + .../transports/RuntimeTransportImplPubNub.ts | 73 + .../RuntimeTransportImplSocketIO.ts | 81 + .../RuntimeTransportImplWebPlayer.ts | 130 + .../RuntimeTrafficMirroringTransport-test.ts | 221 + packages/snack-runtime/tsconfig.json | 7 + .../snack-runtime/types/AssetRegistry.d.ts | 19 + .../snack-runtime/types/canvaskit-wasm.d.ts | 3 + packages/snack-runtime/vendor/README.md | 20 + packages/snack-runtime/vendor/system.src.d.ts | 1 + packages/snack-runtime/vendor/system.src.js | 4187 +++++++ packages/snack-runtime/yarn.lock | 9660 +++++++++++++++++ 67 files changed, 17859 insertions(+) create mode 100644 packages/snack-runtime/.eslintignore create mode 100644 packages/snack-runtime/.eslintrc.js create mode 100644 packages/snack-runtime/.gitignore create mode 100644 packages/snack-runtime/assets/favicon.png create mode 100644 packages/snack-runtime/assets/splash.png create mode 100644 packages/snack-runtime/babel.config.js create mode 100644 packages/snack-runtime/index.ts create mode 100644 packages/snack-runtime/package.json create mode 100644 packages/snack-runtime/src/Analytics.tsx create mode 100644 packages/snack-runtime/src/App.tsx create mode 100644 packages/snack-runtime/src/AppLoading.tsx create mode 100644 packages/snack-runtime/src/BarCodeScannerView.native.tsx create mode 100644 packages/snack-runtime/src/BarCodeScannerView.tsx create mode 100644 packages/snack-runtime/src/Console.tsx create mode 100644 packages/snack-runtime/src/Errors.tsx create mode 100644 packages/snack-runtime/src/Files.tsx create mode 100644 packages/snack-runtime/src/LoadingView.tsx create mode 100644 packages/snack-runtime/src/LoadingView.web.tsx create mode 100644 packages/snack-runtime/src/Logger.tsx create mode 100644 packages/snack-runtime/src/Messaging.tsx create mode 100644 packages/snack-runtime/src/Modules.tsx create mode 100644 packages/snack-runtime/src/NativeModules/Amplitude.native.tsx create mode 100644 packages/snack-runtime/src/NativeModules/Amplitude.tsx create mode 100644 packages/snack-runtime/src/NativeModules/AssetRegistry.native.tsx create mode 100644 packages/snack-runtime/src/NativeModules/AssetRegistry.tsx create mode 100644 packages/snack-runtime/src/NativeModules/CanvasKit.tsx create mode 100644 packages/snack-runtime/src/NativeModules/CanvasKit.web.tsx create mode 100644 packages/snack-runtime/src/NativeModules/EXDevLauncher.native.tsx create mode 100644 packages/snack-runtime/src/NativeModules/EXDevLauncher.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ExceptionManager.native.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ExceptionManager.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ExpoRouterEntry.tsx create mode 100644 packages/snack-runtime/src/NativeModules/FileSystem.tsx create mode 100644 packages/snack-runtime/src/NativeModules/FileSystem.web.tsx create mode 100644 packages/snack-runtime/src/NativeModules/Linking.tsx create mode 100644 packages/snack-runtime/src/NativeModules/Linking.web.tsx create mode 100644 packages/snack-runtime/src/NativeModules/LogBox.tsx create mode 100644 packages/snack-runtime/src/NativeModules/LogBox.web.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ReactNativeSkia.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ViewShot.tsx create mode 100644 packages/snack-runtime/src/NativeModules/ViewShot.web.tsx create mode 100644 packages/snack-runtime/src/NativeModules/getDeviceIdAsync.tsx create mode 100644 packages/snack-runtime/src/NativeModules/getDeviceIdAsync.web.tsx create mode 100644 packages/snack-runtime/src/Profiling.tsx create mode 100644 packages/snack-runtime/src/UpdateIndicator.tsx create mode 100644 packages/snack-runtime/src/UpdateIndicator.web.tsx create mode 100644 packages/snack-runtime/src/UrlUtils.ts create mode 100644 packages/snack-runtime/src/__tests__/UrlUtils-test.ts create mode 100644 packages/snack-runtime/src/aliases/common.tsx create mode 100644 packages/snack-runtime/src/aliases/index.tsx create mode 100644 packages/snack-runtime/src/aliases/index.web.tsx create mode 100644 packages/snack-runtime/src/polyfill.tsx create mode 100644 packages/snack-runtime/src/polyfill.web.tsx create mode 100644 packages/snack-runtime/src/react-native-logo.png create mode 100644 packages/snack-runtime/src/transports/RuntimeTrafficMirroringTransport.ts create mode 100644 packages/snack-runtime/src/transports/RuntimeTransport.ts create mode 100644 packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts create mode 100644 packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts create mode 100644 packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts create mode 100644 packages/snack-runtime/src/transports/__tests__/RuntimeTrafficMirroringTransport-test.ts create mode 100644 packages/snack-runtime/tsconfig.json create mode 100644 packages/snack-runtime/types/AssetRegistry.d.ts create mode 100644 packages/snack-runtime/types/canvaskit-wasm.d.ts create mode 100644 packages/snack-runtime/vendor/README.md create mode 100644 packages/snack-runtime/vendor/system.src.d.ts create mode 100644 packages/snack-runtime/vendor/system.src.js create mode 100644 packages/snack-runtime/yarn.lock diff --git a/packages/snack-runtime/.eslintignore b/packages/snack-runtime/.eslintignore new file mode 100644 index 00000000..b33816ee --- /dev/null +++ b/packages/snack-runtime/.eslintignore @@ -0,0 +1,4 @@ +build/ +example/ +node_modules/ +vendor/ diff --git a/packages/snack-runtime/.eslintrc.js b/packages/snack-runtime/.eslintrc.js new file mode 100644 index 00000000..e3b203f5 --- /dev/null +++ b/packages/snack-runtime/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['universe/native'], +}; diff --git a/packages/snack-runtime/.gitignore b/packages/snack-runtime/.gitignore new file mode 100644 index 00000000..c613cb5f --- /dev/null +++ b/packages/snack-runtime/.gitignore @@ -0,0 +1,2 @@ +.expo/ +web-build/ diff --git a/packages/snack-runtime/assets/favicon.png b/packages/snack-runtime/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e75f697b1801871ad8cd9309b05e8ffe8c6b6d01 GIT binary patch literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy literal 0 HcmV?d00001 diff --git a/packages/snack-runtime/assets/splash.png b/packages/snack-runtime/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..def9ff1ab7dffaf356882a5ad7cc523b4ff92361 GIT binary patch literal 13071 zcmeHtc{r5c|Mw6H*(#I>V<$_N$&!6A$i8K-ga(t!z6)vWhO#foAbT=K_9e+SgBj}# z3fYaFWPPU3^ZW04uJ3bQ-#?%0bN)KlIq&!Dyw2;q&-*_2eV-U(LmdV>4mtn;z@Q5O zn*sn-1OR|G>e2;r%dd;OssO+Rfbo5Et@HEq-QC^L&`?oP(VI7KK6&!w=g*&KXJ*L3di;IhoA3vs`piov;#$vI5{``rHi@SXJ zG9@LYi;K(Z>S|3*4IdvLGc$8iQquA9@#yHNrlzK(q@;m?fryC6moHy7Ha1?octJ%) zb?w@<)YR0Ilat2AMlmrlLqkI%k(ia0b+wSs~I zD=RA?5Lj7RIW#n+qN38%(-R&Ze(BOBdV2b(sHj`FZaF$SmX?-sa&p?*+8!Jn(9zK` zFfhc##9%NOB_*ZV*;xw<3x0n7&!0c9tgN`Yx?aD2Jufe>qoYGdM`vto?C9u-k&)5I z$LI9)G(A0ib8}NjNa+6k`_t3YFc^%Lm34A*Qcq8>sj2DCojaYKo!i^nzP`TH)YR40 z)ejy#n46npV`IB;;lld*`r+Z>>({R%A|ihO{@vBpB`qzjuC6{jJiM^5U}tB?&COk2 zUOqoR&%?v>{rh)0IXN{owdUsL;^N}W%*^=scrP!njEoE<5;-$70s?_JIXTtU)yc@nSXx>pCMLdm^~&1XT2N4MYHA9NMk^{R4h#$! z85!y7>bADFe*OA2B_#!q#|H)mE-x=fM@Nf`ix(Ca4h{~!eEIUnj~}L{rtjas=iuPT z&CPxI@L@|!OK@=Tl`B`4mX;6*#Kgn|iA3V%<+ZV~85tSD;c&9DvfbU?o}Qj*X=xP| z6<4obZEI`O*4EC>&K4FH{`BcnNlD4p*4Bp)ANudBNYik7r1pNH`%+1XoJ$e)n z5a8_Wtg5Qo(9i&dLUVF*q@<)GBO}Yo%AP)b>fqp@p`jr!FW=waub`k15)y(!p`JZ^ zmY<*h?%liR&!2mEc-Y(9!{PAQ*w~qi%U1vZ$v$1My174Ly@P^+9P{DHXVn{*D9N?| zvV>1YUib?H;5i@HHYP{ge_JO0#rcoY{j1M^l*i& zJv&$0ABx}J_?A0O{okbO@O*+toP7gRc(D0CuXrLx1Ry<}hhN1}t1%wUW~p?G0M4dK zXAsB5B{9Iv`t-5a+tC{|Tb>`B_vv}nB0IDaXlr=W1*oZ6;`KnR!r33yE~Wj{h}A}1 zM`iGn5fZ@#KywM^x`f(E-3njc5qvJZE6$rhc7E&X+T%{=|q21Z)^7E z(s#eboPfpC*-WoRg(ZbN-)(_=n%JTSW|r-WW){?rWZ`}SB^>UL@96~Mge7Pnnu}C= zCPu^Izp1*frD_i^@C{4+j^)H%SK81cn++TW+gL4hWJpaJaV#0_se`*TkL(S~*Ezgj zl6+9oLgWT9>Apy$$#$iOx7=YMt|#jr6%d#w}J&*jpKxmM`n(a=c~n3|q3FtH8{n>rj`D6-f9g4qevvcPOdleZ5Qe zMAEH34e_JEK0d3|LcSnoNP)pA#-}8d-liJWPSuCHEkih*KU?dEJAC%+cuv|zen$29Z=*)^_X>6hf0(Ix}7EqQIU~|h#EHFXtw+5JBp~Bw4efk=hbgcTm zE>s{e&65=J`}~tn`-RslUvEtrZzY%A0M0$NW&;SQ0;x*dZzg-@8+YEvT!#RrPUZK`6oNE)PZM!M#a~ zg`Iq+u=maTucu+P4g&+cO@Yu0VC1HM0DWbnatt(Pug~F2#gFp!ipM`bjawGP#W|dR zORM?=TfWJRXyqlP6Lp=4pKQLYG^-~ z?0Ly<`{p5Y(r{ZzjhFXZg>5F;SQ-tm>2ORXYUexO?2N7YT2h$C`hkQ17wa45I^}P& zk@P%35!YY&agf5pQ>nmCnl%WY`@U$`Q!jy)33-}3{%*o6PyMd}Q*0=iLLnSl^;jJy zXoC`%gS9`4CGKiAu&j z$g$wvAB8|nZ!XF=UI#g|j~|Zx!T>Teh=Ti1WjpSscF$_6>=n1=e~@c&jM^R_8otQ> zcF5!o4RFr6E(t^4kE*z#{?Fy2x`knZ7lF^S5-T5lna%fpvRc**Pd8|Y8Y`zyrb_f_ z%nI{X#g>I9X1RR<7QRgkQwKM%CVbs)lUitfm5CCq9d22?@kHs|{kg6K92>Q%4!*a7 zujf!2(-ENHXZYbNhpb_qCK`N~|Kf6s%ZHhTi7u@9t?cJk`9x$2IzpRyT5&Ajqy8C( z-BoPCu8~AE+#kEvKiT`YdyP%e&OlRVC4-J-JEJKr*?#&^Aw}z2DiE;b#nf)k)ZvJHbSAe%ruHmxK?1v87J|5t$mzx|mC2iOB zIfzvswW`HF^6(kLpxHgX_}O9&4r_KbaPu4?%n#;%yrW`Mauzvb5fU2@tTRB)1E${U za@g_$XQXD^LUH~_VJb_+kES+CMjzO71q=0H=dPP)PUWIZQi-ZEJ(yybo~JGSz0LRo31~&6 z0k`gp2d+24{J2$>{1;+-ul~prsU?Sf-c!HIVs|}*mM5il>rJ3yGZWRoz}p8!mN?d?Cz2#8JNEFM|- zCr2=z?;x|nv$fw^9=SA4y zPf(xO3y~(?fkXCAwt-AZ-cLNMMQ77-yr08SB;JG{UyCJECTAkyU`#va2Gd-XrzZAu zy_IAqyKQd-&Nuti?|RPQBSn+}f0i5LX{NV1mmR#>{NBdyftxEU{e2=M&i@wM{?M#j zG#uPl?Tg>X)F)T3lScDE4}2cUSwAI&s&n{tZDUJbQkC!m5zmiw8_xnbZXJGU34BHe6@q<3BBJD$UhuzT zMqHZMkD0w@Ab%y2<_uQ-SQ%M~GT=*)p4h46*TG$4p|#&GdB($4`eUy%noPfW?dRk% zEkU0sje~TgOvrH#kMjZ_9gj2HCr#1Yk_jyA&g%YP!#yS#YjLoCnrGJWRRQzcd7h?J zZKyn`3vqfyEEkAGPNSxcIPkYa{1`YV!Ei_hqa#6G@xb2lLK7LnsBQU?g|iZ@R=1EE zv}d>^>|KU{WDs0XsfpNp#`ab+jX@?prtGq(sxZ8`O3s}(P#Zotxc`IgisHWe;S=4M z64Gd&FYXO0BuQ4VBf`^5Rs;@tu<<3gD!rAG=^m__jhEfPUDpxkD*|m!>O7VEHhe!E z9#se(`wr3h`c8kgx?9d0=HBr|g}uZGdQ1!T(CWD5R-(UD7Xt>*d*E2|@zg)WgMdk- z(J~iYH7ewltb}$!{{da&SZjou2X@LKw|!XEAT1I@o8ELI&(%~o$kgq-6STUE|D{r4wn zIcOm^;QdC)D2EMaIHR6g9g2lb?N?z39*$={7JtdqOaO4sZ^|m$&t-Z_$wcDo`>>XP#6nNEJ%_3p%Gi9+_dBt4L zjB_F6P7fZgdI^mvj~O;5KA1d&qxT-)xto~G@(2@RXn*KV2*-zoz9-kA#2o&FmLAQ1 zz5&c-I7AAal6Wvq1fp?dCt==%Lzy0nl{X@bF5F;#9`2VDJ4!4p`$AVQi@@$$Ai6i` zejzuS8<3%>7_dC7`_(8sJoZdlx&k%JgWu>C>1eAIWUz-`jmd}{zy$|eBQ1|^y6ewT zl)$!ibourz;+OVju6eOLQnAp2U<}@s0jvdOEjd*kdH^kUnrzS%234RKU$oKlWO3md zS#9oQ?eim-M$6{-p^;N@r=oLzYFw2By(~=r8wz%Pv^`VbbikUWm`&QJMXwqG&N>08~|FX7{*gvuPui#YqpojY}8xLS*F%x>{I{21+mz2Lkb5!L{b-HYw3)Pf6nHY)6uP-l9aOwBeSFFiGh~h2rIE*`31->X^J<72x#mpx zb$aamJTC3QjRi)%5-kshccp`_Nq#78^t}4vvj;ck!uWf3$pDrj1|_2>;a7w-!N7eb zoWjN0wn&%dOW?;rLZ=2R>5j}Mgy$iO?Vn+<;9c)PwN8wfvG2@{EsoCXqb+qTAx8lr zve2(5i|u^}^l(TQV=DIMa$t#0D5mLLB&zIW!g2jumV+uhG~r_`KkU#mqT>MtOU&C4 zHh+c2vL?7-OBuy%zzYUUzDl^H(^V5BgA66qcFqhAnS#pf=9jEY#3xUo`q! z%GxFY>CMRfeQntfK^`Ja@UFSS*57Td)_QnfcFNryk+jQ<)34S?ETYrNX(Q8mCrtyq za~rmpD4mtXaH%W9Y-z~lR^C)pMMw&rGVFS*V28)Ob5}UTE*gQgU7qeV%o>Te{Iy|B zgK1Ghq=xwy6k+ZU0^j$#^8&XU^1aVuTALjWYCXkY?sYiJ4&HlZ_bxpu5A=5Y?F+SL zpKKoBpDfU>wz$EP@2`imnU=JMbS`3cS|LxNGT**uFWY(@UxY&{40&^>m%m44(h`(@ zm$&qo&X0UUl_u-J!i~!+1cX?oo!@3Qpsq1rIP|XW~ihzDi_K~%a zWc}J^J&L+qaVV#;{m^;>DzoGm>OUMN=x3fps9&r-$Sl_;L-*as1u%xf&P6aEvuE+k zSF&z;sy!_})XRonYc|q#4NP-<*s?6N^=RtB;4PDLXBG`}t5Q@91O(NbZ>u!liykfD zW|+tO2E1HRxHPFOQe*&5OvMIWPj0M~T~WGuWQZZkmRRvnx(4ZG_dKkR@b-Neer9R3 zTdOl%z907#dq_1bENMajzeiaUF3yEn$gYhQ>gcoald^EotIV0Pfkg&SjLUg*N3VYw zv#0IXdf9Qs+f3H8(Ecaploz<~U<$ozLP$>7PlbZ8Vj5P}T<`xJ27@;=$!=SLuf4T- zl*II*jLp%PZ@OJM$X>OEe@%}0%VeKV7%XT=08wv`R z`n%gZF2@1eBidaX3wr+>DQce97r(cz{_8b{tj&|;fN*aYUMqCeIBHXU=E3SPf88qx z7`p4Z%kQ#$NZHyY6||7RMZ+TEk)DigV~!e>N#A1BahOcIF|!xRz>Ls1@WWZhs9lDZ zlqwfo4=AjPvTs0yvX~G~^bjs1O+8oNDEoRX+=4?oj+9rLW5SV{rB7sc+V>RJb@Adf zyg+I<_LUrVL&9>1EaM&GOvlX0PNg;+j$6D7qj`#(zsby}6cJZ^B$!oR6%D`kAxPI1 z_6e$#(Gc~Uw8;w+lB>xERh$^4vsnEdvWVe}^5g;}>H%j~*DVx9Wt-k42Eo4C<%j6p z)xlY_c@sQntGS-AHq2Vp=)j(XnmY%4UII-Y-V)07qcqB{b(L=7ROKkWBS(9X2U@DS zAS;m7a>axYT#U(lSKM%X5&Sfmb<&Suj0$q<7HS~(i3poPmXr#R7zG(8+RbfGJ|IyW zaax2?a8)<0wE|N2faDxFED4`}3ucXw#Nlew)K7juWmw~6g9LWM4mLLHRuvQH4})Zt zw>qcZI+d%(JGp-gZJfY~8@Tt!<-D!5X^6WMVPeC6C+6Ll)@@egRxxGW(;+>EfiX*y zZo0xp#R#EJXLUI9&C0IN;_Kr}kC!mNhZK~!qw~E~me%(VFSMo`wQilZs&E%$RA3bK ztQwU^4mro=*Guum-Thx$fPLyr6y4VBP_uX9#tiz?)ny*IVxW(}lmp8hSS=(QOqnm% zU!pi&Rpx;&<{0$z3etM(+{9VVzR^lHh&N+{QchL>oj&H;-MVI zjT)RosZy2r;<eoSfXS!gbI zJAj(ijsKm_sWyevJ#nZR-|_pt?%c|b5Wgy0WWZJW#>RJI^e?;K zdaL~BL0Vm?$zp>*2L{g0Ac?`@|LL$Ni{_j^4wy&m6&ZvCTr4A{B}ZDk3nBcS>YZ_l z?gQ^)1M$^J(Fe;9Eu3@F=EU-M|L80TODm>)vlZGp(NWeX4J)m;qW|k6$PRGg*Mz2C zbuwN%7y0aH(QrST5agOc6ayBECxhIFH9n37iCbAP;?e?xMhD4+$0q2mZ#wh9%BpDH zP}43J3p_AOVtK${UNK96d2d0yAVTw%roW^Qp`vW6#6UbO{(r!NcJ&JyeSINU67&H= z&|30YHbf2H6Xq0N12lu0jo*sQnz&8dGL*1aY>+Tc7T~SL7@#{cQ$PEtl+$ft9#k&+ z8)}A_|7SYVH=?AGoDveha{GHEq}LOfTK^u~-28HD1VQqL}X;C^1lO zp(*?250-Q_v?Z*Q-}Ww%;}wneQzy}XO+uAEl{DW>(g3S)0OHe6A=!Ezc#z#G<@V9xp=7f?-r`3hc$Y_i z8Um>pE|IYqKJJv>%tT+)&>=E!eqcs~1+o~|l*dAAkL|5a1;M}a&ERH%Sx|kqO_@h0 zgSU8rj`%btpTUy*wi?PtvV5-`$e^55@yiI8F4@y2>- z``KN`fnq80!eqD-z`O*D^#g$1mJ*)rlXEn^D~OimkL%Tkb^_YV%dT+R&2u<3o2~S= z`pc_ikxDQUm~OEFBhzCSZhDqKCD)`Z z<2WW61kg+AyXxk5)7 z^FdmSOC?a))TEog0tu_-Tv15jd_>r zKGI9+%=Sl+tV|nCF1j@xiX&WP>9rsXR9(y>CQ@gkW4Udfnz~2A50`{j9#k*ZuSa$r ztj_tU7gs)aX4kLbAhUJADZtN7PDE;2Y=*Bo5G+ZLploX39rD>!W$-{W17%@vg}Gv& z20qzkT&XY$IqX7PJwjqEEdVAW zEa$g*bMNr9#3qnCWTyWZ5UZwd|KJCAsbY|Ln$+%zB3T*FU$U?e$vgCQ%m@I^Mdsx$ zp(eP9%qjEwYci);@4P78(v3J9?Bw3IHx_4k=o@jP;R2Zi7jl>OzMEzY$>KaV?_LpU zPbMSNix;Sl#BhctFQ(girJ~CQ%QAB<$%}(VU^U(@u8CxokNx6<6;=+I(t!Cnew9@TjniTtoAcvL1xX78rK`Ca7~$VvdqHdX{__BtMwvX~cC2(e`XcPZH;cNL_i z`;f;pK!`0Dm_H3Qc~GW&i1N_{H`k_nGd{^iZ4agq$!(KOZR2HY@`>}C>b|SF zv@26vvLlsgUN72#k{qckZ+Y`{A;KCuI^t897f-KXO@`vHMEDf;&w{+2?&7a#oxHxx zYS$r(Qls{(U3KBJ)=-rw9K`(oYK`&n!yfM{4}Ry~Y6c^>Qcgpr0`!Yk2WYNGa%%nr*Ko>tOj#}+SF=h>B;rW>77WCK{kWo9D^m=DEv}sjf z--bAsj8>s|h?TY|;rE25_PtXemKRQL;n9wOWDufpDV1YVX6#BJ0Zj|AJ)td|Jvn<0 z%do88HU0?=G9{aQ|5K^kQfseXLMjGGl~|7kfPO$z_pHb$kt^Zkgbt8ex?v%d`v!$+ zYoWUfTcQF$`(J!CYgvgl#vjB2q+AQj@Fp44mi=FINTZ33Qur}Jz`zYtpBc#!ez{}o zCT+`R%Nvggtycj^(vQG4W6#GH;m~7U@+2%rMI_Y-&97+pZGs~8ZQlWSU|v1J3Lg=5 zO|`FzNQq=R_M^Sm1Yr(Z*n_gL+brgUDms9dn?-J)MiHi|)u9DD&s#*gK%qvsCilt!#b>0W^l}D`y&6aG?CF-1Onb z!7^ntYZge-i@eYbX22|j{8K9TX^<9SQ5w|*21FGtnpA2#gvx0V&I%iC0Z~g>k$s0| zFu~(Ic#WoxzPoi6BZe5FL87g<>3c#a!?j4#ti9S4Rg1iT_=Kt=&0xqsQxw(p= zc03Z^i`m&+8n%@PF@f0U1ty_yEfujT51u`#h|$vhq8MYB%>Cz1Z`R}TUTO{vS&=z6 z#F(Cb<)EKWx59C7+mFHDyCEuP@TKXs)5N}mRX0~z9D19fBo07auxvnE9h8WB1(yQg z69=pI13M^Kn*?COVe%dNTNAa~ldjMvv=zFzvMCF%r506h_1zRyEPh&P1po&I?f18$ z#Do6FdY?oYPI~vbb_GN3c}h-Y)d00uq)|0_yzkFMfZ8l+bRlo6h!os! zNfAE0bGmvU`UKj4kH81mswRzA7#G3DttrAa@^a$EI#bXwj?{qepHn18TY}+Wt`I;9 zJ#%&C5bpMU59NG!{VG7%H^|wSu=s;qa}IKTMsRbW1)S8|nQ2cuWM-l>4HPKCAHVf9 zLtE)E+_!xx%nLBCX!Ke==u1YG=6?aar>c<{Kj=fE43640{Q*UyX7yGwrp3t0GZnI; z@j68D{mpkbph^}JfcKt3`+@pf(BoEJfZE!DsPY%72^8t+f;S7mo>*RS^jq``N{+FW z9dPMoP?0LE-j5EjY;Jp%yQWG8j%sP)0lW_hDmrO7%KWVa^TIxFycEuUMUzZq9OdjP z$qv}+M$!2MEjSVqIj;e>T!Sno=Zy$?Tx@_X^T{h@ipQwRlNv`r`#5P-C<&kDp~4Sf z{&k=iMi5=40tC<9Hm$c}a3~_ZU?=mYLbtg2G(&7p)0+Wm$waYJXw!rs;Aflf_<^1$ zL1Ld4knyPnmyRw=PXvUs5X*bBaASub)B){pNuvoATu|bP34rHe4eRPbnNu^g$yW=| zjv|e6A8bqrtdh^0hhCA8HUkz$eojRi+MKM&_)F>?3sc_ASOw0m8i9!RFdh!Z$j&fz z6QnMOsk-_z38?SDx92Cf{QUF!H;?D{kN8xG#{tjQk}}b`Mq(7kjFrAP2L>frDxcAX z_xDr;Nu$s42dlz>KB9wtg>o=qW{^g0z)`hZ_U z4)&+ly$LEgG-@%hTl}O^9{jhrHY|K^|nGX_vJZ>avJ j@rbiF-{}9_mCtZ%)~QaIYGhvgUo%}TLvWSG!-)R{Hyr<| literal 0 HcmV?d00001 diff --git a/packages/snack-runtime/babel.config.js b/packages/snack-runtime/babel.config.js new file mode 100644 index 00000000..67a80aac --- /dev/null +++ b/packages/snack-runtime/babel.config.js @@ -0,0 +1,7 @@ +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + // plugins: ['@babel/plugin-proposal-export-namespace-from', 'react-native-reanimated/plugin'], + }; +}; diff --git a/packages/snack-runtime/index.ts b/packages/snack-runtime/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/snack-runtime/package.json b/packages/snack-runtime/package.json new file mode 100644 index 00000000..eaee4de6 --- /dev/null +++ b/packages/snack-runtime/package.json @@ -0,0 +1,54 @@ +{ + "name": "snack-runtime", + "version": "0.3.0-rc.0", + "description": "Load and run Expo Snacks in any React Native app", + "main": "./index.ts", + "files": [ + "build", + "types" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/expo/snack.git", + "directory": "packages/snack-runtime" + }, + "bugs": { + "url": "https://github.com/expo/snack/issues" + }, + "author": "Expo ", + "license": "MIT", + "volta": { + "node": "16.14.2" + }, + "scripts": { + "test": "jest", + "lint": "eslint . --ext js,jsx,ts,tsx", + "prepublishOnly": "yarn clean && yarn build" + }, + "dependencies": { + "await-lock": "^2.2.2", + "snack-babel-standalone": "^2.2.2", + "snack-require-context": "file:../snack-require-context" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "babel-preset-expo": "^9.3.0", + "eslint": "^8.20.0", + "eslint-config-universe": "^11.2.0", + "expo": "^48.0.19", + "react": "18.2.0", + "react-test-renderer": "18.2.0", + "react-native": "0.71.8", + "jest": "^29.2.1", + "jest-expo": "^47.0.1" + }, + "peerDependencies": { + "expo": "^48.0.0", + "react": "18.2.0", + "react-native": "0.71.8" + }, + "jest": { + "preset": "jest-expo" + } +} diff --git a/packages/snack-runtime/src/Analytics.tsx b/packages/snack-runtime/src/Analytics.tsx new file mode 100644 index 00000000..9ffbb25d --- /dev/null +++ b/packages/snack-runtime/src/Analytics.tsx @@ -0,0 +1,28 @@ +// Use Expo's Amplitude API to log analytics events + +import Constants from 'expo-constants'; + +import Amplitude from './NativeModules/Amplitude'; + +const AMPLITUDE_KEY = '3b373bbc96d76a58d5efe2b73118a96e'; + +Amplitude.initializeAsync(AMPLITUDE_KEY); + +let loggedReceivedFirstCode = false; + +export const receivedCode = ({ + message: { metadata }, + deviceId, +}: { + message: { metadata: object }; + deviceId: string; +}) => { + if (!loggedReceivedFirstCode) { + Amplitude.logEventWithPropertiesAsync('RECEIVED_FIRST_CODE', { + phoneId: deviceId, + phoneName: Constants.deviceName, + ...metadata, + }); + loggedReceivedFirstCode = true; + } +}; diff --git a/packages/snack-runtime/src/App.tsx b/packages/snack-runtime/src/App.tsx new file mode 100644 index 00000000..012f0a50 --- /dev/null +++ b/packages/snack-runtime/src/App.tsx @@ -0,0 +1,519 @@ +import './polyfill'; + +import AsyncStorage from '@react-native-async-storage/async-storage'; +import Constants from 'expo-constants'; +import { activateKeepAwake } from 'expo-keep-awake'; +import { StatusBar } from 'expo-status-bar'; +import * as Updates from 'expo-updates'; +import * as React from 'react'; +import { + AppState, + PixelRatio, + Dimensions, + Platform, + EmitterSubscription, + NativeEventSubscription, +} from 'react-native'; +import { createVirtualModulePath } from 'snack-require-context'; + +import * as Analytics from './Analytics'; +import { AppLoading } from './AppLoading'; +import BarCodeScannerView from './BarCodeScannerView'; +import * as Console from './Console'; +import * as Errors from './Errors'; +import * as Files from './Files'; +import LoadingView from './LoadingView'; +import * as Logger from './Logger'; +import * as Messaging from './Messaging'; +import * as Modules from './Modules'; +import EXDevLauncher from './NativeModules/EXDevLauncher'; +import { ExpoRouterApp, isExpoRouterEntry } from './NativeModules/ExpoRouterEntry'; +import Linking from './NativeModules/Linking'; +import { captureRef as takeSnapshotAsync } from './NativeModules/ViewShot'; +import getDeviceIdAsync from './NativeModules/getDeviceIdAsync'; +import * as Profiling from './Profiling'; +import UpdateIndicator from './UpdateIndicator'; +import { parseExperienceURL } from './UrlUtils'; + +const API_SERVER_URL_STAGING = 'https://staging.exp.host'; +const API_SERVER_URL_PROD = 'https://exp.host'; + +type State = { + initialLoad: boolean; + initialURL: string; + showSplash: boolean; + isLoading: boolean; + showBarCodeScanner: boolean; + rootElement: React.ReactElement | null; + channel: string | null; + foreground: boolean; + isConnected: boolean; + loadingElement: React.ReactNode; +}; + +const RELOAD_URL_KEY = 'snack-reload-url'; +const ONE_MINUTE = 1000 * 60; + +// The root component for Snack's viewer. Allows scanning a barcode to identify a Snack, listens for +// updates and displays the Snack. +export default class App extends React.Component { + state: State = { + initialLoad: true, + initialURL: '', + showSplash: Platform.OS !== 'web', + isLoading: true, + showBarCodeScanner: false, + rootElement: null, // Root React element produced by the user's application + channel: null, + foreground: true, + isConnected: false, + loadingElement: , + }; + + private subscriptions: (EmitterSubscription | NativeEventSubscription)[] = []; + + async componentDidMount() { + Profiling.checkpoint('`App.componentDidMount()` start'); + + let initialURL: string | null = EXDevLauncher.manifestURL ?? (await Linking.getInitialURL()); + + // Generate unique device-id + const deviceId = await getDeviceIdAsync(); + + // Initialize messaging transport + const testTransport = initialURL ? parseExperienceURL(initialURL)?.testTransport : null; + Messaging.init(deviceId, testTransport); + + // Initialize various things + this._awaitingModulesInitialization = Modules.initialize(); + Console.initialize((method: string, payload: unknown[]) => { + // Send any intercepted console.x calls to the sdk. + // Errors are made serializable and converted to a string. + Messaging.publish({ + type: 'CONSOLE', + method, + payload: payload.map((item) => { + if (typeof item === 'object') { + if (item instanceof Error) { + const stack = Errors.prettyStack(item).split('\n', 4).join(' << '); + return `Error: "${item.message}" in ${stack}\n...`; + } + try { + return JSON.stringify(item); + } catch {} + } + return String(item); + }), + }); + }); + this._listenForUpdates(deviceId); + + // Keep the device awake so the user doesn't have to keep waking it while coding + activateKeepAwake(); + + // If we have an entry point file already, we can load now + if (Files.get(Files.entry())) { + this._reloadModules(); + } + + try { + // Open from the initial URL if given + + if (!initialURL) { + // Check for any stored URLs for reload + const result = JSON.parse((await AsyncStorage.getItem(RELOAD_URL_KEY)) ?? '{}'); + if (result?.url) { + // Remove the stored URL so next refresh can start fresh + // For example, in development, we want the barcode scanner + await AsyncStorage.removeItem(RELOAD_URL_KEY); + + // If there is no initial URL, check if the stored URL is new + // We discard if it's older than 15 mins + // 15 mins is probably too long, but it doesn't really matter + // since initial URL will only be empty during development and reload + if (Date.now() - result.timestamp < ONE_MINUTE * 15) { + Logger.info('Found reload URL', result.url); + + initialURL = result.url; + } else { + Logger.info('Found reload URL, but it was expired', result.url); + } + } + } else { + Logger.info('Found initial URL', initialURL); + } + + if (initialURL) { + this._openUrl(initialURL); + } + } catch (e) { + Logger.error('An error occurred when getting URL', e); + } + + if (!this._currentUrl) { + if (!Files.get(Files.entry())) { + // Else show the barcode scanner + // eslint-disable-next-line react/no-did-mount-set-state + this.setState(() => ({ + showSplash: false, + showBarCodeScanner: true, + initialURL: initialURL ?? '', + })); + } + } else { + // eslint-disable-next-line react/no-did-mount-set-state + this.setState(() => ({ showSplash: false })); + } + + this.subscriptions = [ + Linking.addEventListener('url', this._handleOpenUrl), + AppState.addEventListener('change', this._handleAppStateChange), + ]; + } + + componentWillUnmount() { + this.subscriptions?.forEach((subscription) => subscription.remove()); + } + + _view?: Errors.ErrorBoundary | null; + _awaitingModulesInitialization?: Promise; + + _handleOpenUrl = async (data: { url: string }) => { + if (data.url) { + Logger.info('URL changed', data.url); + this._openUrl(data.url); + } + }; + + // `BarCodeScannerView` read a URL, try to open it + _handleBarCodeRead = ({ data }: { data: string }) => { + Logger.info('Scanned barcode', data); + + try { + if (this._openUrl(data)) { + this.setState({ showBarCodeScanner: false }); + } + } catch (e) { + Logger.error(e); + } + }; + + _handleAppStateChange = ( + appState: 'active' | 'inactive' | 'background' | 'unknown' | 'extension' + ) => { + const foreground = appState === 'active'; + + if (this.state.foreground !== foreground) { + Logger.info('App state changed to', appState); + + this.setState({ foreground }); + + if (foreground) { + const { channel } = this.state; + + if (channel) { + Messaging.subscribe({ channel }); + this._askForCode(); + } else if (!Files.get(Files.entry())) { + this.setState({ showBarCodeScanner: true }); + } + } else { + this._cancelAskForCode(); + Messaging.unsubscribe(); + } + } + }; + + _currentUrl?: string; + + // Open Snack session at given `url`, throw if bad URL or couldn't connect. All we need to do is + // subscribe to the associated messaging channel, everything else is triggered by messages. + _openUrl = (url: string): boolean => { + const parsedUrl = parseExperienceURL(url); + + if (!parsedUrl) { + Logger.warn( + `Snack URL didn't have either the format 'https://exp.host/@snack/SAVE_UUID+CHANNEL_UUID' or 'https://exp.host/@snack/sdk.14.0.0-UUID'` + ); + return false; + } + + this._currentUrl = url; + + Logger.info('Opening URL', url); + + const { channel } = parsedUrl; + + this.setState({ + channel, + initialURL: url, + }); + + Profiling.checkpoint('`_openUrl()` read'); + + Messaging.subscribe({ channel }); + this._askForCode(); + + return true; + }; + + _handleReloadSnack = async () => { + const url = this._currentUrl; + if (url) { + Logger.info('Reloading app with URL', url); + + // On iOS, closing the app may not trigger unsubscribe + // So we explicitly unsubscribe before reloading + Messaging.unsubscribe(); + + if (Platform.OS === 'ios') { + // If we immediately reload, unsubscription message isn't sent yet + // Add this timeout to make sure that it is + await new Promise((resolve) => setTimeout(resolve, 500)); + } + + // Store the current URL and timestamp in asyncstorage + // When the app reloads, it can read the stored URL to open the snack + await AsyncStorage.setItem( + RELOAD_URL_KEY, + JSON.stringify({ + url, + timestamp: Date.now(), + }) + ); + + await Updates.reloadAsync(); + } else { + Logger.info("Got a reload request, but we don't have a URL"); + } + }; + + // @ts-ignore: NodeJS.Timeout not defined? + _askTimeout?: NodeJS.Timeout; + + _askForCode = () => { + let time = 3 * 1000; + + this._cancelAskForCode(); + + const ask = () => { + if (this.state.initialLoad) { + time = time * 1.2; + this._askTimeout = setTimeout(ask, time); + Messaging.publish({ type: 'RESEND_CODE' }); + } + }; + + this._askTimeout = setTimeout(ask, time); + + Messaging.publish({ type: 'RESEND_CODE' }); + }; + + _cancelAskForCode = () => { + if (this._askTimeout) { + clearTimeout(this._askTimeout); + this._askTimeout = undefined; + } + }; + + _uploadPreviewToS3 = async (asset: string, height: number, width: number) => { + const url = `${ + Constants.manifest?.extra?.cloudEnv !== 'production' + ? API_SERVER_URL_STAGING + : API_SERVER_URL_PROD + }/--/api/v2/snack/uploadPreview`; + const body = JSON.stringify({ asset, height, width }); + try { + Logger.info('Uploading preview...', 'width', width, 'height', height); + const response = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body, + }); + const data = await response.json(); + return data.url; + } catch (e) { + throw new Error('Unable to upload asset to S3: ' + e.message); + } + }; + + // Listen for Snack updates + _listenForUpdates(deviceId: string) { + Messaging.listen(async ({ message }) => { + Logger.comm_recv('Message received', message); + + this.setState((state) => (!state.isConnected ? { isConnected: true } : null)); + + switch (message.type) { + case 'CODE': { + // Stop asking for code if we received it + this._cancelAskForCode(); + + Profiling.checkpoint('`CODE` message recv'); + this._lastCodeUpdatePromise = this._handleCodeUpdate( + message, + this._lastCodeUpdatePromise, + deviceId + ); + break; + } + case 'REQUEST_STATUS': { + const pixelRatio = PixelRatio.get(); + const dims = Dimensions.get('window'); + const height = dims.height / pixelRatio; + const width = dims.width / pixelRatio; + + if (this._view) { + let previewLocation = null; + try { + const snapshot = await takeSnapshotAsync(this._view, { + format: 'jpg', + quality: 0.4, + result: 'base64', + height, + width, + snapshotContentContainer: false, + }); + if (snapshot) { + previewLocation = await this._uploadPreviewToS3(snapshot, height, width); + } + } catch (e) { + Logger.error('Failed to record preview', e); + } + Messaging.publish({ + type: 'STATUS_REPORT', + previewLocation, + status: Errors.status(), + }); + } + break; + } + case 'RELOAD_SNACK': + this._handleReloadSnack(); + break; + } + }); + } + + _lastCodeUpdatePromise = Promise.resolve(); + + _handleCodeUpdate = async (message: any, waitForPromise: Promise, deviceId: string) => { + await waitForPromise; + await Profiling.section(`'CODE' message`, async () => { + Analytics.receivedCode({ message, deviceId }); + + this.setState(() => ({ isLoading: true })); + + // Update project-level dependency info if given + let changedDependencies: string[] = []; + if (message.dependencies) { + changedDependencies = await Modules.updateProjectDependencies(message.dependencies); + } + + // Update local files and reload + const changedPaths = await Files.update({ message }); + + // Reload modules when anything has changed + if (changedDependencies.length || changedPaths.length) { + Profiling.checkpoint('`CODE` message `_reloadModules()` begin'); + await this._reloadModules({ changedPaths, changedDependencies }); + } else { + Logger.warn('Code message received but no changes detected, ignoring'); + this.setState(() => ({ isLoading: false })); + } + }); + }; + + // Flush stale modules given local file paths that have changed. If needed, load the root module + // and construct a React element out of its default export and save it for us to render. + async _reloadModules({ + changedPaths = [], + changedDependencies = [], + }: { changedPaths?: string[]; changedDependencies?: string[] } = {}) { + Logger.module('Reloading, files changed', changedPaths.concat(changedDependencies), '...'); + if (this._awaitingModulesInitialization) { + await this._awaitingModulesInitialization; + this._awaitingModulesInitialization = undefined; + } + + let rootElement: React.ReactElement | undefined; + try { + const rootModuleUri = 'module://' + Files.entry(); + + // Handle Expo Router root with a Snack compatible components + if (isExpoRouterEntry(Files.get(Files.entry())?.contents)) { + // Flush without flushing the root component + await Modules.flush({ changedPaths, changedUris: [] }); + + const ctx = await Modules.load(createVirtualModulePath({ directory: 'module://app' })); + Logger.info('Updating Expo Router root element'); + rootElement = React.createElement(ExpoRouterApp, { ctx }); + } + // Handle normal default exports + else { + // Flush with the root component + await Modules.flush({ changedPaths, changedUris: [rootModuleUri] }); + const hasRootModuleUri = await Modules.has(rootModuleUri); + if (!hasRootModuleUri) { + const rootDefaultExport = (await Modules.load(rootModuleUri)).default; + if (!rootDefaultExport) { + throw new Error(`No default export of '${Files.entry()}' to render!`); + } + Logger.info('Updating root element'); + rootElement = React.createElement(rootDefaultExport); + } + } + } catch (e) { + Errors.report(e); + } finally { + this.setState((state) => ({ + rootElement: rootElement ?? state.rootElement, + isLoading: false, + initialLoad: false, + showSplash: false, + })); + } + } + + render() { + const { + showSplash, + showBarCodeScanner, + rootElement, + loadingElement, + initialLoad, + initialURL, + isConnected, + isLoading, + } = this.state; + + if (showSplash) { + return ; + } + + if (showBarCodeScanner) { + return ( + <> + + + + ); + } + + // Render root element of the user's application if present, else a loading view. In + // either case, surround by an `ErrorBoundary` to display errors and allow recovery. + const isConnecting = !!this._currentUrl && !isConnected; + return ( + <> + + (this._view = view)}> + {rootElement ?? loadingElement} + + + + ); + } +} diff --git a/packages/snack-runtime/src/AppLoading.tsx b/packages/snack-runtime/src/AppLoading.tsx new file mode 100644 index 00000000..989e5a21 --- /dev/null +++ b/packages/snack-runtime/src/AppLoading.tsx @@ -0,0 +1,25 @@ +import * as SplashScreen from 'expo-splash-screen'; +import { PureComponent } from 'react'; + +import * as Logger from './Logger'; + +// This is a drop-in replacement for `expo-app-loading` +// see: https://github.com/expo/expo/blob/1f31c08351ab66a3d27db0898ffd8c5b20f1bf5a/packages/expo-app-loading/src/AppLoadingNativeWrapper.tsx +export class AppLoading extends PureComponent { + constructor(props: any) { + super(props); + SplashScreen.preventAutoHideAsync().catch((error) => { + Logger.error('Failed to prevent auto-hide on splash screen', error); + }); + } + + componentWillUnmount() { + SplashScreen.hideAsync().catch((error) => { + Logger.error('Failed to hide splash screen', error); + }); + } + + render() { + return null; + } +} diff --git a/packages/snack-runtime/src/BarCodeScannerView.native.tsx b/packages/snack-runtime/src/BarCodeScannerView.native.tsx new file mode 100644 index 00000000..a8988cb7 --- /dev/null +++ b/packages/snack-runtime/src/BarCodeScannerView.native.tsx @@ -0,0 +1,94 @@ +import { BarCodeScanner, BarCodeScannedCallback } from 'expo-barcode-scanner'; +import Constants from 'expo-constants'; +import * as React from 'react'; +import { Text, View, StyleSheet } from 'react-native'; + +import LoadingView from './LoadingView'; + +type Props = { + onBarCodeScanned: BarCodeScannedCallback; + initialURL: string; +}; + +type State = { + waitingForPermission: boolean; + hasCameraPermission: boolean; +}; + +export default class BarCodeScannerView extends React.Component { + state = { + waitingForPermission: true, + hasCameraPermission: false, + }; + + componentDidMount() { + this._openCameraAsync(); + } + + _openCameraAsync = async () => { + const { status } = await BarCodeScanner.requestPermissionsAsync(); + + this.setState({ + waitingForPermission: false, + hasCameraPermission: status === 'granted', + }); + }; + + render() { + const { initialURL, onBarCodeScanned } = this.props; + const { waitingForPermission, hasCameraPermission } = this.state; + + if (waitingForPermission) { + return ; + } + + if (hasCameraPermission) { + return ( + + {`Launch URL: ${initialURL}`} + + Open up https://snack.expo.dev and scan the QR code to get started! + {'\n'} + {'\n'} + Make sure to leave the web page open while you are running the project. + + {/* @ts-ignore Property 'style' does not exist on type */} + + + ); + } + + return ( + + + Please accept the camera permission so that you can scan a QR code! + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + paddingTop: Constants.statusBarHeight, + backgroundColor: '#ecf0f1', + }, + initialURL: { + margin: 16, + marginBottom: 0, + fontSize: 16, + textAlign: 'center', + color: '#4630eb', + }, + paragraph: { + margin: 16, + fontSize: 16, + textAlign: 'center', + color: '#34495e', + }, + camera: { + flex: 1, + }, +}); diff --git a/packages/snack-runtime/src/BarCodeScannerView.tsx b/packages/snack-runtime/src/BarCodeScannerView.tsx new file mode 100644 index 00000000..b8e9dd9c --- /dev/null +++ b/packages/snack-runtime/src/BarCodeScannerView.tsx @@ -0,0 +1,38 @@ +import type { BarCodeEvent } from 'expo-barcode-scanner'; +import Constants from 'expo-constants'; +import * as React from 'react'; +import { View, TextInput, StyleSheet } from 'react-native'; + +type Props = { + onBarCodeScanned: (event: Pick) => any; + initialURL: string; +}; + +export default function BarCodeScannerView({ onBarCodeScanned }: Props) { + return ( + + onBarCodeScanned({ data: e.nativeEvent.text, type: 'url' })} + placeholder="Enter URL to load" + /> + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + paddingTop: Constants.statusBarHeight, + backgroundColor: '#ecf0f1', + }, + input: { + backgroundColor: 'white', + margin: 24, + padding: 8, + height: 44, + borderWidth: 1, + borderColor: 'rgba(0, 0, 0, .16)', + }, +}); diff --git a/packages/snack-runtime/src/Console.tsx b/packages/snack-runtime/src/Console.tsx new file mode 100644 index 00000000..adfbee08 --- /dev/null +++ b/packages/snack-runtime/src/Console.tsx @@ -0,0 +1,64 @@ +import LogBox from './NativeModules/LogBox'; + +const ignoredWarnings = ['Setting a timer for a long period of time']; + +LogBox.ignoreLogs(ignoredWarnings); + +// @ts-ignore: Property __original__ does not exist on console +export const originalConsole = console.__original__ || { + // TODO: Why is console.info + log: console.log.bind(console), + error: console.error.bind(console), + warn: console.warn.bind(console), +}; +// @ts-ignore: Property __original__ does not exist on console +console.__original__ = originalConsole; + +// Initialize Snack console. Hooks around `console.` methods to notify `Messaging` channel. +export const initialize = (callback: (method: string, payload: unknown[]) => void) => { + ['log', 'error', 'warn'].map((methodName) => { + // @ts-ignore + console[methodName] = function (...args: unknown[]) { + if (__DEV__) { + switch (methodName) { + case 'error': + originalConsole.log( + '%c APP %c ERROR ', + 'background: #01FFA2;', + 'background: #f44336; color: #fff;', + ...args + ); + break; + case 'warn': + originalConsole.log( + '%c APP %c WARN ', + 'background: #01FFA2;', + 'background: #FF9800; color: #fff;', + ...args + ); + break; + } + } + + if ( + ignoredWarnings.some( + (warning) => typeof args[0] === 'string' && (args[0] as string).startsWith(warning) + ) + ) { + return; + } + + // TODO(tc): base console calls during initial load are putting the android app into a bad state + // originalConsole[methodName](...args); + callback(methodName, args); + }; + }); + + // React Native calls `console._errorOriginal(...)` underneath on a `console.error(...)` after + // wrapping it internally. This ends up causing a stack overflow due to recursive calls somehow + // after our hooks, so noop it out... + // + // See https://github.com/expo/react-native/blob/ed69235cb8d4a5cdb21bada7f53ba73bcb9cab13/Libraries/Core/ExceptionsManager.js#L105 + // @ts-ignore + console._errorOriginal = () => {}; +}; diff --git a/packages/snack-runtime/src/Errors.tsx b/packages/snack-runtime/src/Errors.tsx new file mode 100644 index 00000000..c1b5231c --- /dev/null +++ b/packages/snack-runtime/src/Errors.tsx @@ -0,0 +1,325 @@ +// Currently only one error is saved at a time for display + +import Constants from 'expo-constants'; +import * as React from 'react'; +import { View, ScrollView, Text, StyleSheet, Platform } from 'react-native'; + +import * as Files from './Files'; +import * as Logger from './Logger'; +import * as Messaging from './Messaging'; +import * as Modules from './Modules'; +import ExceptionManager from './NativeModules/ExceptionManager'; + +type Props = { + children: React.ReactNode; +}; + +type State = { + error: Error | null; + attemptRender: boolean; + content: React.ReactNode; +}; + +// Save an error for display +let initialError: Error | null = null; +let setError = (e: Error | null) => { + initialError = e; +}; +let getError = () => initialError; + +// Replace React Native's top-level exception handler with our own. Also its +// `console.error(...)`-to-exception forwarder skips this override so disable that too. +// +// See https://github.com/expo/react-native/blob/exp-latest/Libraries/Core/ExceptionsManager.js +ExceptionManager.handleException = (e: Error, _isFatal: boolean) => { + report(e); +}; + +// @ts-ignore +console.reportErrorsAsExceptions = false; + +// Report an error +export const report = (e: Error) => { + Logger.error(e); + setError(e); + + // Ensure the error is a real error + if (typeof e !== 'object') { + e = new Error(String(e)); + } + + // Try to resolve the location of the error + const name = e.name; + const stack = e.stack; + const message = e.message; + // @ts-ignore: fileName is not a default field of Error + let fileName: string = e.fileName || ''; + // @ts-ignore: line fields are optional + let lineNumber: number | undefined = e.lineNumber ?? e.startLine ?? e.line; + // @ts-ignore: column fields are optional + let columnNumber: number | undefined = e.columnNumber ?? e.startColumn ?? e.column; + const lines = message.split('\n'); + for (let i = 0; i < lines.length; i++) { + let match = lines[i].match(/module:\/+(.*):(.*)\s\((\d+):(\d+)(\n|\))/); + if (match) { + fileName = Modules.sanitizeModule(match[1]); + lineNumber = Number(match[3]); + columnNumber = Number(match[4]); + break; + } + match = lines[i].match(/module:\/+(.*)/); + if (match) { + fileName = Modules.sanitizeModule(match[1]); + if (Files.get(fileName)) { + break; + } + } + } + + // Send error + Messaging.publish({ + type: 'ERROR', + error: JSON.stringify({ + name, + message, + fileName, + lineNumber, + columnNumber, + stack, + }), + }); +}; + +export const status = () => (getError() ? 'FAILURE' : 'SUCCESS'); + +/** + * Generate a human-readable description of the error stack trace. + * This does a few things: + * - Try to map transpiled code back to original source code with the known sourcemaps + * - Filters references to the Snack client bundle code, since that's irrelevant for the user's code + * - Filters Hermes internal bytecode references + * - Clean up file names to remove the `module://` prefix, and `.js.js` suffix + * - Clean up faulty column numbers and correct the line numbers, caused by `Files.tsx`'s `applyPatch` newlines + */ +export function prettyStack(error: Error) { + // Unmap transpiled code from known sourcemaps + const sourceUnmappedStack = error.stack?.replace( + /(module:\/\/[^:]+):(\d+):(\d+)(\n|\))/g, + (match, sourceURL, line, column) => { + const u = Modules.unmap({ + sourceURL, + line: parseInt(line, 10), + column: parseInt(column, 10), + }); + return u + ? // Avoid adding the `column`, `source-map@0.6.1` does not properly resolve the column. It uses the generated column number. + u.path + (u.line !== null && u.column !== null ? `:${u.line})\n` : '\n') + : match.replace(/module:\/+/, '').replace(/.([a-z]+).js/g, '.$1'); + } + ); + + if (!sourceUnmappedStack) { + return 'No stacktrace available'; + } + + return sourceUnmappedStack + .split(/\r?\n/) + .filter((line) => !line.match(/https?:\/\/.+/g)) // Filter bundle-related stacks + .filter((line) => !line.match(/\(native\)/g)) // Filter (native) stacks + .filter((line) => !line.match(/InternalBytecode/g)) // Filter Hermes bytecode stacks + .filter((line) => !line.match(/\(address at/g)) // Filter Android specific address stacks + .filter(Boolean) // Filter empty lines + .join('\n'); +} + +// Acts as a boundary for upward error propagation in the React render tree. Displays errors with a +// friendly dialog. +export class ErrorBoundary extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + error: initialError, + content: React.Children.only(props.children), + attemptRender: true, + }; + } + + static getDerivedStateFromProps(props: Props, state: State) { + // ErrorBoundary expects only a single child so it can + // efficiently determine whether the content has changed. + const content = React.Children.only(props.children); + if (state.content !== content) { + return { + content, + attemptRender: true, + // Reset error when new content has been received + error: content ? null : state.error, + }; + } + return null; + } + + componentDidMount() { + setError = (error) => this.setState(() => ({ error })); + getError = () => this.state.error; + } + + componentWillUnmount() { + setError = (_error: Error | null) => {}; + getError = () => null; + } + + componentDidCatch(error: Error) { + Logger.error(error); + // This is called by React when an error occurs during rendering, so save the error and stop + // rendering for now + this.setState({ error, attemptRender: false }); + } + + render() { + const { error, attemptRender } = this.state; + const { children } = this.props; + + return ( + + {attemptRender && this._renderChildren(children)} + {error && this._renderOverlay(error)} + + ); + } + + _renderChildren(children: React.ReactNode) { + return {children}; + } + + _renderOverlay(error: Error) { + return ( + + + + Did you know: + You can turn off automatic updates under Devices in the footer? + + + + {this._renderErrorMessage(error)} + {this._renderStackTrace(error)} + + + ); + } + + _renderErrorMessage(error: Error) { + const lines = error.message.split(/\r\n?|\n/); + const children = []; + let text = ''; + let isCode = false; + lines.forEach((line) => { + if (!line.trim()) return; + line = line.replace(/module:\/+/g, '').replace(/\.js\.js/g, '.js'); + if (line.match(isCode ? /\|/ : /^\s*\d+\s*\|/)) { + if (text && !isCode) { + children.push( + + {text} + + ); + text = ''; + } + isCode = true; + } else if (isCode) { + children.push( + + {text} + + ); + isCode = false; + text = ''; + } + if (text) { + text = `${text}\n${line}`; + } else { + text = line; + } + }); + if (text) { + children.push( + + {text} + + ); + } + + return {children}; + } + + _renderStackTrace(error: Error) { + return {prettyStack(error)}; + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'transparent', + }, + children: { + flex: 1, + }, + overlay: { + position: 'absolute', + top: 28 + Constants.statusBarHeight, + bottom: 28, + left: 28, + right: 28, + backgroundColor: '#f44336', + borderColor: '#922820', + borderRadius: 16, + borderTopWidth: 0, + borderLeftWidth: 0.4, + borderRightWidth: 0.4, + borderBottomWidth: 1.2, + shadowColor: 'black', + shadowOffset: { width: 0, height: 12 }, + shadowOpacity: 0.7, + shadowRadius: 42, + padding: 8, + }, + header: { + paddingBottom: 8, + paddingHorizontal: 8, + borderBottomWidth: 2, + borderBottomColor: 'white', + flexDirection: 'row', + }, + title: { + color: 'white', + }, + titleBold: { + fontWeight: 'bold', + }, + content: { backgroundColor: 'transparent' }, + contentContainer: { + padding: 8, + }, + message: { + marginBottom: 16, + }, + plain: { + color: 'white', + fontSize: 16, + fontWeight: 'bold', + marginBottom: 8, + }, + code: { + fontFamily: Platform.OS === 'ios' ? 'Courier New' : 'monospace', + color: 'white', + fontSize: 15, + fontWeight: 'bold', + marginBottom: 8, + }, + stack: { + color: 'white', + fontSize: 14, + }, +}); diff --git a/packages/snack-runtime/src/Files.tsx b/packages/snack-runtime/src/Files.tsx new file mode 100644 index 00000000..5da81ce3 --- /dev/null +++ b/packages/snack-runtime/src/Files.tsx @@ -0,0 +1,167 @@ +// Maintains the state of the user's 'local' Snack files (including assets), updating them with +// diffs etc. Does NOT deal with evaluating code, that happens in `Modules`. + +import { applyPatch } from 'diff'; +import Constants from 'expo-constants'; + +type Message = { + type: 'CODE'; + diff: { [key: string]: string }; + s3url: { [key: string]: string }; + metadata?: { + webHostname?: string; + }; +}; + +type File = { + isAsset: boolean; + isBundled?: boolean; + s3Url: string | undefined; + s3Contents: string | undefined; + diff: string | undefined; + contents: string | undefined; +}; + +const files: { [key: string]: File } = {}; + +// Initialize by reading from `extra.code` in manifest if present +const manifest = Constants.manifest; + +if (manifest?.extra?.code) { + const initialCode = manifest.extra.code; + Object.keys(initialCode).forEach((path) => { + const initialFile = initialCode[path]; + const isAsset = initialFile.type === 'ASSET'; + files[path] = { + isAsset, + s3Url: isAsset ? initialFile.contents : undefined, + s3Contents: undefined, + diff: undefined, + contents: !isAsset ? initialFile.contents : undefined, + }; + }); +} + +// Update files -- currently only handles updates from remote `message`s. Returns an array +// containing paths of changed files. +export const update = async ({ message }: { message: Message }) => { + if (message && message.type === 'CODE') { + const { diff: newDiffs, s3url: newS3Urls } = message; + const changedPaths = []; + await Promise.all( + Object.keys(newDiffs).map(async (path) => { + const newDiff = newDiffs[path]; + if (newS3Urls[path]) { + // Has content in S3? + const newS3Url = newS3Urls[path]; + if (newS3Url.includes('~asset') || newS3Url.includes('%7Easset')) { + // Asset? Only save the S3 URL. + if (!files[path] || files[path].s3Url !== newS3Url) { + files[path] = { + ...files[path], + isAsset: true, + isBundled: false, + s3Url: newS3Url, + s3Contents: undefined, + diff: undefined, + contents: undefined, + }; + changedPaths.push(path); + } + } else { + // Ensure cached S3 contents and diff are up to date, compute contents if any changes + // + // TODO(nikki): This case needs to be tested + if ( + !files[path] || + files[path].s3Url !== newS3Url || + files[path].diff !== newDiffs[path] + ) { + const newS3Contents = + files[path] && files[path].s3Url === newS3Url + ? (files[path].s3Contents as string) + : await ( + await fetch(newS3Url, { + headers: { + 'Content-Type': 'text/plain', + }, + }) + ).text(); + files[path] = { + ...files[path], + isAsset: false, + isBundled: + path === 'reason.js' && + message.metadata && + message.metadata.webHostname === 'reason-snack.surge.sh', + s3Url: newS3Url, + s3Contents: newS3Contents, + diff: newDiff, + contents: applyPatch(newS3Contents, newDiff), + }; + changedPaths.push(path); + } + } + } else { + // No content on S3 -- ensure cached diff is up to date, compute contents if any changes + if (!files[path] || files[path].diff !== newDiffs[path]) { + files[path] = { + ...files[path], + isAsset: false, + isBundled: false, + s3Url: undefined, + s3Contents: undefined, + diff: newDiff, + // Remove the first newline from `applyPatch`, since this is an non-existing newline + contents: applyPatch('', newDiff).replace('\n', ''), + }; + changedPaths.push(path); + } + } + }) + ); + + for (const path in files) { + // Delete removed files + if (!newDiffs.hasOwnProperty(path)) { + delete files[path]; + changedPaths.push(path); + } + } + + return changedPaths; + } + + throw new Error("`Files.update(...)` only accepts 'CODE' `message`s"); +}; + +// Return the entrypoint path +export const entry = () => { + const names = ['index.js', 'index.ts', 'index.tsx', 'App.tsx', 'App.ts', 'App.js', 'app.js']; + + for (const name of names) { + if (files[name]) { + return name; + } + } + + return 'App.js'; +}; + +// Return information about a file in the form `{ isAsset: true, s3Url }` or +// `{ isAsset: false, contents }`. Returns `undefined` if no such file. +export const get = (path: string) => { + if (!files[path]) { + return undefined; + } + + const { isAsset, isBundled, s3Url, contents } = files[path]; + + if (isAsset) { + return { isAsset, isBundled, s3Url }; + } else { + return { isAsset, isBundled, contents }; + } +}; + +export const list = () => Object.keys(files); diff --git a/packages/snack-runtime/src/LoadingView.tsx b/packages/snack-runtime/src/LoadingView.tsx new file mode 100644 index 00000000..b1459b45 --- /dev/null +++ b/packages/snack-runtime/src/LoadingView.tsx @@ -0,0 +1,68 @@ +import * as React from 'react'; +import { View, StyleSheet, Animated } from 'react-native'; + +type Props = object; + +type State = { + opacity: Animated.Value; + inputRange: number[]; + outputRange: number[]; +}; + +export default class LoadingView extends React.PureComponent { + state: State = { + opacity: new Animated.Value(0), + inputRange: Array(31) + .fill(0) + .map((_, index) => index), + outputRange: Array(31) + .fill(0) + .map((_, index) => (index % 2 ? 0.1 : 1)), + }; + + componentDidMount() { + const { opacity, inputRange } = this.state; + Animated.loop( + Animated.sequence([ + Animated.timing(opacity, { + toValue: inputRange.length - 1, + duration: (inputRange.length - 1) * 1000, + useNativeDriver: true, + }), + Animated.timing(opacity, { + toValue: 0, + duration: (inputRange.length - 1) * 1000, + useNativeDriver: true, + }), + ]) + ).start(); + } + + render() { + const { opacity, inputRange, outputRange } = this.state; + return ( + + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'white', + }, +}); diff --git a/packages/snack-runtime/src/LoadingView.web.tsx b/packages/snack-runtime/src/LoadingView.web.tsx new file mode 100644 index 00000000..b2ed99fc --- /dev/null +++ b/packages/snack-runtime/src/LoadingView.web.tsx @@ -0,0 +1,40 @@ +import * as React from 'react'; +import { View, StyleSheet, Image } from 'react-native'; + +export default function LoadingView() { + return ( + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'white', + justifyContent: 'center', + alignItems: 'center', + }, + image: { + width: 100, + height: 100, + resizeMode: 'contain', + opacity: 0, + animationDelay: '2s', + animationDuration: '2s', + transitionTimingFunction: 'ease-out', + animationIterationCount: 'infinite', + animationKeyframes: [ + { + '0%': { opacity: 0.1 }, + '48%': { opacity: 0.5 }, + '52%': { opacity: 0.5 }, + '100%': { opacity: 0.1 }, + }, + ], + }, +}); diff --git a/packages/snack-runtime/src/Logger.tsx b/packages/snack-runtime/src/Logger.tsx new file mode 100644 index 00000000..b97fb949 --- /dev/null +++ b/packages/snack-runtime/src/Logger.tsx @@ -0,0 +1,24 @@ +import { originalConsole } from './Console'; +import { isVerbose } from './NativeModules/Linking'; + +const verbose = isVerbose(); + +const logger = + (type: string, color: string, textColor?: string) => + (...messages: unknown[]) => { + if (verbose) { + originalConsole.log( + `%c ${type.toUpperCase()} `, + `background: ${color}; color: ${textColor ?? '#fff'}`, + ...messages + ); + } + }; + +export const info = logger('info', '#2196f3'); +export const warn = logger('warn', '#FF9800'); +export const error = logger('error', '#f44336'); +export const comm = logger('comm', '#DBD64E'); +export const comm_recv = logger('comm', '#DBD64E', '#000'); +export const comm_error = logger('comm', '#f44336'); +export const module = logger('module', '#DB14C7'); diff --git a/packages/snack-runtime/src/Messaging.tsx b/packages/snack-runtime/src/Messaging.tsx new file mode 100644 index 00000000..4e273993 --- /dev/null +++ b/packages/snack-runtime/src/Messaging.tsx @@ -0,0 +1,60 @@ +// Currently maintains one PubNub subscription for communication with a remote machine + +import Constants from 'expo-constants'; +import { Platform } from 'react-native'; + +import type { + Device, + RuntimeMessagePayload, + RuntimeTransport, +} from './transports/RuntimeTransport'; + +let transport: RuntimeTransport | null = null; + +// Device metadata that is sent with every message from us +const device: Device = { + id: '', // async, populated in init + name: Constants.deviceName, + platform: Platform.OS, +}; + +export const init = (deviceId: string, testTransport: string | null | undefined) => { + device.id = deviceId; + let transportClass; + if (Platform.OS === 'web') { + transportClass = require('./transports/RuntimeTransportImplWebPlayer').default; + } else if (testTransport === 'trafficMirroring') { + transportClass = require('./transports/RuntimeTrafficMirroringTransport').default; + } else { + transportClass = require('./transports/RuntimeTransportImplSocketIO').default; + } + transport = new transportClass(device); +}; + +export const unsubscribe = () => { + if (!transport) { + throw new Error('Transport not initialized, call `Messaging.init()` first.'); + } + transport.unsubscribe(); +}; + +export const subscribe = ({ channel }: { channel: string }) => { + if (!transport) { + throw new Error('Transport not initialized, call `Messaging.init()` first.'); + } + transport.subscribe(channel); +}; + +export const listen = (listener: (payload: RuntimeMessagePayload) => void) => { + if (!transport) { + throw new Error('Transport not initialized, call `Messaging.init()` first.'); + } + transport.listen(listener); +}; + +export const publish = (message: object) => { + if (!transport) { + throw new Error('Transport not initialized, call `Messaging.init()` first.'); + } + transport.publish(message); +}; diff --git a/packages/snack-runtime/src/Modules.tsx b/packages/snack-runtime/src/Modules.tsx new file mode 100644 index 00000000..d69e7d9b --- /dev/null +++ b/packages/snack-runtime/src/Modules.tsx @@ -0,0 +1,903 @@ +// Maintain JavaScript modules forming the runtime state of the user's Snack application. This +// includes modules generated by 'local' files and assets, pre-loaded modules such as 'react' and +// 'expo', and modules generated by references to npm packages. +// +// This is implemented using SystemJS, with URIs of the form `module://...` internally. SystemJS +// lets us hook in our own `fetch` (given a URI, return sources for it) and `translate` (transform +// source code to 'eval'able form) steps by creating a 'plugin' (see +// https://github.com/systemjs/systemjs/blob/master/docs/creating-plugins.md). We also hook into the +// `eval` step by polyfilling node's `vm.runInThisContext(...)`. + +import escapeStringRegexp from 'escape-string-regexp'; +import { Asset } from 'expo-asset'; +import Constants from 'expo-constants'; +import path from 'path'; +import React from 'react'; +import { Platform, PixelRatio } from 'react-native'; +import * as GestureHandler from 'react-native-gesture-handler'; +// @ts-ignore: Could not find a declaration file for module 'react-native-reanimated/plugin' +import Reanimated2Plugin from 'react-native-reanimated/plugin-standalone'; +import * as babel from 'snack-babel-standalone'; +import * as context from 'snack-require-context'; +// Highest supported version of source-map is 0.6.1. As of 7.x source-map uses +// web-assembly which is not yet supported on react-native. +import { SourceMapConsumer, RawSourceMap } from 'source-map'; + +import System from '../vendor/system.src'; +import * as Files from './Files'; +import * as Logger from './Logger'; +import AssetRegistry from './NativeModules/AssetRegistry'; +import FileSystem from './NativeModules/FileSystem'; +import * as Profiling from './Profiling'; +import aliases from './aliases'; + +type Dependencies = { + [key: string]: { resolved?: string; version: string; handle?: string }; +}; + +type Load = { + source: string; + address: string; + skipTranslate?: boolean; + metadata: { + sourceMap?: RawSourceMap; + }; +}; + +const SNACKAGER_CDN_STAGING = 'https://ductmb1crhe2d.cloudfront.net'; +const SNACKAGER_CDN_PROD = 'https://d37p21p3n8r8ug.cloudfront.net'; + +// This is super hacky +// This avoids a bug where for some reason `react` is `undefined` in a dependency +// Adding the __esModule property basically bypasses the extra defineProperty stuff that webpack does +// And then magically it works +// The React module can be imported as both default export and named exports will still work +// @ts-ignore +React.__esModule = true; +// @ts-ignore +React.default = React; + +// client caches dependency resolutions locally, increment the cachebuster to invalidate existing caches +const cacheBuster = '2'; + +// We access this for its side effects because it is lazily loaded. +// See https://github.com/expo/expo-asset/blob/6698f2a6dc657a0b12bf29a22e62c83c9fd8ed3a/src/Asset.js#L186-L190 +Asset; // eslint-disable-line no-unused-expressions,@typescript-eslint/no-unused-vars + +// Load react-native-gesture-handler, so RCTView's directEventTypes are set before bridge is fully initialized. +// See https://github.com/kmagiera/react-native-gesture-handler/blob/master/GestureHandler.js#L46 +GestureHandler; // eslint-disable-line no-unused-expressions,@typescript-eslint/no-unused-vars + +// Set the `__DEV__` variable to `false` because we are running a context without Metro. +// Unfortunately, this is handled by the bundler such as Metro or Webpack. +// That's not available inside the Snack Runtime itself. +// see: https://twitter.com/jamonholmgren/status/1561798978269618177 +// @ts-expect-error +global['__DEV__'] = false; + +// Maintain project-level dependency state in the `ExpoDependencyV2` format. +// See https://github.com/expo/universe/blob/64a2eab474d11614c5b403f09747fdb112769a39/libraries/snack-sdk/src/types.js#L114-L126. + +const manifest = Constants.manifest; +let projectDependencies: Dependencies = manifest?.extra?.dependencies ?? {}; + +// This keeps track of all generated virutal modules, and the files it includes. +// Unfortunately, asking SystemJS seems to return no loaded modules. + +// Keep track of any module included in a virtual module, and what virtual module is including it. +// This is a reversed map to efficiently find out which virtual modules need to be updated on change. +// The data stored in this is the `SnackFilePath -> [VirtualModulePath]` mapping. +const virtualModules: Map> = new Map(); +const allVirtualModules: Set = new Set(); + +// replacement for String.prototype.startsWith with consistent behaviour on iOS & Android +const startsWith = (base: string, search: string) => String(base).indexOf(String(search)) === 0; + +export const updateProjectDependencies = async (newProjectDependencies: Dependencies) => { + // Flush loaded modules that map to dependencies whose resolved version changed + const removedOrChangedDependencies = Object.keys(projectDependencies).filter( + (name) => + !newProjectDependencies[name] || + newProjectDependencies[name].resolved !== projectDependencies[name].resolved + ); + const addedDependencies = Object.keys(newProjectDependencies).filter( + (name) => !projectDependencies[name] + ); + const changedDependencies = removedOrChangedDependencies.concat(addedDependencies); + if (changedDependencies.length) { + Logger.module( + 'Changed dependencies', + changedDependencies.map( + (name) => + `${name} (${ + newProjectDependencies[name] + ? projectDependencies[name] + ? `${projectDependencies[name].resolved} -> ${newProjectDependencies[name].resolved}` + : newProjectDependencies[name].resolved + : 'removed' + })` + ) + ); + } + const removedOrChangedUris = removedOrChangedDependencies.map((name) => `module://${name}`); + await flush({ changedUris: removedOrChangedUris }); + projectDependencies = newProjectDependencies; + return changedDependencies.map(sanitizeModule); +}; + +// SystemJS fetch pipeline +const _get = (header: { [key: string]: string }, value: string) => + header?.hasOwnProperty(value) ? header[value] : null; + +const fetchPipeline = async (load: Load) => { + return await Profiling.section(`\`Modules.fetchPipeline('${load.address}')\``, async () => { + const uri = load.address; + + if (!startsWith(uri, 'module://')) { + throw new Error(`Invalid module URI '${uri}', must start with 'module://'`); + } + + // Handle virtual modules that enable `require.context` usage + if (context.pathIsVirtualModule(uri)) { + const contextUri = context.sanitizeFilePath(uri.replace(/(\.js)+$/, '')); + const contextRequest = context.convertVirtualModulePathToRequest(contextUri); + const contextFiles = context.resolveContextFiles(contextRequest, Files.list()); + + // The `require.context` package returns evaluatable JS code + load.skipTranslate = true; + // Register the virtual module to flush it later on file changes + virtualModules.set(uri, new Set(Object.values(contextFiles))); + allVirtualModules.add(uri); + + // To load modules by absolute path, we need to add `module://` before importing them + for (const fileName in contextFiles) { + // Add the `module://` prefix for system js, to indicate an absolute path + contextFiles[fileName] = `module://${contextFiles[fileName]}`; + + // Register the dependent of the virtual module + if (virtualModules.has(contextFiles[fileName])) { + virtualModules.get(contextFiles[fileName])!.add(uri); + } else { + virtualModules.set(contextFiles[fileName], new Set([uri])); + } + } + + return context.createContextModuleTemplate(contextFiles); + } + + try { + // The resolver always adds a JS extension + // We strip it out to get the correct path + const path = uri.replace(/^module:\/\//, '').replace(/\.js$/, ''); + const file = Files.get(path); + + if (file) { + const { isAsset, isBundled, s3Url, contents } = file; + const isJson = /\.json$/i.test(path); + + if (isAsset && s3Url) { + const isImage = /\.(bmp|png|jpg|jpeg|gif|svg|webp|tiff|webp)$/i.test(path.toLowerCase()); + + // Non image assets (eg fonts, audio/video files) are served directly from s3 on web + if (!isImage && Platform.OS === 'web') { + return `module.exports = ${JSON.stringify(s3Url)};`; + } + + // Asset? Register its metadata with React Native's `AssetRegistry`, which gives us a + // numeric `assetId`, then resolve to a module that exports that `assetId`. + const hash = s3Url.replace(/.*(~|%7E)asset\//, ''); + + let metaData: { [key: string]: string | null } | null = null; + let type, width, height; + + // Fetch meta-data like type, width and height + try { + const cacheUri = `${FileSystem.cacheDirectory}snack-asset-metadata-${cacheBuster}-${hash}.json`; + const { exists } = await FileSystem.getInfoAsync(cacheUri); + if (exists) { + const contents = await FileSystem.readAsStringAsync(cacheUri); + metaData = JSON.parse(contents); + Logger.module( + 'Loaded asset metadata', + s3Url, + `from cache ${contents ? contents.length : undefined} bytes` + ); + } else { + Logger.module('Fetching asset metadata', s3Url, '...'); + const response = await fetch(s3Url, { + method: 'HEAD', + mode: Platform.OS === 'web' ? 'cors' : 'no-cors', + }); + + if (response.headers?.hasOwnProperty('map')) { + // @ts-expect-error: expression of type '"map"' can't be used to index type 'Headers' + const mapHeaders = response.headers['map']; + if (mapHeaders) { + metaData = { + type: _get(mapHeaders, 'x-amz-meta-type'), + width: _get(mapHeaders, 'x-amz-meta-width'), + height: _get(mapHeaders, 'x-amz-meta-height'), + }; + } + } else if (response.headers.get('x-amz-meta-type')) { + metaData = { + type: response.headers.get('x-amz-meta-type'), + width: response.headers.get('x-amz-meta-width'), + height: response.headers.get('x-amz-meta-height'), + }; + } + if (metaData) { + FileSystem.writeAsStringAsync(cacheUri, JSON.stringify(metaData)).then( + undefined, + (error) => { + Logger.error('Failed to store asset metadata in cache', error); + } + ); + } + } + } catch (e) { + Logger.error('Error fetching metadata', e.message); + } + + if (metaData) { + // Get the mimetype from the file extension + type = metaData.type || path.split('.').pop(); // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing + + // Get the dimensions of the image from the headers + width = parseFloat(metaData.width ?? ''); + height = parseFloat(metaData.height ?? ''); + + // If the filename has a scale, adjust the height and width + const match = path.match(/^.+@(\d+(\.\d+)?)x(\.[a-z]+)?\.[^.]+$/); + + if (match) { + const scale = parseFloat(match[1]); + + // Divide the dimensions by specified scale + // For example, if the image is named file@3x.png, divide by 3 + width /= scale; + height /= scale; + } + } + + const assetId = AssetRegistry.registerAsset({ + hash, + name: hash, + scales: [1], + fileHashes: [hash], + httpServerLocation: 'https://snack-code-uploads.s3-us-west-1.amazonaws.com/~asset', + uri: s3Url, + ...(metaData + ? { + width, + height, + // Specifying the type causes the url to be malformed using `react-native-web` + // Also see patches/react-native-web+0.13.13.patch + type: Platform.OS === 'web' ? undefined : type, + } + : null), + }); + Logger.module('Registered asset', s3Url, 'as number', assetId); + return `module.exports = ${assetId};`; + } else if (isJson) { + return `module.exports = ${contents}`; + } else { + // Regular JavaScript file? Just return the code! + load.skipTranslate = isBundled; + return contents; + } + } + + // Project-level dependency? + if (projectDependencies[path]) { + const dependency = projectDependencies[path]; + + // Based on https://github.com/expo/universe/blob/055b1f83685a0c4dd45c3b27a99114de0233c1b6/apps/snack/src/modules/ModuleManager.js#L191-L210 + const name = path[0] + path.slice(1).replace(/@[^@]+$/, ''); + const version = dependency.resolved ?? dependency.version; + + // The handle may not exist for old snacks. In that case, construct it from name and version + const handle = dependency.handle ?? `${name}@${version}`.replace(/\//g, '~'); + + // Download bundle, keeping a local cache + let bundle: string | undefined; + const cacheHandle = handle.replace(/\//g, '~'); + const cacheUri = `${FileSystem.cacheDirectory}snack-bundle-${cacheBuster}-${cacheHandle}-${Platform.OS}.js`; + const { exists } = await FileSystem.getInfoAsync(cacheUri); + if (exists) { + bundle = await FileSystem.readAsStringAsync(cacheUri); + Logger.module( + 'Loaded dependency', + cacheHandle, + `from cache ${bundle ? bundle.length : undefined} bytes` + ); + } else { + // In development, try fetching from staging cloudfront first + const cloudFrontUrls = + Constants.manifest?.extra?.cloudEnv !== 'production' + ? [SNACKAGER_CDN_STAGING, SNACKAGER_CDN_PROD] + : [SNACKAGER_CDN_PROD]; + for (const url of cloudFrontUrls) { + const fetchFrom = `${url}/${handle}-${Platform.OS}/bundle.js`; + + try { + Logger.module('Fetching dependency', fetchFrom, '...'); + + const res = await fetch(fetchFrom); + + if (res.ok) { + bundle = await res.text(); + } else { + throw new Error(`Request failed with status ${res.status}: ${res.statusText}`); + } + } catch (e) { + if (url !== SNACKAGER_CDN_STAGING) { + Logger.error('Error fetching bundle', fetchFrom, e); + throw e; + } else { + Logger.warn( + 'Dependency could not be loaded from staging, trying production ...', + handle + ); + } + } + + if (bundle) { + Logger.module( + 'Fetched dependency', + fetchFrom, + `storing in cache ${bundle.length} bytes` + ); + break; + } + } + + if (!bundle) { + throw new Error(`Unable to fetch module ${handle} for ${Platform.OS}.`); + } + + FileSystem.writeAsStringAsync(cacheUri, bundle).then(undefined, (error) => { + Logger.error('Failed to store dependency in cache', error); + }); + } + + // The package server uses webpack's 'commonjs' format which puts root module exports in + // `exports[]`, so re-export in a way understood by SystemJS. Also, the bundle is + // already transformed, so have our SystemJS translate pipeline skip it. + load.skipTranslate = true; + return `var __SNACK_PACKAGE_EXPORTS = {}; + var __SNACK_PACKAGE_MODULE = { exports: __SNACK_PACKAGE_EXPORTS }; + (function (module, exports) { ${bundle} })( + __SNACK_PACKAGE_MODULE, + __SNACK_PACKAGE_EXPORTS + ); + module.exports = __SNACK_PACKAGE_EXPORTS[${JSON.stringify(path)}];`; + } + + // Nothing worked... + throw new Error(`Unable to resolve module '${uri}'`); + } catch (e) { + // SystemJS still wants us to return something, so return an empty module that just throws the + // error... + return `throw new Error(${JSON.stringify(e.message)});`; + } + }); +}; + +// SystemJS translate pipeline + +const sourceMapConsumers: { [key: string]: SourceMapConsumer } = {}; +const transformCache: { + [key: string]: { source: string; result: ReturnType | null }; +} = {}; + +const translatePipeline = async (load: Load) => { + return await Profiling.section(`\`Modules.translatePipeline('${load.address}')\``, async () => { + if (load.skipTranslate) { + return load.source; + } + + // The resolver always adds a JS extension + // We strip it out to so Babel can transpile TS files + const filename = load.address.replace(/\.js$/, ''); + + try { + const transformed = Profiling.sectionSync( + `\`Modules.translatePipeline('${load.address}')\` \`babel.transform()\``, + () => { + const cached = transformCache[filename]; + + if (cached && cached.source === load.source) { + return cached.result; + } + + Logger.module('Transpiling', sanitizeModule(filename), '...'); + + const result = babel.transform(load.source, { + presets: ['module:metro-react-native-babel-preset'], + plugins: [ + ['@babel/plugin-transform-async-to-generator'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-syntax-dynamic-import'], + ['@babel/plugin-proposal-dynamic-import'], + ['@babel/plugin-transform-react-jsx', { runtime: 'automatic' }], + [ + context.snackRequireContextVirtualModuleBabelPlugin, + // We need to resolve the requested context directory in the user-provided code + { directoryResolution: 'relative' }, + ], + ...(load.source.includes('react-native-reanimated') || load.source.includes('worklet') + ? [Reanimated2Plugin] + : []), + ], + moduleIds: false, + sourceMaps: true, + compact: false, + filename, + sourceFileName: filename, + }); + + transformCache[filename] = { source: load.source, result }; + + Logger.module( + 'Transpiled', + sanitizeModule(filename), + `${result?.code ? result.code.length : '???'} bytes` + ); + + return result; + } + ); + // @ts-ignore + load.metadata.sourceMap = transformed.map; + sourceMapConsumers[load.address] = await Profiling.section( + `\`Modules.translatePipeline('${load.address}')\` \`new SourceMapConsumer()\``, + async () => + await new SourceMapConsumer( + // @ts-ignore + transformed.map + ) + ); + return transformed!.code; + } catch (e) { + // SystemJS still wants us to return something, so return an empty module that just throws + // the error... + return `throw new Error(${JSON.stringify(e.message)});`; + } + }); +}; + +export const unmap = ({ + sourceURL, + line, + column, +}: { + sourceURL: string; + line: number; + column: number; +}) => { + // SystemJS may add '!transpiled' at the end of the URL + const consumer = sourceMapConsumers[sourceURL.replace(/!transpiled$/, '')]; + if (consumer) { + const result = consumer.originalPositionFor({ line, column }); + if (result) { + return { + ...result, + path: sourceURL + .replace(/!transpiled$/, '') + .replace(/^module:\/\//, '') + .replace(/.([a-z]+).js$/, '.$1'), + }; + } + } + + return undefined; +}; + +// SystemJS eval pipeline +// @ts-ignore +global.evaluate = (src, options: { filename?: string } = {}) => { + return Profiling.section(`\`Modules.evalPipeline('${options.filename}')\``, () => { + // @ts-ignore + if (global.globalEvalWithSourceUrl) { + // This function will let JavaScriptCore know about the URL of the source code so that errors + // and stack traces are annotated. Thanks, React Native devs! We do need a top-level try/catch + // to prevent a native crash if `eval`ing throws an exception though... + // @ts-ignore + global.__SNACK_EVAL_EXCEPTION = null; + src = `(function () { try { ${src}\n } catch (e) { this.__SNACK_EVAL_EXCEPTION = e; } })();`; + + // @ts-ignore + const r = global.globalEvalWithSourceUrl(src, options.filename); + + // @ts-ignore + if (global.__SNACK_EVAL_EXCEPTION) { + // @ts-ignore + const e = global.__SNACK_EVAL_EXCEPTION; + + // @ts-ignore + global.__SNACK_EVAL_EXCEPTION = null; + + throw e; + } + return r; + } + // eslint-disable-next-line no-eval + return (0, eval)(src); + }); +}; + +// Initialize the module system. This basically consists of initializing and configuring SystemJS. +const _initialize = async () => { + // SystemJS config. Create and use a plugin with our pipeline, turn on default '.js' extensions + // and tracing (makes SystemJS collect dependency info). + await System.set( + 'systemjs-expo-snack-plugin', + System.newModule({ translate: translatePipeline, fetch: fetchPipeline }) + ); + await System.config({ + packages: { + '.': { + defaultExtension: 'js', + }, + }, + meta: { + '*.js': { + format: 'cjs', + loader: 'systemjs-expo-snack-plugin', // Defined above + }, + }, + }); + + System.trace = true; // Dependency tracking + + // Pre-loaded modules + await Promise.all( + Object.keys(aliases).map( + async (key) => + await System.set(key, System.newModule({ default: aliases[key], __useDefault: true })) + ) + ); + + // Special handling for vector-icons to allow deep imports + const vectorIcons = require('@expo/vector-icons'); + const vectorIconsModule = System.newModule(vectorIcons); + + await System.set('@expo/vector-icons', vectorIconsModule); + await System.set('react-native-vector-icons', vectorIconsModule); + + await Promise.all( + Object.keys(vectorIcons).map(async (name) => { + const iconSet = vectorIcons[name]; + iconSet.default = iconSet.default ?? iconSet; + const iconSetModule = System.newModule({ default: iconSet, __useDefault: true }); + + await System.set(`@expo/vector-icons/${name}`, iconSetModule); + await System.set(`react-native-vector-icons/${name}`, iconSetModule); + }) + ); + + // Fix SystemJS path normalization to handle Snack-related special cases + const oldResolve = System.resolve; + + System.resolve = async function (url: string, baseUrl?: string) { + // Relative URI? Use 'path.normalize(...)' to deal with '..'s properly. + if (baseUrl && startsWith(url, '.')) { + const basePath = baseUrl.replace(/^module:\/\//, ''); + url = 'module://' + path.normalize(`${path.dirname(basePath)}/${url}`); + } + + // TODO(cedric): figure out why importing `module://components` results in + // `module:/components`, and is resolved as `module://omponents`. + // This is a dirty workaround to make sure its always resolved correctly. + if (context.pathIsVirtualModule(url)) { + return await oldResolve.call(this, url.replace(/^module:\/\/?/, 'module://'), baseUrl); + } + + if (/^module:\/\//.test(url)) { + // List of supported extensions in priority order + const extensions = ['.tsx', '.ts', '.js']; + + // List of supported platforms in priority order + // The item that comes last has the highest priority + const platforms = + Platform.OS === 'web' + ? [Platform.OS, `${Platform.OS}.expo`] + : // We should resolve `.native` only for native platforms and not for web + ['native', Platform.OS, 'native.expo', `${Platform.OS}.expo`]; + + // The resolved path after checking the list of files + let resolved; + + const basename = url.replace(/^module:\/\//, ''); + + // Check the files with and without an extension + // This is necessary because it's possible to import JS files without the extension + for (const suffix of [...extensions, '']) { + const filename = basename + suffix; + const ext = filename.split('.').pop() as string; + + // We also take the scale into account for images + const isImage = /^(bmp|gif|jpg|jpeg|png|psd|tiff|webp|svg)$/i.test(ext); + + const regex = new RegExp( + `^${escapeStringRegexp(filename.replace(/\.[^.]+$/i, ''))}(${ + isImage ? '@\\d+(\\.\\d+)?x' : '()' + })?(\\.([a-z]+(\.expo)?))?\\.${ext}$` // eslint-disable-line no-useless-escape + ); + + // Build a map of files according to the scale and platform + // The map will look something like this: + // { + // 1: { path: image.png, platform: 'android' }, + // 1.5: { path: image@1.5x.png, platform: 'android' }, + // 2: { path: image@2x.png, platform: 'android' }, + // } + const map = Files.list().reduce((acc, curr) => { + const match = curr.match(regex); + + if (match) { + // eslint-disable-next-line no-unused-vars + const [, scaleString, , , platform] = match; + + // If file doesn't have a scale, default to 1 + // This can happen for asset files without scale, or JS files + const scale = scaleString ? parseFloat(scaleString.substr(1)) : 1; + + if (platform && !platforms.includes(platform)) { + // If the file has a platform, but it's not the current platform, + // return what we had + return acc; + } + + if ( + acc[scale] && + platforms.indexOf(acc[scale].platform) > platforms.indexOf(platform) + ) { + // If we have already found the platform with a higher priority than current platform, + // return what we had + return acc; + } + + return { ...acc, [scale]: { path: curr, platform } }; + } + + return acc; + }, {} as { [key: string]: { path: string; platform: string } }); + + if (Object.keys(map).length) { + // Get the device's pixel density and find the closest bigger matching scale + const scale = PixelRatio.get(); + const closest = Object.keys(map) + .map((x) => Number(x)) + .sort((a, b) => a - b) + .reduce((result, curr) => (result >= scale ? result : curr)); + + if (map[closest] && Files.get(map[closest].path)) { + resolved = map[closest].path; + break; + } + } + + // Check if file matching the exact path exist + if (!resolved && Files.get(filename)) { + // Local file, extension given + resolved = filename; + break; + } + } + + // If we couldn't resolve the file normally, check in directories + if (!resolved) { + let index = 'index'; + let ext = ''; + + // If the directory contains a package.json file, get it's main field + // Otherwise use index as the fallback name + if (Files.get(basename + '/package.json')) { + try { + const pack = JSON.parse( + (Files.get(basename + '/package.json') ?? { contents: '' }).contents || '{}' // eslint-disable-line @typescript-eslint/prefer-nullish-coalescing + ); + index = pack['react-native'] || pack['main'] || 'index'; + ext = index.split('.').pop()!; + + // Remove any leading './' from the file path + index = index.replace(/^\.\//, ''); + } catch { + // Ignore error + } + } + + // If the main file has an extension, try to resolve with it first + if (ext) { + for (const platform of platforms) { + const f = basename + '/' + index.replace(/\.[^.]$/, '') + '.' + platform + '.' + ext; + + if (Files.get(f)) { + resolved = f; + break; + } + } + } + + // If it's still not resolved, try to resolve the exact name + if (!resolved) { + const f = basename + '/' + index; + + if (Files.get(f)) { + resolved = f; + } + + for (const suffix of extensions) { + const f = basename + '/' + index + suffix; + + if (Files.get(f)) { + resolved = f; + break; + } + } + } + + // If it's still not resolved, try to resolve with predefined extensions + if (!resolved) { + for (const suffix of extensions) { + for (const platform of platforms) { + const f = basename + '/' + index + '.' + platform + suffix; + + if (Files.get(f)) { + resolved = f; + break; + } + } + } + } + } + + if (resolved) { + url = 'module://' + resolved; + } + + // Add a '.js' extension so that the SystemJS plugin handles this file + // This extra extension will be stripped in the fetch and transform pipeline + url += '.js'; + } + + return await oldResolve.call(this, url, baseUrl); + }; + + // Find dependents of modules with given names -- modules are dependents of themselves, skips + // modules that aren't loaded + System.dependents = async function (rootModuleNames: string[]): Promise { + // No trace yet? No dependent info... + if (!this.loads) { + return []; + } + + // Construct map such that `dependsOn[x][y] === true` iff. module with fully resolved url `y` is + // an immediate dependency of that with `x`, for all pairs of fully resolved module urls + const dependsOn: { [key: string]: { [key: string]: boolean } } = {}; + + await Promise.all( + Object.keys(this.loads).map((url) => { + dependsOn[url] = {}; + return this.loads[url].deps.map( + async (dep: string) => (dependsOn[url][await this.resolve(dep, url)] = true) + ); + }) + ); + + // Visit immediate dependents of `rootModuleNames` by post-order DFS, skipping modules that + // aren't loaded + const visited: { [key: string]: boolean } = {}; + const order: string[] = []; + + const visit = (url: string) => { + if (!visited[url]) { + visited[url] = true; + Object.keys(this.loads).forEach((other) => { + if (dependsOn[other][url]) { + visit(other); + } + }); + order.push(url); + } + }; + + if (!Array.isArray(rootModuleNames)) { + rootModuleNames = [rootModuleNames]; + } + const resolvedRootUrls = await Promise.all(rootModuleNames.map((name) => this.resolve(name))); + resolvedRootUrls.forEach(visit); + + return order; + }; + + System.keys = function () { + return this.registry.keys(); + }; +}; + +export function sanitizeModule(moduleName: string): string { + return moduleName.substring( + moduleName.startsWith('module://') ? 9 : 0, + moduleName.endsWith('.js.js') ? moduleName.length - 3 : moduleName.length + ); +} + +// Notify the system of changes that would affect modules -- currently accepts `changedPaths` (an +// array of paths to files in `Files` that have changed), and `changedUris` (an array of URIs to +// modules that have changed), returns URIs of all modules that have been flushed +let awaitLastFlush = Promise.resolve(); // Makes sure flushes happen serially +export const flush = async ({ + changedPaths = [], + changedUris = [], +}: { + changedPaths?: string[]; + changedUris?: string[]; +}) => { + awaitLastFlush = awaitLastFlush.then(async () => { + // Flush modules and their dependents -- skips modules that aren't loaded, returns URIs of all + // modules that have been flushed + const paths = [ + ...changedUris, + ...changedPaths.map((path) => `module://${path}${path.endsWith('.js') ? '' : '.js'}`), + ]; + + // Handle virtual module updates + const virtualModulePaths: Set = new Set(); + for (const path of paths) { + // Add affected virtual module paths for new files + // Note(cedric): it's a best effort check, it does not include transpiled-skipped files + if (!transformCache[`module://${path}${path.endsWith('.js') ? '' : '.js'}`]) { + Logger.module('New file detected, clearing all virtual modules.', path); + allVirtualModules.forEach((path) => virtualModulePaths.add(path)); + break; + } + + // Add affected virtual module paths for changed existing files + virtualModules.get(path)?.forEach((path) => virtualModulePaths.add(path)); + } + + const dependents = await System.dependents(paths); + let modules = [...dependents, ...virtualModulePaths, ...paths]; + modules = modules.filter((name, index) => System.has(name) && modules.indexOf(name) >= index); + if (modules.length) { + Logger.module('Unloading modules', modules.map(sanitizeModule)); + } + modules.forEach((dep: string) => System.delete(dep)); + + changedPaths.forEach( + (path) => delete transformCache[`module://${path}${path.endsWith('.js') ? '' : '.js'}`] + ); + }); + + return awaitLastFlush; +}; + +// Wrap initialize and guard that it is initialized once only +let waitForInitialize: Promise; +export const initialize = async () => { + waitForInitialize = waitForInitialize || _initialize(); + return waitForInitialize; +}; + +// Whether a module has been loaded, given its full URI +export const has = async (uri: string) => { + // Wait for any current flushes to complete + await awaitLastFlush; + return System.has(uri); +}; + +// Load a module +export const load = async (name: string, relativeTo?: string) => { + Logger.module('Loading root', sanitizeModule(name), '...'); + const res = await System.import(name, relativeTo); + Logger.module( + 'Loaded modules', + Array.from(System.keys()) + .filter((name) => name.toLowerCase().indexOf('app.js') >= 0 || name.indexOf('module://') >= 0) + .map(sanitizeModule) + ); + return res; +}; diff --git a/packages/snack-runtime/src/NativeModules/Amplitude.native.tsx b/packages/snack-runtime/src/NativeModules/Amplitude.native.tsx new file mode 100644 index 00000000..bfe0b405 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/Amplitude.native.tsx @@ -0,0 +1,11 @@ +// Disable Amplitude for SDK 46 +// TODO(cedric): find an alternative to send events +export default { + initializeAsync(_key: string) { + return Promise.resolve(true); + }, + + logEventWithPropertiesAsync(_type: string, _payload: object) { + return Promise.resolve(true); + }, +}; diff --git a/packages/snack-runtime/src/NativeModules/Amplitude.tsx b/packages/snack-runtime/src/NativeModules/Amplitude.tsx new file mode 100644 index 00000000..875ad9b5 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/Amplitude.tsx @@ -0,0 +1,9 @@ +export default { + initializeAsync(_key: string) { + return Promise.resolve(true); + }, + + logEventWithPropertiesAsync(_type: string, _payload: object) { + return Promise.resolve(true); + }, +}; diff --git a/packages/snack-runtime/src/NativeModules/AssetRegistry.native.tsx b/packages/snack-runtime/src/NativeModules/AssetRegistry.native.tsx new file mode 100644 index 00000000..da168165 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/AssetRegistry.native.tsx @@ -0,0 +1,3 @@ +import AssetRegistry from 'react-native/Libraries/Image/AssetRegistry'; + +export default AssetRegistry; diff --git a/packages/snack-runtime/src/NativeModules/AssetRegistry.tsx b/packages/snack-runtime/src/NativeModules/AssetRegistry.tsx new file mode 100644 index 00000000..1e877050 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/AssetRegistry.tsx @@ -0,0 +1,19 @@ +// @ts-ignore +import * as AssetRegistry from 'react-native-web/dist/modules/AssetRegistry'; + +export type PackagerAsset = { + hash: string; + name: string; + scales: number[]; + fileHashes: string[]; + httpServerLocation: string; + uri: string; + width?: number; + height?: number; + type?: string; +}; + +export default AssetRegistry as { + registerAsset(asset: PackagerAsset): number; + getAssetByID(assetID: number): PackagerAsset | undefined; +}; diff --git a/packages/snack-runtime/src/NativeModules/CanvasKit.tsx b/packages/snack-runtime/src/NativeModules/CanvasKit.tsx new file mode 100644 index 00000000..a8fb3791 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/CanvasKit.tsx @@ -0,0 +1,6 @@ +import type { CanvasKitInitOptions } from 'canvaskit-wasm'; + +// This function should only be executed from web, on native it's a stub. +export function loadCanvasKit(options?: CanvasKitInitOptions) { + return Promise.resolve(); +} diff --git a/packages/snack-runtime/src/NativeModules/CanvasKit.web.tsx b/packages/snack-runtime/src/NativeModules/CanvasKit.web.tsx new file mode 100644 index 00000000..136bf7a3 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/CanvasKit.web.tsx @@ -0,0 +1,61 @@ +// Types are monkey-patched in runtime/types/canvaskit-wasm.d.ts +import type { CanvasKit as CanvasKitType, CanvasKitInitOptions } from 'canvaskit-wasm'; +import { version } from 'canvaskit-wasm/package.json'; + +type CanvasKitInit = (options: CanvasKitInitOptions) => CanvasKitType; + +declare global { + // eslint-disable-next-line no-var + var CanvasKit: CanvasKitType | undefined; + // eslint-disable-next-line no-var + var CanvasKitInit: CanvasKitInit | undefined; +} + +/** + * This loads CanvasKit from jsDelivr instead of a local file. + * It's because we can't serve canvaskit.wasm on the expected path when running locally. + * Keep this API in sync with: https://github.com/Shopify/react-native-skia/blob/main/package/src/web/WithSkiaWeb.tsx + */ +export async function loadCanvasKit(options?: CanvasKitInitOptions) { + // Don't reinitialize if it's there already + if (global.CanvasKit) return; + // Initialize the script if it hasn't been loaded yet. + if (!global.CanvasKitInit) await loadCanvasKitScript(); + + // Use default configuration for Snack. + // It loads the CanvasKit WASM compatible with the bundled JS. + if (!options) { + options = { + locateFile: (file) => + `https://cdn.jsdelivr.net/npm/canvaskit-wasm@${version}/bin/full/${file}`, + }; + } + + // Store CanvasKit on the global namespace for Skia to interact with. + if (global.CanvasKitInit) { + global.CanvasKit = await global.CanvasKitInit(options); + } else { + console.error( + 'CanvasKitInit is not loaded, this is likely an issue with Snack. - Open a new issue at http://github.com/expo/snack.' + ); + } +} + +export async function loadCanvasKitScript() { + return await new Promise((resolve, reject) => { + const $script = document.createElement('script'); + + $script.addEventListener('load', resolve); + $script.addEventListener('error', reject); + + $script.setAttribute('id', `canvaskit@${version}`); + $script.setAttribute('type', 'text/javascript'); + $script.setAttribute('async', ''); + $script.setAttribute( + 'src', + `https://cdn.jsdelivr.net/npm/canvaskit-wasm@${version}/bin/full/canvaskit.js` + ); + + document.body.appendChild($script); + }); +} diff --git a/packages/snack-runtime/src/NativeModules/EXDevLauncher.native.tsx b/packages/snack-runtime/src/NativeModules/EXDevLauncher.native.tsx new file mode 100644 index 00000000..b8f40a45 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/EXDevLauncher.native.tsx @@ -0,0 +1,2 @@ +import { NativeModules } from 'react-native'; +export default (NativeModules.EXDevLauncher ?? {}) as any; diff --git a/packages/snack-runtime/src/NativeModules/EXDevLauncher.tsx b/packages/snack-runtime/src/NativeModules/EXDevLauncher.tsx new file mode 100644 index 00000000..204fad88 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/EXDevLauncher.tsx @@ -0,0 +1 @@ +export default {} as any; diff --git a/packages/snack-runtime/src/NativeModules/ExceptionManager.native.tsx b/packages/snack-runtime/src/NativeModules/ExceptionManager.native.tsx new file mode 100644 index 00000000..0ca1c8c6 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ExceptionManager.native.tsx @@ -0,0 +1,3 @@ +const ExceptionsManager = require('react-native/Libraries/Core/ExceptionsManager'); + +export default ExceptionsManager; diff --git a/packages/snack-runtime/src/NativeModules/ExceptionManager.tsx b/packages/snack-runtime/src/NativeModules/ExceptionManager.tsx new file mode 100644 index 00000000..204fad88 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ExceptionManager.tsx @@ -0,0 +1 @@ +export default {} as any; diff --git a/packages/snack-runtime/src/NativeModules/ExpoRouterEntry.tsx b/packages/snack-runtime/src/NativeModules/ExpoRouterEntry.tsx new file mode 100644 index 00000000..3f9158bc --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ExpoRouterEntry.tsx @@ -0,0 +1,25 @@ +import { ExpoRoot } from 'expo-router'; +import Head from 'expo-router/head'; + +type ExpoRouterAppProps = { + ctx: any; +}; + +/** + * Used as alternative `expo-router/entry`, that works with Snack. + * Instead of registering the root component through API, this returns a component to render. + */ +export function ExpoRouterApp({ ctx }: ExpoRouterAppProps) { + return ( + + + + ); +} + +/** + * Helper method to detect entry points of Expo Router. + */ +export function isExpoRouterEntry(fileContent = '') { + return /import.*expo-router\/entry/i.test(fileContent.trim()); +} diff --git a/packages/snack-runtime/src/NativeModules/FileSystem.tsx b/packages/snack-runtime/src/NativeModules/FileSystem.tsx new file mode 100644 index 00000000..89bc3b24 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/FileSystem.tsx @@ -0,0 +1,3 @@ +import * as FileSystem from 'expo-file-system'; + +export default FileSystem; diff --git a/packages/snack-runtime/src/NativeModules/FileSystem.web.tsx b/packages/snack-runtime/src/NativeModules/FileSystem.web.tsx new file mode 100644 index 00000000..e01e75c8 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/FileSystem.web.tsx @@ -0,0 +1,139 @@ +const cacheDirectory = ''; + +const DB_NAME = 'snack-packages'; +const DB_VERSION = 1; + +const STORE_NAME = 'cache'; + +type Item = { + key: string; + value: string; + createdAt: string; + readAt: string; +}; + +const memoryStore = new Map(); + +const db = new Promise((resolve, reject) => { + const request = indexedDB.open(DB_NAME, DB_VERSION); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + request.onupgradeneeded = () => { + const db = request.result; + + if (db.objectStoreNames.contains(STORE_NAME)) { + return; + } + + const store = db.createObjectStore(STORE_NAME, { keyPath: 'key' }); + + store.createIndex('value', 'value', { unique: false }); + store.createIndex('createdAt', 'createdAt', { unique: false }); + store.createIndex('readAt', 'readAt', { unique: false }); + }; +}); + +const getItemAsync = (store: IDBObjectStore, key: string) => + new Promise((resolve, reject) => { + const request = store.get(key); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + +const addItemAsync = (store: IDBObjectStore, value: Item) => + new Promise((resolve, reject) => { + const request = store.add(value); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + +const putItemAsync = (store: IDBObjectStore, value: Item) => + new Promise((resolve, reject) => { + const request = store.put(value); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + +const setItemAsync = async (store: IDBObjectStore, value: Item) => { + const existing = await getItemAsync(store, value.key); + + if (existing != null) { + await putItemAsync(store, value); + } else { + await addItemAsync(store, value); + } +}; + +const getInfoAsync = async (key: string) => { + try { + const tx = (await db).transaction(STORE_NAME, 'readonly'); + const store = tx.objectStore(STORE_NAME); + + const value = await getItemAsync(store, key); + + return { exists: value != null }; + } catch (e) { + console.warn(e); + + const exists = memoryStore.has(key); + + return { exists }; + } +}; + +const readAsStringAsync = async (key: string) => { + try { + const tx = (await db).transaction(STORE_NAME, 'readwrite'); + const store = tx.objectStore(STORE_NAME); + + const result = await getItemAsync(store, key); + + if (result != null) { + await putItemAsync(store, { + ...result, + readAt: new Date().toISOString(), + }); + + return result.value; + } + + return undefined; + } catch (e) { + console.warn(e); + + const item = memoryStore.get(key); + return item ? item.value : undefined; + } +}; + +const writeAsStringAsync = async (key: string, value: string) => { + const createdAt = new Date().toISOString(); + const item = { + key, + value, + createdAt, + readAt: createdAt, + }; + + try { + const tx = (await db).transaction(STORE_NAME, 'readwrite'); + const store = tx.objectStore(STORE_NAME); + + await setItemAsync(store, item); + } catch (e) { + console.warn(e); + + memoryStore.set(key, item); + } +}; + +export default { + cacheDirectory, + getInfoAsync, + readAsStringAsync, + writeAsStringAsync, +}; diff --git a/packages/snack-runtime/src/NativeModules/Linking.tsx b/packages/snack-runtime/src/NativeModules/Linking.tsx new file mode 100644 index 00000000..dea8164f --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/Linking.tsx @@ -0,0 +1,7 @@ +import { Linking } from 'react-native'; + +export default Linking; + +export function isVerbose(): boolean { + return __DEV__; +} diff --git a/packages/snack-runtime/src/NativeModules/Linking.web.tsx b/packages/snack-runtime/src/NativeModules/Linking.web.tsx new file mode 100644 index 00000000..112e67c6 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/Linking.web.tsx @@ -0,0 +1,18 @@ +export default { + async getInitialURL(): Promise { + return new URL(document.URL).searchParams.get('initialUrl') ?? ''; + }, + + addEventListener(_type: string, _handler: (event: { url: string }) => void): void { + // nop; + }, + + removeEventListener(_type: string, _handler: (event: { url: string }) => void): void { + // nop; + }, +}; + +export function isVerbose(): boolean { + const value = new URL(document.URL).searchParams.get('verbose'); + return value === null ? __DEV__ : value === 'true' || value === '1'; +} diff --git a/packages/snack-runtime/src/NativeModules/LogBox.tsx b/packages/snack-runtime/src/NativeModules/LogBox.tsx new file mode 100644 index 00000000..dad14af7 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/LogBox.tsx @@ -0,0 +1,3 @@ +import { LogBox } from 'react-native'; + +export default LogBox; diff --git a/packages/snack-runtime/src/NativeModules/LogBox.web.tsx b/packages/snack-runtime/src/NativeModules/LogBox.web.tsx new file mode 100644 index 00000000..90f65475 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/LogBox.web.tsx @@ -0,0 +1,7 @@ +import { YellowBox } from 'react-native'; + +export default { + ignoreLogs(logs: string[]) { + YellowBox.ignoreWarnings(logs); + }, +}; diff --git a/packages/snack-runtime/src/NativeModules/ReactNativeSkia.tsx b/packages/snack-runtime/src/NativeModules/ReactNativeSkia.tsx new file mode 100644 index 00000000..2abed4b1 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ReactNativeSkia.tsx @@ -0,0 +1,58 @@ +// This file enables `@shopify/react-native-skia` web support +// It's a Snack-specific version of: +// https://github.com/Shopify/react-native-skia/blob/main/package/src/web/WithSkiaWeb.tsx +import React, { Suspense } from 'react'; + +import { loadCanvasKit } from './CanvasKit'; + +interface WithSkiaProps { + /** + * The component fetcher, should be a lazy-loaded component. + * It should be returned as `{ default: }`, use default exports. + * E.g. `getComponent={() => import('./components/LazyComponent')} + */ + getComponent: () => Promise<{ default: React.ComponentType }>; + + /** The content to render when CanvasKit is still loading (default: `null`) */ + fallback?: React.ComponentProps['fallback']; + + /** + * The options to use when initializing CavasKit on web. + * In Snack, this defaults to the right default options. + * You can change these options if you know what you are doing. + */ + opts?: Parameters[0]; +} + +/** + * Wrap a lazy-loaded component inside CanvasKit for web. + * In Snack, using this will enable Skia to run natively and on web, without code changes. + * The component works by wrapping the lazy-loaded component in Suspense. + * + * @see https://shopify.github.io/react-native-skia/docs/getting-started/web/ + */ +export function WithSkiaWeb({ fallback, getComponent, opts: options }: WithSkiaProps) { + const Inner = React.useMemo( + () => + React.lazy(async () => { + await loadCanvasKit(options); + return getComponent(); + }), + [getComponent, options] + ); + + return ( + + + + ); +} + +/** + * Load CanvasKit on web by initializing the WASM file. + * In Snack, this defaults to the right default options. + * You can change these options if you know what you are doing. + * + * @see https://shopify.github.io/react-native-skia/docs/getting-started/web/ + */ +export const LoadSkiaWeb = loadCanvasKit; diff --git a/packages/snack-runtime/src/NativeModules/ViewShot.tsx b/packages/snack-runtime/src/NativeModules/ViewShot.tsx new file mode 100644 index 00000000..49287ad3 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ViewShot.tsx @@ -0,0 +1,3 @@ +import { captureRef } from 'react-native-view-shot'; + +export { captureRef }; diff --git a/packages/snack-runtime/src/NativeModules/ViewShot.web.tsx b/packages/snack-runtime/src/NativeModules/ViewShot.web.tsx new file mode 100644 index 00000000..34e1041e --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/ViewShot.web.tsx @@ -0,0 +1,10 @@ +import * as React from 'react'; +import type { CaptureOptions } from 'react-native-view-shot'; + +// Not yet supported +export async function captureRef( + _viewRef: number | React.Component | Element | React.RefObject, + _options?: CaptureOptions | undefined +): Promise { + return ''; +} diff --git a/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.tsx b/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.tsx new file mode 100644 index 00000000..3af8a3f0 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.tsx @@ -0,0 +1,13 @@ +import AsyncStorage from '@react-native-async-storage/async-storage'; +import * as Random from 'expo-random'; + +export default async function getDeviceIdAsync() { + const value = await AsyncStorage.getItem('SnackDeviceId'); + if (value) return value; + const byteArray = await Random.getRandomBytesAsync(16); + const hexString = [...new Uint8Array(byteArray.buffer)] + .map((x) => x.toString(16).padStart(2, '0')) + .join(''); + await AsyncStorage.setItem('SnackDeviceId', hexString); + return hexString; +} diff --git a/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.web.tsx b/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.web.tsx new file mode 100644 index 00000000..0d7c4373 --- /dev/null +++ b/packages/snack-runtime/src/NativeModules/getDeviceIdAsync.web.tsx @@ -0,0 +1,35 @@ +import * as Random from 'expo-random'; + +let fallbackStore: string | null = null; + +function getStoredId() { + try { + return localStorage.getItem('SnackDeviceId'); + } catch { + return fallbackStore; + } +} + +function setStoredId(id: string) { + try { + localStorage.setItem('SnackDeviceId', id); + } catch { + fallbackStore = id; + } finally { + return id; + } +} + +export default async function getDeviceIdAsync() { + const value = getStoredId(); + if (value) { + return value; + } + + const byteArray = await Random.getRandomBytesAsync(16); + const hexString = [...new Uint8Array(byteArray.buffer)] + .map((x) => x.toString(16).padStart(2, '0')) + .join(''); + + return setStoredId(hexString); +} diff --git a/packages/snack-runtime/src/Profiling.tsx b/packages/snack-runtime/src/Profiling.tsx new file mode 100644 index 00000000..7b488f78 --- /dev/null +++ b/packages/snack-runtime/src/Profiling.tsx @@ -0,0 +1,39 @@ +const enable = false; + +const now: () => number = + // @ts-ignore + global.nativePerformanceNow; + +let lastCheckPoint: number; +if (enable) { + lastCheckPoint = now(); +} + +export const checkpoint = enable + ? (name: string) => { + const t = now(); + const d = t - lastCheckPoint; + lastCheckPoint = t; + console.log(`[profiling] [${name}] ${t.toFixed(2)}ms at, ${d.toFixed(2)}ms since`); + } + : () => {}; + +export const section: (name: string, foo: () => Promise) => Promise = enable + ? async (name, foo) => { + const before = now(); + const r = await foo(); + const after = now(); + console.log(`[profiling] [${name}] ${(after - before).toFixed(2)}ms taken`); + return r; + } + : (_, foo) => foo(); + +export const sectionSync: (name: string, foo: () => T) => T = enable + ? (name, foo) => { + const before = now(); + const r = foo(); + const after = now(); + console.log(`[profiling] [${name}] ${(after - before).toFixed(2)}ms taken`); + return r; + } + : (_, foo) => foo(); diff --git a/packages/snack-runtime/src/UpdateIndicator.tsx b/packages/snack-runtime/src/UpdateIndicator.tsx new file mode 100644 index 00000000..f2644109 --- /dev/null +++ b/packages/snack-runtime/src/UpdateIndicator.tsx @@ -0,0 +1,94 @@ +import Constants from 'expo-constants'; +import * as React from 'react'; +import { StyleSheet, Animated, SafeAreaView, Text } from 'react-native'; + +type Props = { + visible: boolean; + label: string; +}; + +type State = { + animValue: Animated.Value; +}; + +export default class UpdateIndicator extends React.PureComponent { + state: State = { + animValue: new Animated.Value(0), + }; + + private show() { + Animated.timing(this.state.animValue, { + toValue: 1, + delay: 3000, + duration: 1000, + useNativeDriver: true, + }).start(); + } + + private hide() { + Animated.spring(this.state.animValue, { + toValue: 0, + useNativeDriver: true, + }).start(); + } + + componentDidMount() { + if (this.props.visible) { + this.show(); + } + } + + componentDidUpdate(prevProps: Props) { + const isVisible = this.props.visible; + const wasVisible = prevProps.visible; + if (wasVisible && !isVisible) { + this.hide(); + } else if (!wasVisible && isVisible) { + this.show(); + } + } + + render() { + const { label } = this.props; + const { animValue } = this.state; + return ( + + + {label} + + + ); + } +} + +const styles = StyleSheet.create({ + notification: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + height: 24 + Constants.statusBarHeight, + paddingTop: Math.max(Constants.statusBarHeight - 2, 0), + paddingBottom: Math.min(Constants.statusBarHeight, 2), + backgroundColor: '#4630eb', + alignItems: 'center', + justifyContent: 'center', + }, + notificationText: { + color: 'white', + fontSize: 14, + }, +}); diff --git a/packages/snack-runtime/src/UpdateIndicator.web.tsx b/packages/snack-runtime/src/UpdateIndicator.web.tsx new file mode 100644 index 00000000..b18ae164 --- /dev/null +++ b/packages/snack-runtime/src/UpdateIndicator.web.tsx @@ -0,0 +1,72 @@ +import * as React from 'react'; +import { StyleSheet, View, Text } from 'react-native'; + +type Props = { + visible: boolean; + label: string; +}; + +export default function UpdateIndicator(props: Props) { + const { visible, label } = props; + const [initial, setInitial] = React.useState(true); + React.useEffect(() => { + let raf: number | undefined; + raf = requestAnimationFrame(() => { + raf = undefined; + setInitial(false); + }); + return () => (raf ? cancelAnimationFrame(raf) : undefined); + }, []); + const isVisible = visible && !initial; + return ( + + + {label} + + + ); +} + +const styles = StyleSheet.create({ + container: { + ...StyleSheet.absoluteFillObject, + overflow: 'hidden', + }, + notification: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + height: 28, + backgroundColor: '#4630eb', + alignItems: 'center', + justifyContent: 'center', + // @ts-ignore + transitionDelay: '0s', + transitionDuration: '0.5s', + transitionTimingFunction: 'ease-in', + transform: [{ translateY: -100 }], + }, + notificationVisible: { + // @ts-ignore + transitionDelay: '1s', + transitionDuration: '1s', + transitionTimingFunction: 'ease-out', + transform: [{ translateY: 0 }], + }, + notificationInitial: { + // @ts-ignore + transitionDelay: '5s', + }, + notificationText: { + color: 'white', + fontFamily: "'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;", + fontSize: 13, + fontWeight: '500', + }, +}); diff --git a/packages/snack-runtime/src/UrlUtils.ts b/packages/snack-runtime/src/UrlUtils.ts new file mode 100644 index 00000000..1277ff09 --- /dev/null +++ b/packages/snack-runtime/src/UrlUtils.ts @@ -0,0 +1,22 @@ +export function parseExperienceURL( + experienceURL: string +): { channel: string; testTransport: string | null } | null { + const matches = experienceURL.match(/(\+|\/sdk\..*-)([^?]*)\??(.*$)/); + if (!matches) { + return null; + } + const channel = matches[2]; + + let testTransport = null; + const queryItems = (matches[3] ?? '').split(/&/g); + for (const item of queryItems) { + if (item.startsWith('testTransport=')) { + testTransport = item.substring(14); + break; + } + } + return { + channel, + testTransport, + }; +} diff --git a/packages/snack-runtime/src/__tests__/UrlUtils-test.ts b/packages/snack-runtime/src/__tests__/UrlUtils-test.ts new file mode 100644 index 00000000..8a42537c --- /dev/null +++ b/packages/snack-runtime/src/__tests__/UrlUtils-test.ts @@ -0,0 +1,41 @@ +import { parseExperienceURL } from '../UrlUtils'; + +describe(parseExperienceURL, () => { + it('should parse snack url', () => { + const result = parseExperienceURL('exp://exp.host/@snack/sdk.47.0.0-4AQkc5pxqe'); + expect(result?.channel).toBe('4AQkc5pxqe'); + expect(result?.testTransport).toBe(null); + }); + + it('should parse snack url with testTransport', () => { + const result = parseExperienceURL( + 'exp://exp.host/@snack/sdk.47.0.0-4AQkc5pxqe?foo=foo&testTransport=snackpub&bar=bar' + ); + expect(result?.channel).toBe('4AQkc5pxqe'); + expect(result?.testTransport).toBe('snackpub'); + }); + + it('should parse account snack full name url', () => { + const result = parseExperienceURL('exp://exp.host/@johndoe/the-snack+4AQkc5pxqe'); + expect(result?.channel).toBe('4AQkc5pxqe'); + expect(result?.testTransport).toBe(null); + }); + + it('should parse account snack full name url with testTransport', () => { + const result = parseExperienceURL( + 'exp://exp.host/@johndoe/the-snack+4AQkc5pxqe?foo=foo&testTransport=snackpub&bar=bar' + ); + expect(result?.channel).toBe('4AQkc5pxqe'); + expect(result?.testTransport).toBe('snackpub'); + }); + + it('should return null for account snack full name url without channel', () => { + const result = parseExperienceURL('exp://exp.host/@johndoe/the-snack'); + expect(result).toBe(null); + }); + + it('should return null for invalid url', () => { + const result = parseExperienceURL('exp://exp.host/'); + expect(result).toBe(null); + }); +}); diff --git a/packages/snack-runtime/src/aliases/common.tsx b/packages/snack-runtime/src/aliases/common.tsx new file mode 100644 index 00000000..0569fb6f --- /dev/null +++ b/packages/snack-runtime/src/aliases/common.tsx @@ -0,0 +1,52 @@ +import AssetRegistry from '../NativeModules/AssetRegistry'; +import * as SkiaWeb from '../NativeModules/ReactNativeSkia'; + +const aliases: { [key: string]: any } = { + expo: require('expo'), + react: require('react'), + 'react/jsx-runtime': require('react/jsx-runtime'), + + // Needed for loading assets from packages bundled by snackager + AssetRegistry, + + // Packages that require special initialisation (see Modules.tsx) + 'expo-asset': require('expo-asset'), + 'expo-font': require('expo-font'), + 'react-native-gesture-handler': require('react-native-gesture-handler'), + 'react-native-safe-area-context': require('react-native-safe-area-context'), + 'react-native-vector-icons': require('@expo/vector-icons'), + '@expo/vector-icons': require('@expo/vector-icons'), + + // Packages that are used internally by the runtime + 'expo-constants': require('expo-constants'), + 'expo-file-system': require('expo-file-system'), + 'expo-updates': require('expo-updates'), + '@react-native-async-storage/async-storage': require('@react-native-async-storage/async-storage'), + + // Renamed `@react-native-community` packages + '@react-native-community/async-storage': require('@react-native-async-storage/async-storage'), + + // Common packages that are included for easy of use + 'prop-types': require('prop-types'), + + // Aliases for the image examples in react native docs + '@expo/snack-static/react-native-logo.png': require('../react-native-logo.png'), + + // Use the fixed react native reanimated shipped in the snack runtime + // It's a workaround for issues we encountered with the newer babel plugin for SDK 44 + 'react-native-reanimated': require('react-native-reanimated'), + + // Used by @shopify/react-native-skia, on web only + '@shopify/react-native-skia/lib/module/web': SkiaWeb, + + // Only works when vendored into the runtime (expo-router@1.5.3) + 'expo-router': require('expo-router'), + 'expo-router/stack': require('expo-router/stack'), + 'expo-router/tabs': require('expo-router/tabs'), + 'expo-router/drawer': require('expo-router/drawer'), + 'expo-router/html': require('expo-router/html'), + 'expo-router/head': require('expo-router/head'), + 'expo-router/entry': () => {}, // noop +}; + +export default aliases; diff --git a/packages/snack-runtime/src/aliases/index.tsx b/packages/snack-runtime/src/aliases/index.tsx new file mode 100644 index 00000000..d3694727 --- /dev/null +++ b/packages/snack-runtime/src/aliases/index.tsx @@ -0,0 +1,25 @@ +import AssetRegistry from '../NativeModules/AssetRegistry'; +import common from './common'; + +const aliases: { [key: string]: any } = { + ...common, + 'react-native-view-shot': require('react-native-view-shot'), + 'react-native': require('react-native'), + 'react-native/Libraries/Image/AssetRegistry': AssetRegistry, + 'react-native/Libraries/Image/AssetSourceResolver': require('react-native/Libraries/Image/AssetSourceResolver'), + 'react-native/Libraries/Image/resolveAssetSource': require('react-native/Libraries/Image/resolveAssetSource'), + 'react-native/Libraries/Core/ReactNativeVersion': require('react-native/Libraries/Core/ReactNativeVersion'), + 'react-native/Libraries/BatchedBridge/BatchedBridge': require('react-native/Libraries/BatchedBridge/BatchedBridge'), + 'react-native/Libraries/ReactNative/AppContainer': require('react-native/Libraries/ReactNative/AppContainer'), + 'react-native/Libraries/Utilities/dismissKeyboard': require('react-native/Libraries/Utilities/dismissKeyboard'), // for @react-native-community/viewpager + 'react-native/Libraries/Renderer/shims/ReactNative': require('react-native/Libraries/Renderer/shims/ReactNative'), // for react-native-reanimated + 'react-native/Libraries/Components/UnimplementedViews/UnimplementedView': require('react-native/Libraries/Components/UnimplementedViews/UnimplementedView'), // for @react-native-picker/picker@1.9.11 + 'react-native/Libraries/Components/TextInput/TextInputState': require('react-native/Libraries/Components/TextInput/TextInputState'), // for @stripe/stripe-react-native + 'react-native/Libraries/Core/Devtools/parseErrorStack': require('react-native/Libraries/Core/Devtools/parseErrorStack'), // Used by @sentry/react-native@3.4.2 + 'react-native/Libraries/Core/Devtools/symbolicateStackTrace': require('react-native/Libraries/Core/Devtools/symbolicateStackTrace'), // Used by @sentry/react-native@3.4.2 + 'react-native/Libraries/Core/Devtools/getDevServer': require('react-native/Libraries/Core/Devtools/getDevServer'), // Used by @sentry/react-native@3.4.2 + 'react-native/Libraries/Utilities/PolyfillFunctions': require('react-native/Libraries/Utilities/PolyfillFunctions'), // Used by @sentry/react-native@3.4.2 + 'react-native/Libraries/Utilities/codegenNativeCommands': require('react-native/Libraries/Utilities/codegenNativeCommands'), // Used by react-native-webview@11.23.0 +}; + +export default aliases; diff --git a/packages/snack-runtime/src/aliases/index.web.tsx b/packages/snack-runtime/src/aliases/index.web.tsx new file mode 100644 index 00000000..b363a667 --- /dev/null +++ b/packages/snack-runtime/src/aliases/index.web.tsx @@ -0,0 +1,14 @@ +import AssetRegistry from '../NativeModules/AssetRegistry'; +import common from './common'; + +const aliases: { [key: string]: any } = { + ...common, + 'react-dom': require('react-dom'), + 'react-native': require('react-native-web'), + 'react-native-web': require('react-native-web'), + 'react-native-web/dist/modules/AssetRegistry': AssetRegistry, + + 'react-native-web/dist/modules/UnimplementedView': require('react-native-web/dist/modules/UnimplementedView'), // for react-native-maps@0.29.4 +}; + +export default aliases; diff --git a/packages/snack-runtime/src/polyfill.tsx b/packages/snack-runtime/src/polyfill.tsx new file mode 100644 index 00000000..0c791aae --- /dev/null +++ b/packages/snack-runtime/src/polyfill.tsx @@ -0,0 +1,4 @@ +// Starting from SDK 46.0.0-beta.6, this is now required. +// Without this, it will fail in production mode with: +// ReferenceError: Can't find variable: regeneratorRuntime +import '@babel/polyfill'; diff --git a/packages/snack-runtime/src/polyfill.web.tsx b/packages/snack-runtime/src/polyfill.web.tsx new file mode 100644 index 00000000..c3030bdd --- /dev/null +++ b/packages/snack-runtime/src/polyfill.web.tsx @@ -0,0 +1 @@ +import '@babel/polyfill'; diff --git a/packages/snack-runtime/src/react-native-logo.png b/packages/snack-runtime/src/react-native-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd19b5a964ab3e4c3ef5a2d68775b16265c4bd8 GIT binary patch literal 22616 zcmV+NKn=f%P)j!KZ00009a7bBm000XT z000XT0n*)m`~UzT07*naRCwC#op*eb)%VBWSxq-BWt6@55D-BG2O9)Y0To0*mIK9s zh#;Vd0wTB&7YHazMV#Od6%Y`S?O+H3B70L-cbnw*$4S1e2+d8Jv`M(1*Xwyfu_n)R zpL;*|oO93l90P%mqCkyHu985^C07_48X7KS0v9j2P5^&hawP@wLl^?^o=O9)oL5Vr zqMmCS8h*omU?uRQ^E#>t>c6M~^Z~j#|E{5-Q8@Su_#Bwy{QFf)PzgX!pf}J&&kGHW zfWt;$F7PpM=4v6RvcPa)AP}MFfQClEBMtZfcm+5dssvR97~yo~bU<4}BlwW%bp2ii z{tlIgiUD2+vH^#_^rf$$zp|ZcIwsgHs2;#;KqY}P6Pr$RR(@Q(g-v(G&Dfc5ZVFz^7A3aeBML@V67%6 z4GoP;P{qj&4GN2(ZUj~XiTYh=XlPspiB68Vv7lYN2F@>z)$c$YP$M)s zX=rE^5KK=QI+;wjhSJc`C@5q)J-5T|EU4j{oHR5v3K(Hd?#a`FN&pU_HN`bF zGzuPRKsj=?S-;eR>Z!>|LqnsG5aHyYE4p}n^cZPqXcQuPU&+O*0qoM_qoJWu$f${= zIsMCm($J62h-i5?*;$Zs5mGL|`EzjQ1Y~9E@$x^)07uQvA6n`0 z@FU7qhI-dQqZ^=7O-LvSv2hR{31%}m9FUa-X(@2=Je)fXNB)65J7CAJaQGiMq4y7; zAu<|DSAaSVp?*`STnkE+hJ+GOBp$*plOC9w31?2ii9@jWPgu7cHm`-_hxB;*2d#j4 zE(>ZF&`*zv4-pdwZElBK?|}x*plDo9#LrGn=XysjXWMn<{yiIT{3z_*4!^B~HQ&hs zNxq=R*dq%m0j_BZH+O;tO`&RCh_dF4waq!+j$H2~H(c+< zi)*OyUsxlcVKcb(Zn&W>l&>su{dOSR2Yg~eJ})&JmVXUzkAuIq>T&lC_5+m+Kv8mK zZffKMjhe%-m!WA3XI#lo-(zv^=BYN=xdoOkg8%yzjvdtR0K{GE)B`&AfZEqWgi$sL zo1ebV09b*Or{UcR@X=JT+w^zX;~S7<0oOs z$MDTOv8t{{RH+4b_J!MeLAkOyn?yl*UM~0Vi#hPp6L8_IUKjbp4F=$Tr@yD+4U9$@ zJO&;cE0eRZHclf_Zh1Z(R(=EX--b;;T^;YBdOf&zFm&z-#ftdXT2i&9RxX35dO^}D zy+*u8KND~d&_a)eHLsUCCys`$>sP5d3>gcf z--H{QgE?Htsjy?!*+8`_P`x3nT&!b+-eZ>ucm$}W$HEKr9s*BK1iPVd$>~zqkQ|m825w{Fz{&@`!3wn63o`XAg2G2RAnep9#$^VF)8nG$^<-)NE~Q* zf@W=C;!LoF1r|A7N>pYu)T<92dqRA1IRQ+$7@T8nHba+QFmV=i=?>vhfk#Z2j(?qc zkdg{pe%5QobDT2(TY-9dEIdH5k}!8A)TkvofS$%EjLyq&88^-4D*BrATu0*j_RC4r zS04peMs)3l@c1}r)mg?a%a^V?IRS11m)DtfI0?t*#ki-YK)-hIt3HeJ5ZesEKR`u2 z79L>qR2Vcwn`aUKnq?talm`u5@G>2sBpE@pC`^OK%g>#UdDcSzTOF`x8P@x)> zE+yaZ2|-$c^}j&Bwve8x*N-~(8-UY@lBR|V8a9KEeuVIFb7ytjlPn5doBfjUoV@)`jv2Ck9VIJ8wU@Mh5=8? zAgXK_W?=t5xaS5bIMz@>rU6|*q>k%b!L0AZ(ova|VZfIk!`Q)a@tki6vUVfrc(;^q zl&c^lnBQc?FyQ<}cz+Vin(|-Eu0Uf=jo{hWq4`buFA*|3N%-Jl`1WI1`YCMR;=6n8 zHxx!r0f#|t{H?%?Ps#5lpj0t+5!}{I&3du|%a_6v_xR`3EUp-|>I6L>mf}|v z`Li@!?$7GwFyTqqv%TQQ_nrq~=!;Oic>bQn<;LyW0Uy5)-+czBkNfAIpPC4dj8MB@ zGq86z+|@)>D>O7g`3zNR!NLs?6XSkYHv>lw!+kfyp?&_nFKYy}yHhf$8#mAY36~W( zd%-F^ig(t>CuZQGkZ(~iap!eS0F#lcn@+1G3n?y##^l#yYo7|I>0WdjW zNKdimG?ZTHSUn61xcdQU*HLZp8-WQ!Vf~N(zb{+11be@k2Y>H^QWc?eX}Je)+#?%M zqzJU@F2ZfUt@Cd>LiPIa`p3}e4slhzxo20I&(Xv1_5^t05!kS@U^2L~GGX5?xV5Lm z3*EtDkc{_lKhbMS6O@k-77im{gW`$q7f=|mX&p=&Cgf32u-lwOH6M;15)roIMX#)H zl;>vwMgv@b1Jr6P`8)owL^|FLuP=b=HN7ve4g*qCVZn45H3(LH3+ZVEJ3o#ehO!l* z;kE9qKL?PI2+KZ)b6P}1W$)2&hnn@FS{*gl!v@TqT6pzWX({mWd(iVnnDM&&Z1sll zfOMc`JNWPixT&M>?$HtkkG}}7&Vv#qy^A-wPUhCGg8m&~+@o-0f8ouMkEX)e81)8(d)a)tVs&`$ z8|d0YtR_$6O)h28?-xVwmN4gyf_LZg!Z-6|tlW)nHj?n0P*SfiO;Gtn(c)0AiTmKV z0l1g}KYST@&ybN0AHEK~TfxfjWRZJnO}R4I2RsI^Es%OdPtfoNnDH%K-&|ZrPhkbl zorSTF!;tQx%N}T0zY-4ZcfYC}h(>yyMtXf|g32fATq~VERCf10+XGvZ`me3<(48=0 zI3y=~UO(V)x_r0ZA(l`TMU|dgI>9?%L6xeW2g6-1-G;Sre;bMK1!|FV@_E>}O5AC8 z;}~Ipx{dYv(gc-H)N2e@g-l@!(#Rmt6#_ETVdi9s-Tbi`!o6_$(t&H6!1N_z8Rdnp z{ou`yy-U6{Bd3$^O@Tq3r3F`@W8*3{H_r~#X)L;38k(TIM&(-WCz}DtaCld1S6JA* z2Ksk|In#6GMm%yGfr^#ky)VT=x*Q&O2FAY+kujbJ!^40R$3!-F($l^v6)LE4y>L-2 z4ppmxBzkISg7OOCkx-$k`^9AdE+)gCZNc??XHUa(55ltpMP9_>;s2k7NW;9j0J_|l zYdj1vbOJp6GMFr$WriCNt8U{u(NOxoAj`Nuc32WO-K{J;62~j8yS-_G@)l9iP^!H9 z($JPn6+T}84|jpx z+ksEOZS`P+p--1<}D)8O8m3 zL>V)fab!O{+7&*SDx~Yl?64vEQO$1hyu8K&oJ)dd21s{ayFIwa@$h~~v%4oL6HvOM zUT2!1yhO<|GKm}tqj>nA(0JyIbeQl2j2{MB>1wV@ZmYo4CI(@^!2>Y3nzfS!T z#>{4uCaEeVFEK^51*HkfOGHGe#Z$7gg0~r_3ifP=hwgy2Kjn|4T-{9;dPR{*^>E%CI=P5^(@(*jFQ$srWVLZJ z7$qTCLlcx|3(6>3P)a7fT^3)cqg#I%Ji@!C1`b3zdE7g2ZS&9{tBf>7f&wg7z1}oI zc{(x%=|iWq_#DBXT<8vMyTbEt$zt;MQEfo65~3$nyl#a^;1j%2f{CF;i`rVL*K&)C8sRACgjS4sSA_miL&HXJ;%@+p(ZFVV7IBqm5fGd01#>@T>&P~l|FmE4zXnb*EfT4 z(Z4mp_8qbv#qT^khb*1GjaBrzeG8 zJ(}`-a0I>zt0t%bMP|BMvR$adlnG40vp!B=z;M2dKh*u96F?~f?!9q zq+WbKbXqY*#i%FwYJ$=PS5GG}0T<50sDW2*R{Gs%@cMJY;;M&qnLzv7 z;NdaBJDw(sf~f_&YCx0fUiDM`+r^=35!1$p*j`Vk<^VbZ$RB^gKtdZi%a`0m9ac`2C}pD zTGIsO1?B5NU3Q=SmP^DJj%7#S6z}R=7Oeys`yKvx}&)~fYzQ3Q8i}3t|u>XK(LGw;s zq0bY6J70>GgoH%*7L*YuJP9gIp+koas8$!O0eX@*cnsXsO5L>!1Ga60 z7l-(-6yxCEFy;YBRScTDk~oKqf$MG#%yF(#ORY@D1nl3dv&c0;)u2>) zC>DSj<*jamevf%p#&YgFjC~l+obd0x{rm&GGf}=%#rU)Xu`w{}4Tujwx!@|bAl#@{ z=5lbaUSFD^@`;Re*u7mX)gU4gYF!gp_g|_UJo~0tb}E5e1CW^p;~s}CYYXNc-+c+b zm=9*fz*r{GpaDENG4NdK%C+3j6$6mwfCIbr`f>xa9s+m7-81<8zbQ7lbQh2)E{Zx>uhmROkzk!Aor2EwM*uy}r8jJL%i2N5cX zujy%U;BURYG(q_Q`*uRQLl&UBA3Cc&GC4* z7F$%TkEj@Fr5$0)u{1ok8iCXxcrV#NVj{dgOP(_|MNS7(lHuZcIDJe=;OGH3vR{&J z&z%t&9e*6}SFQ;~in@E zJ0k>j{1E)}7wp>&hyIoWfuxh_QqPy7-gRI#xj&3BBdViz-EK+~lrNB(4m*B@TD9^v z-yJ}N6&f^iPf!UZgmfy^5Vx>u9kGT=l$I;PB%f!vgnaCH*395)fr=u70VrA&5{iPc z8W@`8jBysC|8?>x96u~EvEAFmdOm$zik;o11k`RM)=`$5d&mU-+NR%`CMX|H{_R`f z?p_L35O7UXSTytBWK^Pzbm^_#P+Wnsl_0S^L|SChx`@c;Bq6O~=AZYNR{*jO>~}K;JJ&JqI6j(R~Bx#5wiQqJ3f6} z4o~*{34g2?m$6cHwGx*z$KZg@fl`41-5FjD@x@^AHYk~>c8qK!r-UOLb;DFJ& zy&Ih_TUIuh6!v>7@Z~2kw5J|J#bMS^!P(QWeY1Lp5|^8np~)#EVRsT!Iyn->swTn4 zpY-@?7te=?ijfl<)o!s@i|w7)&n`Hw@b^%I>a%4ar;V}kg_EnLUAz!MVp(X|9Bym} zObVu0+hTOZkL&^Teska7@ssfTdiZV;Y*;19 zq?(|vGDJp0qvmkyU7~YcuDny)mck8a8!vIa49-P#AvLEwlO$WTID{Mi>(bf^aaEX{ z8;JvHEC0(1Sn@Ia_KWw;Dl|a_2`W~X;@S3hi!4f*b24TZ!l)ZBxw3&X=OF0>96usL zdH?K!e|E#EV?t0#r*g#Os?~vctE4thg;c|Vh4WxU-{3B>s9Fc+uM~1odG0Xai%(!! zu4Db^*c_57T|x5Hs?>t=Rh*?pB_YO=V`1gCxC+`GH<6Qh{@rJ=bfJ{zXo3n6Si_<5 zP0+m`v}g~-;tM|DYRW}KCLq}+bzdisNjb$|Tcxz(*de)+&%0T4R+#=R+}v6%%?+UuCm0uYBdnziZ2dDV{$f=f^-oL zNk}d%D4o%mx2xhSbz)%{I(80p9SB4E(aW%pn?F!OTnFeq1*jXwMI^HW?{t>jvRqU zy1>rgedAh{tpp#hfl_7ET+?vi^N(S8Zz0Q2L9K=`XSrx#sk*oyOoNw(_~!fLibA{Y z(w*5+NGsRkT)lgC!lK#mh?|f`|j%X;NfRQZrI^wV@pkeNAHA{OGI})G6ssogViAa z-B)o@SBgZDB5+GPXmvYeX2}6ekhZr9&KOkd+hOo1Xn0-DiJUJ<$?W{hgZp6pYFNDl zHm{Lmeiy3Mflt>#v>TCs1CX5oy<5Yt`RJ0;e;ACJtQHhD0v9eopOzAo4|R;13Im6z zjg1L7dIauimcJy(fltHeSKQ}gg&|hneK$$d2!Pl)sM}a9uFBBm@~`2(Dt`sc!IAL7VDH_# z)_174@mlj;4mpAJTKr|XT+y)-@NeG@TC{~KHFGw|{Duu(W6`K7y!(}8r%!t^sKoMu z!-9&4gkF!rpl6_DQQ0Ydan}|nIVD|?g3a$1!Y|9jom0WXqhR<;?sskruwy&i(^Tr; zJjIj+(5dDT5~RYRa}VjrlUTxcIeP}D+kYYnX1)S*r}@6I$5lyC*EEHvCcurYe6y># z@%yI&mzZ;pnazWaA<$rGGE z3(ea>g>vqRGr|N(XW{4XJ+mAq&V~vV)C1#77QuVtx$59>i2UxYJs~{Y{T_GQC;$K; z07*naR9vwE<;%m7gVGQ~6=7C*=2a-3=$W1+wkco_QUa5pN|lH4Gho0IBFmAL&nL7Z;^J--R5gdg5p+A3X*ICBD`VnsV#RhGF* zU0AX}-SuwNT#oP!Cim8CdIn5-S_-_qg)LjE4!-{!R(&fQZ0Smn5aXPK-hM6+5e_X{ zLG8w{b#p+@o50J1YT6P$Tn3%H%EGkegP6jBlPBPv$jqH@?zRQk zy2-Zz>D}Al?J-)cOASFtP(45&KaiQ$&f^7qzktP;PhwdVjr{eNduO~W$ zc7>HS=WW>R2mSGj=Oyjs|2~D2C#6QPSX|EYctcciMWEfCV0XZlp96*x0wYLnG{WOA z!b2nE?=~-=Bn&uv5kC6>7Q71w_7u$ht5(;WfK#WS>$Q33;MAxG3)aZOw<|oiJqsSb zQ(OSQZ)ql|R1=!FkzAgNHN+*4DI)LAU=XFv%uI2)4(*fXmz#frO+Uf;qym^vCYZVi zI^CfbFt-9QZ8tMA}kz+zXJV+;I8}B7FRg1_zQUaF8}I0#T1cTuG@RTwKqXbq)cX4FF8jZ6W$1d`aI}enTpXl8Mgfa&p!ljkCV351&!qM z(yX&)P50KH35bY=Z{}Wpw{CJXJUvkY3l4?PN;)SZbf^7P#U36BcMX6Sr$es?p;A>a zT5__U^U_3eofu_17kFG8G;Ic*dP^q$kptezpQzx}F^DS$*Eds3aE&lSiEnLjZ5RoJ&*Er^@} zG;axQyI%gkx4lzN&QxMg$Bq?@yL~16x)ug?fYA@bvBP2!d8(w44&2ld-uO%uMz1P@ zGMQl18_=`A=M&x)1mCm{`rQhzjS7s6={4U=nT)$ibvqDag${T9_rJC53@zHIndTN? z*KU~qwtr%R_dhA8sn@sgy*h;5xd5V~;IWY~eF;>n=lkb4c@$<&`FFF4JfGVj${3dt zW@HrH)=O;+EWl4o3tyKhD+@k(4|=tPuNUUH+n$nC^A<2=p6Fj)H3aqGC~+4&B_}hG zoeA$wf&Lxfx3vTe&YqTCQ{{L&3#q`5FP6*2h=f5Sz+_Mx6Ndw4O!9qt@r#S7u5SS||4-y(e2p(Ygw31O-b*G>uO4*m_wRpi-X3b!Q&X-;v%$9?2hO}a zxEG$f7e+lO3LIfxkW|Yy@Y2kJR}U=|g1Yr?7&6B5&KY6A@ni7Bz3|G@0dd0cA1qz~ zDOqYcQROTA+nwlqFEnhdo>s8&7fCSmH93uYAMPJqupMqPfHGy_&4qCDt-k&2v=n&v zMaaxnv!ZN3-zTIU8P3?*?Y(oiwk^u2>FnNw-Yx@#EErlPym3ib2*+AtA(DPyWxpFPB>@pSK z>5}<@+i!5^Z!oAc%%7EWx~hsypx@(gN1qTSsE7y{{T3vaRF7x4jy#txh6g%J_meCO<1lw5o9_hjSBqX0k{O z7Z3_A&7jZY(ECC4+zeOF(EJbJxd(zrI^@(b=-eBk6(+US1VxI&EuAD2TV)ZXq{8Td zzU?^MsJW1WC9L4P-dxVbN=$%~6{Y^n;iDTmc?1&6L!-v-T~`NCBnsjar5HRe!Tq>c zfyJM~S04rb9CbLe#g88rS(k9d_ijhXx^xxzeo=ww+!qW%Rj4KlARQ3DPg z6t~1z_-7Y%=&81O*pQ5V6>>5lr)IA_1Bd?!p1Hd7cTs@2xr3Slglk-?R)xa{3q%mH zU|hUG!y&P_deGGhd^`h>E%<;C+MIa95vg2AZ%rcR%eV{>2nV0ZR~>zWo`YpyGe zi^Cv-fW>^6gL7c79KD-8xetZkGXvXx4ZPsE3RZj#Pxq7398cW62S@t$-4q%@)u<;Y zcd9&N1y(MD@lOP9u+bg<*dVG279W151^8wj{Jqn6pIIbcT<<`XEOaRi-0tI`?1Fb; z{~_OsT^oR}<`jIPw$DiFE139{#Oe$lyqinYF@lnyx(|e+vFe%8yLZEw2gFqhR@ky7 z|HhYZ>G)~*@O9tbXY1RcTD8D&?Jnm|-2H&42lxu7j={XQd^hvWz@a0eVIR!+bUMs< zRee*nAqC2QZf)gXf+}80N(59EfU9@d_$T1Veu5r9egpdt_-3cJ0H4nkWdL8nY|gPx z0#)?c22`mk$_c*2!WppZFW*?WW<<+AKcaMjf@x!6)pGT8j4D;&md-&;P)%-u^5xVB z$_gx)E;%cqfTUAWwVz*tG9lf8=S}nN{Z*?A4R6SwTB*O`a1ubP+a+PrSGaf%=DgvX z)pIsk+`CXfMmkJ<5>A~_k4JUxDY<+>Nl>?RQuArez=6Xe#T!caW)7S=pTAMI0Q0B$ zUZtUVTZpy>eovoFL}fKL-nXCo^*s1>bN;L-3-I$Y*!4%~%-KEL;iIW)8>%D#f4JyAxI~^?nhUoW%Y4EZ^Rj!2ory3y#M34xm_~B((Yx zX~{5avhyU>n=wQ(`WH?wJQWRpVc~SO@PrL0QS|c4905;I<*SOWwq4;4PM?D%pAeGx z>;uTKdAA76z=C&tuk{ojDfw5y&=K7Mgqxt|HNOAsAHNY*3~x3N3-H^Y;w(svLA`(iMEBvf+ zPl&o)W&gxnW=(-?hj$yu!WqGv3gZqxEP`~KS}tF;IzdQK2_+y*K{~_%Y}+U;oI(*< znefTGo|A#aX=6sPv*-R*GOiy@ZkP(!{qCWXjk_l;~Cd0br>I=XOY+MZ| z{B&qwG6mlln*2zpn}326r_@(NHqLIpAq<;M#35DYtic$B7F0&M;=>^&7om(Wt7j)2 zHlW_M;)?kLnHj-%@|2nBzk6=c9!e#uyWtk#wtGW+&RQcNx`?6|lr8Tks0ixpY4t+O zYIQ^VWjDSNn%%6P6qyZFuj#)27F?s*WbX3v7scHq7t5F6+F zdrH0_4KxkGGKS9iNgefKozN(BmR?^@gG4Q{s+#T zb^i_7K%GWVvq5OS=oHSAgM-B+HsvJ{BTBK?{6w$38#K(A-b7Tkl zJm%YKevp%^y*oT_LsVEu&w%ZIXoA_Q3p8r#T|HtpP_evp=Lt2`xfWWqRdeq$?67@v z5E7K#2J2R+?b2Dmt=+|v3MG^*3mxwEUJUMkR#Z>l-`kd-#WD$WH_zm>p7!td?dL{B zLH}X${NBdi?TDOER7_}DPXmWTY?NA)(!+;g*Y80{P$0?#DVgrS#SX;9z>pWfXbPQ| z-Jv^_E0w?YO?IRWlCK*l{;~p2p9*|}G6So>^}XzK=X;^ib@@|s$OdZHftzj(ojKdC z8+5o`ZBsP^n^yV06sy1pYTHKG@rRlfl?k-z1a}V#jTapr33uL~|K4&gE2_uCzP-QG zM`6`s&l@=w=x&ZkC;zzEx1SpwE2N)aIFN3{_dF098*AB0Fnki2E$*#KmwWfke7{ct z{~;q?y%OK0Lp^jn)NLI6FZ+fzP`j>g3UX~g&xfFd4+F9e;H$ZimL0fOlm*zhMm9QM zqHABMUE4QWSlPgJE#TT4f_y`bfal+aN|n^c#Z@f5#lJf2{;zlV?lbsnw_2Hp4M->o z6J|omGQs`AyY}-ex5nMLlrIbSKH}SZ-10N5Sr(X9luOQJ?i;?%*@`a)y`S)1p|l-{ z3WGcQ2k%@p7-0AmXx&k*)xE(vC+EEd>1jbuQ0LBw;F{_#odwjd4==nYrg$)-YHhfo zwQtobvw`jdpiBkdeWooNK9~fl8G)w_6$Y$X4r{*m?dNtM097ih%TTK}VQt+-T%=&c zgU>?m!RqtX0&HFfKl;B(X~9g(uRek;8`XE}bfA4_A*qO{;Cta6?}4I1mDUEPw(0J`;rm!?BZk>GjZF-7ErNM(mM16$ULlBjA+ z?r!}g`O}wpYbxW1Ws;5ZwoUk|EX1HUYXw3NVq@hv+; zuZPr11ndqNH9*|p8*fqTL>y~{@L1_(=Bwh_v=r&!+ol^tMHH@(T?Fv?0+{lQ@7kUN zRILNgPld1u_m+YQIDH15>IJ8d!L2>ibj^wtgRPrk->$%(qY=?CdMXTfLJp=pA*Y>x z!pQpzY%LaS1AX zO976X0SI@J)3Ez|F9dgO3+Q~0dh+3+qcHz%`8hRN+J~vEluYFP``QKf6|Qdyv%iOS zon%cpJa|7iV9E&DPzw+Re|GcNRv7b;#G_0el2rK$Fl`|WdIl^3csAatC&Vd8=^B9( zXW-jhjUqmMA9nw(p456{8)({7a|N;{v{kekn?Xzr(pIJwefHu z3X>0w_KzIPs&AoRJ6OF!?$sYj(gq|DostYMkA!FX`bR>yT{pO~m74Wr0e0_^HsHB& z^Zq**#!w19c+L0X&$#Z(9pSZgIXqpil2NPyP$wc-3jFX?e ze0Fs51?YUA`;rzrl5D(V3+(-~@aCh%0zDswi66i<*9t*9JbX{#z?Tc*`3L=;kQsOc z1+uWRvt@C6T2*cX;)=*_RjrPY)Y;R8Hz6J#4GkN*KZ!E~fBqpy` z9@Xkf?C9b--#=4!7X0=LEc*&Bra;-s5Fe{{2yp3SH#>LZj4W8c8YVmiQ=gYWw7<~j zap>Ml&3Xz0wrqe&!!DnDb@CWAYX=p|xhK0Y=ZpSsQQ>Ty4R3()v!L%I5E1gWcP-(7aM-P;PjS6Q({7(Q7hgF|8R&Uj6P z`Y(q=e?#3SP_2slh2TIe8*`+zPx2QooQ3r(VDSRjy%TH>X#-^q2dg2+4a|L6$O*J( zWWc`NuxJjvJ__EO2!H?S+cbhpQLYNSG((QmRSIA2c6i}YY5jfKxn>uuq;+Tau`CBr zyfiHRv|u~Gl&J_$O@I+opn442ycB3x8C8t(9#Ngw-_Go;{J0d&W0ZM zs}*lrfmO@lfli{9S!njSS;)(76N{s;(D+99@CP-5Hvk!F(5E&0zE17E^t|6a@r42F z*24X*{P#{GqoKoHB3oRiu8^iJAL}ML8Kyi7bKeRWN(ihH(Pdx2pxa>kR_~9vvz)W8 zLl>B{0$!UhO&R=!(iPx3g^n$*%<->`w6&)*T8S_`e%B1VM|gdK?5w`VjqM>J-n~g}1P&dMk{uQ7 z-wpGosV8p&Jo-G82y&U4{Nk>G&|I;_mkBs_0%p9d{`s5N!0ugY9e1O`pnW&rJzKGo zaNncw$yy<%`i&&4kd=?s9|kP{Kj_yMe*Qk-UT0wTzdm(LGKwb*ht!MS7qL1JQ`{N} zclLx2m%;l>pw(@@X>(;VNvea&C|ZySkmNy`!2GvFOG|~MvVqE#VDRXxmz)yI!JrZ9 z=@4e%qc{JX?vWSLQ{nqXYMJ(S;Kq*m*DSA63mzW_pR9)$--23obBM{?08JQ>asj41 z2ak4xgMSC)D-Em|)aB6RW|1Ln+*Hii{CE#WCsAY~d01c1l_PX-TZ~t%4xep+B5`@& zmjSWA2X%p;{?D`TxV<+_nIoUC5-`t5hyLwh(@$3)L5-UZy$7kq?ZSZV+o0Et(s`Z}`oNfc>{0 z!_O zG|gKLv%Z%QMUi;%1oA^puEfjKWO!q|gi!*VoLpY`*nq#wjCA;AnViT~s4mHJE9S-b)jy)hO%>6Ul zfb!+x%xU;z{nbHE5m9owR;iM@*3*(j@b-(|O(KT_BBP+qt!lmFB4VVT?@IZ32_;04 zbI3T+*f;&&9hGQ8CctAs8@BNO8rdPpdi_o6TWj%>KUJ*@xH`}-R<86F*`me*qfPMw5% zTfqK3p-)ivKMBvhre-~vfb-{|M+<3Q>Mbf(m-inZulD|Xw}DN$lmLnph3jsT=Aq46 zLAeTYZ{FrGUFliPz~6h|y_ezZd4-#Xa#awN3ze#iszI0D5M}Ya)<`8*l?|LYE+;o@ zmcrU)aN>yUpm+3v*FSO}@2~*7{)D@)hm?!n-%~;fIlZY=Rn6450^clxp*?)tbRgj7 zK@EuqB@|b;o?aab(_YBu$}z}+OWRx3^55QjRZ>Tqw}YEH2sxFlm^06O`HEcg_f(R| z_{^Vn`At?6Q~}`H8{wg6;O0&_I}kp8*H^JgasPec!1Om@f)BLB zyYzxr=Yrj!mVjum!_eNaWIlgR|Hegb!NSFdiG34I=ehPjBUu%6I@XgGIkEGLk@ zK&=LnK^z^c7OSuVbEb=AMkpbn1k7Ip)vBv)Mpj_)7w~v@-_>ZEEiijIG{4FF(kx%Z zn9g1lMT_}w!}iUgWh4^}r+BKcWy9|6@XZ3)wH1mKmr|5)gMW4|m7VSUSuyXUq9s6? z-|Fzw#~~~nTHK=MBG`f2*TA2@OLlswVA#vhuA_Qj{PY=krjO`cd5gqy()If0TP34= z$XKXW8;k|4?&?yCIDQO1odqvEA{}T>9t}AoIkYUO%k6MYTSAWq;KmLj$Lot^H&3^K zFyLYqoH+r<4#BQJq>IY_J@WJML!L>*#Kyr#E8&_39wqGp-z_b1AT4l{CTqd6|C%3N=9m07{gGTROq*_d)$85EGtr z%_@ z-uE|jA`BU!c1U1wy8RP}iq%@Ny0j-RS4Bw3MNsi^IVz#9tDwo~a~o1R z?fRXo4ObsQ{cphR>0EFB)K#B0#_@p zUV^$brqlQ)Xx|l@wT059WwHbUS>;7w;CU{M8BrbGvmKJp%j8eKD8c*GWa${2mMT|9 zn)AwViqP3a)5>9YUXGj#a-EJDoW$y6SA#(|1cOojG#W+R&KeHk5nzpw(vk2;IZTL( zkt;e@T)OBY5*Mo57)q7){Fw~_{0?2DbmElM#{KXGY+MD$52K+8>c1#fQpl=RXK30Q z63a;ZCX0d%uKN=f=Z@`gbGb;zVVC9>E^EYQlRxctxpI>gPGT|`oP=b^Atcvj4wHU$ z|NFgMv+>d^cR9O1k{b)lT5sijxt}iw$7TM0waz*dux}4cc}9xggVEL21QmdYh=LhQq1lc8$x_$2I$%cP zfVb8vlt!4r2BRJV)rn=66Ck_dsG1e63yt93-pxn|z@qrR?LevWP`iO1KSe&*P(h9Q z5}#60wM;rA`Ag+0LzpQ?zq%k3`!sw{My}RouI|=p>6>Rsp8xknRFU%>6rKDJDi_i=UVvk zLp|P_pnQb7*QxzpCa`4*SqkU;xt6pi6x?xL577!y}w!6(z*Ns#sk_*h*KB zQ^fdUqP`em`0ojrBNur&^qc(OJ23F?B-h;k?f_DroBkG@>o+kM(NA}AO zoEt@oLeb(7p8&-Yp>#zkU0&{`L@8-`9Tg+Vjgc`zVwYN9Syurex%wyCfi#;WoF-os z6^RQ;lJt1=ARIj)*O`-2E|hdCe=4V!A}v)KD%5gAP!1qEMl5JeP@16fjViTdcXTL> z=I-r6I=;a9B)P8Cwk;|~NGvuEV&mn{qQ%7`i!UZ|jwUTUPi}Onh;oU=#$~KD6`{B* z{cO18&kQ^(J24=MqO;$FKexcyGjQRo)G3}%f^$jI$F88@a0o%s-F+M?!Yr2Z##MTK zX@c?rK}8tA9q%}R-G3C^eWf_9grf(pOknRX5kWOoH5U``&mLIviR6A+!^Oq5gh^K! zv&DIt!Dy1qaHBCNE8H~@c4uaJ?#%P7Ovy&i%#=F9j0_?3j5KK?dB^?YMynF475Hcd zj0+%zhChFURGX;0I^2wNm0EgjX@c?rs?}Aq6jE)lGk_}2Q!c_wkHLpONQ_HW;I33@ z*s}wcep+z%+Uho_P+r}F3In!ngEs=Klk)Cu5{Hb5&U?<-fU32H;B7iko|iGNk>@TQ z0oCiM^*>9!2!Cx0toz^f2TUG$d3WoI?ne}ieOpo_3IdgD!npS(j^7C=Z=ihYfKYVK2RiHBu(rJBY9|F;4K)CG>0$dic6$|Y@m1oyzs8X zxcrHTC>Zk=lqscNjBNovcpWyZ47{<<%n;E*lfp(&v^W$mrPr7ysC=Meb%=;|zq6Z= z0C^xbMzq`Em8W6rR`u5LnZR{TVB~8OPw^KXc^+~)x2mf}T-r)ek3{atpUSpb|@_`D~a(dxi2?ij;A=$=(j9=Hn>!a0+ zm|bN!Ltlb6clh>R>NbYw-jvfomAI1uISrinl+?ZjGL9dFv@G}IYzE3y)N4!=R6bCu zyxQVP%aFzgfsXla!x!_^<56}XJRHWoE9E)9Ktf3v{{fUJp&oa#0t=?Y;`xC;#zzlI z{*^m|asVaD=ryJZ%1eYgq4J0PQgjrHgm>-zU zFlH*$zee4)vjQ78!t2il$GkaxLNeLi5tI!Hl80IKTGIsO1;Qg`0;!zfojxuZ%)x-9 zQ!r*AoIItT36}{pYy{7}BT1Xy;-S&dc*ivPoDi}>Vg6_rPZN|^h%cr#LYbMOLln&TeZ2(Dvoh6Z zMJ7!~hdhm~BYBFRgWRn{a zbxjRTP#!}?Mbm&-9VyA7@yzdzhfhCL51PA3s(mLIJx!7h+jWI!r%2m#RedKbuzDp- zemXQ7TBfI|={y+`MF)+`M+x*0T#0xLlBlV&RcLS>-4lJ4vuM7u=Jv7J6 zWL76A-PJ`ClvgIYU2*YT4KakdQ{k-_#nsD?OA-$JxJ-K4Wu%4fc!hcz*Yp7G-v--NrS({IfhoR%u(>Q_=v2oH?O2x%HpQP8DCMYkEa#3xg53@>P zaj4>^j_~eRP^GH6GC^Jo(gr*_QaTrhM~3E@C6ttyo4a;pb|C4bUTd15yui6r?z5sD zNZnanLTHXbm;2z2PoY$4b-_6mODYTKH2@~h4b8DjET@)HZ?grj*r6t^lRv;YOJ8Ei|}3G{(6G zFpeC6Y`a*334~pC5=bE^0wRkd44^EcpfkXT zBH+m4prGgoIt~hm=)kCyiYy8)BbpfjLD>b_K|nUikg!A`tN}t;64L4U zmXOgg@Xl-)JX&%gODeVMOPGN-`voE0sIxWIMFq+iGR{gnDKiZiE8SZ7w&2Cd!~MjA zsT*tkq%IUlJp#}E5f;voZYlUi zSUf8$B9&tZRj+<9^*e}bRI=>paKP<%o2w(1>4smo={!?`@)5Ti_U$$otQipmw>2wS z_ZNSMY)9Do}-B`(|14coV5?phdfqku)3}0*?=aPnJT{79s{#YZ8?L zRxE)*4?@!J0=yv?OdJVsz6h=?>lN^`klut7X2RHM`M0(TH12E-F%`XUkOu>Mwn5qn zontCcgM=`1Zvk0?E9%+M*=TjnGCm-wH|!wME0EK%!X%rN+^amrcZ>C zPfE_2)pG=w@uI!^!_39<5C~-2c9pm|GaKYv)=0w*MFq-dP8@;VKYM@ryMf3E=!Q!sh7Z%_WUOJP7~*t$`ch*pC-vw*M&cy=_*SPU)h3oJYTp*vKm;$8Ti z!13d-eWT7V6(}3numa9!d!JC3fd&mFxi%0ea|;Z81!gaUj$LKqSPi*xAY!sN5uWY_ z|Cw31_q2B>4D1T?5@fk&^%Iz5cvDT9$tmBc$xyyh@!PsoIP@G~vdt8*ZYi8OsdGyO z$_93Afuvu}c~QX*=sT=<3)lsRK-b>z#ZNF|3`9oz<~4ctn-|eY#Z{HmnH#4`qyX=N#b9G*s+*No@&EN%BHbj?$ zHf_CoATFRtz^Zj>}Tq+#yc>rE|8;1NH>ed6d!?$w0p2t-Pu5>IHGPiRYJ^V!nx{RqlTjUKlS^$!)^E=@~HYIXHDp=afl- zdKvrs#$Kl)brQPtGS^PX1;oZexk|Djdf7&iy0tbu^aPCl7xa715GJSZ!UV=C-5Hql z8oV*A=&L+tUVueO4XoAOX%=0 zG;aqnQCITT3gaAjyr%W5VZun*wyyZ?Tr*a@!uDORlnC|}<FYloVL{UsyH|wypPF ztb&5zkpb|+1c;0@x3qI2xt)F5$f1j3hEon;KTtz$VUoso!K~%7yfV8C2?J73K*Drb zoB(^aODpkfQL&nMO7TsgWqXKg43#R%2mLa>ErIe*+)yCx3`~CqW=;yMx2 ziOb@cH~^;$hWCZ}U+CPi#@ZmD3s7HeVS$SmB!jW0zR7xAHU_llf>(n z%|Sq8pq1LfB8Lya+0)RrvlJ-{#Lu3?5T;9+a(XmsAk3XD{r*ZK8R@WcA*@>=U36;J zfe?qi-jtn`0#^PAqxx%5rf1UQm%{n_2^hW&}Mud{bIRHzD-s>&W)aeGvyfUQ5nUmuaq zK#H%taVbM2`F!RPMjZ|pG$4w1<5hx<5!z{WAFB8_Ai|3GsWX)`X5dpj|g;*c@&O zHOigX{ z?gE6!nd|Z#fuB1Mdw0OL4RVsTbF&0_D&7eRm0I!lc82C{q5d7>S$SfgJY!;}6L3(j zaXFI?>sP?n)8VJ@wE?HSJO+H`5va<5E|~qbH&Q2F(p4I@fNC|R0^}{x5SpiUiyPVC zKAR@Vxt1(8uuHX6!ALAe;IKpGwa4r5%-oskfYwBvB{sEm!`PZEJRxcYgKfRtWQ{7FW- zwQeYi|2dnc%jLi#A@`1lhgidlQWQlgPT~wN>Z$^^iGcROQ52;(+2|3cyaEM!lBXz2 z@p6?0O!cIVI=)MnQdYlY#ft zZi=E50q^A}PS^6F07@HPR3){aq9}eM)$pG3twZg+#xI@&hO7M)Me!rU3lb-99+Zcr zKs&Xgq9``A3}}C?A21_O)q$-*S+%F4C^m5#xE;7=(RQbaKXeeSwy7wJz4Y@YPGCNa zAQ6ZJTBuzWMJXhcfOpOOpu@r+4FP@vnyY;kMe&ghKx?EjysZKSPytwj1ac~hqF5mr zXbG6^AnWkqMQQ>NqHhlFzd4eqY7O4uJyMlUj^!oGXfQg=C void; + +export default class RuntimeTrafficMirroringTransport implements RuntimeTransport { + private readonly transport: RuntimeTransport; + private readonly fallbackTransport: RuntimeTransport; + private missedMessageCount: number; + private ackMessageQueue: AckMessageQueue; + private readonly fallbackAckWaitMs: number; + + constructor(device: Device, fallbackAckWaitMs: number = FALLBACK_ACK_WAIT_MS) { + this.transport = new RuntimeTransportImplSocketIO(device); + this.fallbackTransport = new RuntimeTransportImplPubNub(device); + this.missedMessageCount = 0; + this.ackMessageQueue = new AckMessageQueue(); + this.fallbackAckWaitMs = fallbackAckWaitMs; + } + + subscribe(channel: string) { + this.transport.subscribe(channel); + this.fallbackTransport.subscribe(channel); + } + + unsubscribe() { + this.transport.unsubscribe(); + this.fallbackTransport.unsubscribe(); + } + + listen(listener: ListenerType) { + this.transport.listen(this.onMessage.bind(this, false, listener)); + this.fallbackTransport.listen(this.onMessage.bind(this, true, listener)); + } + + publish(message: object) { + if (!this.shouldUseFallbackAlways()) { + Logger.comm('[RuntimeTrafficMirroringTransport] publish message from primary transport'); + this.transport.publish(message); + } else { + Logger.warn( + `[RuntimeTrafficMirroringTransport] publish message from fallback transport - primaryTransportConnected[${this.transport.isConnected()}] missedMessageCount[${ + this.missedMessageCount + }]` + ); + this.fallbackTransport.publish(message); + } + } + + isConnected(): boolean { + throw new Error('Should not reach this code path.'); + } + + private shouldUseFallbackAlways() { + return ( + !this.transport.isConnected() || + this.missedMessageCount >= FALLBACK_ALWAYS_AFTER_MISSED_THRESHOLD + ); + } + + private onMessage = async ( + fromFallback: boolean, + upperLayerListener: ListenerType, + payload: RuntimeMessagePayload + ) => { + if (this.shouldUseFallbackAlways()) { + Logger.warn('[RuntimeTrafficMirroringTransport] ack upper from fallback transport'); + upperLayerListener(payload); + return; + } + + const messageString = JSON.stringify(payload.message); + + // If the message is acked in the queue, it means the message already passed to upper listener. + // Either primary or fallback transport receives the duplicated message, we can simply skip it. + const acked = await this.ackMessageQueue.findMessageStringAsync(messageString); + if (acked) { + return; + } + + if (!fromFallback) { + Logger.comm('[RuntimeTrafficMirroringTransport] ack upper from primary transport'); + this.ackMessageQueue.enqueueMessageStringAsync(messageString); + upperLayerListener(payload); + } else { + // In case the fallback transport receives message before primary transport, + // we will still wait `this.fallbackAckWaitMs` to let primary transport go first. + setTimeout(async () => { + if (!(await this.ackMessageQueue.findMessageStringAsync(messageString))) { + this.missedMessageCount += 1; + this.ackMessageQueue.enqueueMessageStringAsync(messageString); + upperLayerListener(payload); + Logger.warn('[RuntimeTrafficMirroringTransport] ack upper from fallback transport'); + } + }, this.fallbackAckWaitMs); + } + }; +} + +/** + * A message queue for message deduplication from multiple transports + * + * As we have multiple transports, the application upper layer should not aware it and not send multiple code to remote. + * We do the deduplication in RuntimeTrafficMirroringTransport. + * The philosophy are: + * - Send message from primary transport if it's stable. + * - Receive messages and call callbacks for upper layer from primary transport if it's stable. + * - When fallback transport receives message, it will wait `FALLBACK_ACK_WAIT_MS` and check whether the message is receieved by primary transport. + * = So we need this `AckMessageQueue` to check message is received and acked by primary transport. + * = If the message receieved from fallback transport is acked by primary transport, then we can remove this message from the queue. + * = If the message is not acked, we let the fallback transport to call the upper layer callback and increase the `missedMessageCount`. + * Once `missedMessageCount` exceeds `FALLBACK_ALWAYS_AFTER_MISSED_THRESHOLD`, it means primary transport is not stable enough, so we should we fallback transport always. + * + * To compare the equalness of two messages, this implementation uses JSON.stringify() and compare by strings. + */ +export class AckMessageQueue { + private readonly lock = new AwaitLock(); + private readonly queue: string[] = []; + + constructor(private readonly limit: number = 32) {} + + /** + * Enqueues a new message to the queue + */ + async enqueueMessageStringAsync(messageString: string): Promise { + await this.lock.acquireAsync(); + try { + this.queue.unshift(messageString); + Logger.comm('[AceMessageQueue] enqueue', this.queue.length); + this.maybePurge(); + } finally { + this.lock.release(); + } + } + + /** + * Finds a message from the queue. + * @returns true if the item was in the queue. + */ + async findMessageStringAsync(messageString: string): Promise { + let result = false; + await this.lock.acquireAsync(); + try { + const index = this.queue.findIndex((item) => item === messageString); + if (index >= 0) { + result = true; + } + } finally { + this.lock.release(); + } + return result; + } + + /** + * Purges the queue to fix the size limit. + * This function will remove the oldest items first. + */ + private async maybePurge() { + const queueLength = this.queue.length; + const trimCount = queueLength - this.limit; + if (trimCount > 0) { + this.queue.splice(queueLength - trimCount, trimCount); + Logger.comm('[AceMessageQueue] purge', this.queue.length); + } + } + + /** + * Gets the queue item for specific index + */ + at(index: number): string | null { + return this.queue[index] ?? null; + } + + /** + * Returns the queue size + */ + size(): number { + return this.queue.length; + } +} diff --git a/packages/snack-runtime/src/transports/RuntimeTransport.ts b/packages/snack-runtime/src/transports/RuntimeTransport.ts new file mode 100644 index 00000000..450e749a --- /dev/null +++ b/packages/snack-runtime/src/transports/RuntimeTransport.ts @@ -0,0 +1,43 @@ +import { Platform } from 'react-native'; + +export interface Device { + id: string; + name: string | undefined; + platform: typeof Platform.OS; +} + +export interface RuntimeMessagePayload { + message: Record & { + type: string; + }; +} + +/** + * Interface of the transport for runtime + */ +export interface RuntimeTransport { + /** + * Start the transport and subscribe given channel + */ + subscribe(channel: string): void; + + /** + * Unsubscribe from the transport + */ + unsubscribe(): void; + + /** + * Register listener for the transport + */ + listen(listener: (payload: RuntimeMessagePayload) => void): void; + + /** + * Send a message + */ + publish(message: object): void; + + /** + * Indicate whether the current transport is connected + */ + isConnected(): boolean; +} diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts new file mode 100644 index 00000000..44d2e6ca --- /dev/null +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts @@ -0,0 +1,73 @@ +// Currently maintains one PubNub subscription for communication with a remote machine + +import PubNub from 'pubnub'; + +import * as Logger from '../Logger'; +import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; + +const PRESENCE_TIMEOUT = 600; +const HEARTBEAT_INTERVAL = 60; + +export default class RuntimeTransportImplPubNub implements RuntimeTransport { + private currentChannel: string | null = null; + private readonly device: Device; + private readonly pubnub: PubNub; + + constructor(device: Device) { + this.device = device; + this.pubnub = new PubNub({ + publishKey: 'pub-c-2a7fd67b-333d-40db-ad2d-3255f8835f70', + subscribeKey: 'sub-c-0b655000-d784-11e6-b950-02ee2ddab7fe', + uuid: JSON.stringify(device), + ssl: true, + presenceTimeout: PRESENCE_TIMEOUT, + heartbeatInterval: HEARTBEAT_INTERVAL, + }); + } + + /** + * Initiate PubNub subscription to given `channel`, throw if couldn't connect / timed out. + * Ends existing subscription, if any. + */ + subscribe(channel: string) { + // End existing PubNub subscription, if any + this.unsubscribe(); + + this.currentChannel = channel; + Logger.comm('Subscribing to channel', channel); + this.pubnub.subscribe({ channels: [channel] }); + } + + unsubscribe() { + if (this.currentChannel) { + Logger.comm('Unsubscribing from channel', this.currentChannel); + this.pubnub.unsubscribe({ channels: [this.currentChannel] }); + this.currentChannel = null; + } + } + + /** + * Add a message listener + */ + listen(listener: (payload: RuntimeMessagePayload) => void) { + this.pubnub.addListener({ message: listener }); + } + + /** + * Publish a message to the currently subscribed channel, if any + */ + publish(message: object) { + if (this.currentChannel) { + Logger.comm('Sending message', message); + this.pubnub.publish({ + channel: this.currentChannel, + message: { ...message, device: this.device }, + }); + } + } + + isConnected(): boolean { + // We don't have a way to get current connection status from PubNub SDK, assuming it's connected. + return true; + } +} diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts new file mode 100644 index 00000000..e3f8c741 --- /dev/null +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts @@ -0,0 +1,81 @@ +import Constants from 'expo-constants'; +import { io } from 'socket.io-client'; +import type { Socket } from 'socket.io-client'; + +import * as Logger from '../Logger'; +import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; + +const SNACKPUB_URL_STAGING = 'https://staging-snackpub.expo.dev'; +const SNACKPUB_URL_PRODUCTION = 'https://snackpub.expo.dev'; + +interface ServerToClientEvents { + message: (data: { channel: string; sender: string } & RuntimeMessagePayload) => void; + joinChannel: (data: { channel: string; sender: string }) => void; + leaveChannel: (data: { channel: string; sender: string }) => void; + terminate: (reason: string) => void; +} + +interface ClientToServerEvents { + message: (data: { channel: string; message: object; sender: string }) => void; + subscribeChannel: (data: { channel: string; sender: string }) => void; + unsubscribeChannel: (data: { channel: string; sender: string }) => void; +} + +export default class RuntimeTransportImplSocketIO implements RuntimeTransport { + private currentChannel: string | null = null; + private readonly device: Device; + private readonly sender: string; + private readonly socket: Socket; + + constructor(device: Device) { + this.device = device; + this.sender = JSON.stringify(device); + const snackpubURL = + Constants.manifest?.extra?.cloudEnv !== 'production' + ? SNACKPUB_URL_STAGING + : SNACKPUB_URL_PRODUCTION; + this.socket = io(snackpubURL, { transports: ['websocket'] }); + this.socket.on('terminate', (reason) => { + Logger.comm(`Terminating connection: ${reason}`); + this.socket.disconnect(); + }); + } + + subscribe(channel: string) { + this.unsubscribe(); + + this.currentChannel = channel; + Logger.comm('Subscribing to channel', channel); + this.socket.emit('subscribeChannel', { channel, sender: this.sender }); + } + + unsubscribe() { + if (this.currentChannel) { + Logger.comm('Unsubscribing from channel', this.currentChannel); + this.socket.emit('unsubscribeChannel', { + channel: this.currentChannel, + sender: this.sender, + }); + this.currentChannel = null; + } + } + + listen(listener: (payload: RuntimeMessagePayload) => void) { + this.socket.on('message', listener); + } + + publish(message: object) { + if (this.currentChannel) { + Logger.comm('Sending message', message); + this.socket.emit('message', { + channel: this.currentChannel, + message: { ...message, device: this.device }, + sender: this.sender, + }); + } + } + + isConnected(): boolean { + return this.socket.connected; + } +} diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts new file mode 100644 index 00000000..bb47dc29 --- /dev/null +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts @@ -0,0 +1,130 @@ +import * as Logger from '../Logger'; +import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; + +/** + * The Snack web-player is served directly from S3. This means that anyone + * can load the web-player. To prevent businesses from using the web-player + * excessively and driving up cost, access to the web-player is limited to + * certain origins; and to localhost to allow development. + * + * Security wise, this means that: + * - Anyone can to load the web-player from S3 + * - Websites need to provide their own origin to the web-player + * , otherwise no communication will be possible. The origin is + * passed to postMessage() and used to check incomming messages. + * - Origin is checked against a white-list of allowed origins. + * + * Scenarios: + * [snack.expo.dev] -> [https://s3.webplayer?origin=snack.expo.dev] (allowed) + * [snack.expo.dev] -> [https://s3.webplayer?origin=expo.dev] (allowed, but fails on postMessage & recv message check) + * [badsite.com] -> [https://s3.webplayer?origin=badsite.com] (disallowed) + * [badsite.com] -> [https://s3.webplayer?origin=snack.expo.io] (allowed, but fails on postMessage & recv message check) + */ +const allowedOrigins = [ + 'https://snack.expo.io', + 'https://staging.snack.expo.io', + 'https://snack.expo.dev', + 'https://staging-snack.expo.dev', + 'http://snack.expo.test', + 'https://snack.expo.test', + // Draftbit + 'https://build.draftbit.com', + 'https://build.stagingbit.com', + // Codecademy + 'https://codecademy.com', + 'https://www.codecademy.com', + 'https://jackdaw.codecademy.com', + 'https://staging.codecademy.com', + 'https://production.codecademy.com', + // Sizze + 'https://dashboard.sizze.io', + 'https://app.sizze.io', +]; + +function isAllowedOrigin(origin: string): boolean { + return allowedOrigins.includes(origin) || origin.startsWith('http://localhost:'); +} + +type Listener = (payload: { message: any }) => void; + +export default class RuntimeTransportImplWebPlayer implements RuntimeTransport { + private readonly device: Device; + private readonly listeners: Listener[] = []; + private readonly origin: string | undefined; + // If we're in an iframe, grab `parent`, otherwise assume we're in popup and grab `opener` + private readonly parent: Window | null = window !== window.parent ? window.parent : window.opener; + + constructor(device: Device) { + this.device = device; + + // The origin of the parent frame is provided in the url. This is necessary as it is not + // possible to read the origin from the parent due to cross-origin restrictions. + const requestedOrigin = new URL(document.URL).searchParams.get('origin') ?? ''; + if (!requestedOrigin) { + Logger.comm_error('No origin provider in the URL'); + } + this.origin = isAllowedOrigin(requestedOrigin) ? requestedOrigin : undefined; + if (!this.origin) { + Logger.comm_error(`Access to origin "${requestedOrigin} is forbidden`); + } + } + + subscribe(channel: string) { + this.unsubscribe(); + + if (this.origin) { + Logger.comm('Connecting to parent'); + this.parent?.postMessage( + JSON.stringify({ type: 'CONNECT', device: this.device }), + this.origin + ); + window.addEventListener('message', this.onMessage, false); + } + } + + unsubscribe() { + if (this.origin) { + Logger.comm('Disconnecting from parent'); + this.parent?.postMessage( + JSON.stringify({ type: 'DISCONNECT', device: this.device }), + this.origin + ); + window.removeEventListener('message', this.onMessage, false); + } + } + + listen(listener: (payload: RuntimeMessagePayload) => void) { + this.listeners.push(listener); + } + + publish(message: object) { + if (this.origin) { + Logger.comm('Sending message', message); + parent?.postMessage( + JSON.stringify({ + type: 'MESSAGE', + message: { ...message, device: this.device }, + }), + this.origin + ); + } + } + + isConnected(): boolean { + return parent != null; + } + + private onMessage = (event: MessageEvent) => { + if (!isAllowedOrigin(event.origin) || typeof event.data !== 'string') { + return; + } + + try { + const message = JSON.parse(event.data); + + this.listeners.forEach((listener) => listener({ message })); + } catch { + Logger.comm_error('Failed to parse message', event.data); + } + }; +} diff --git a/packages/snack-runtime/src/transports/__tests__/RuntimeTrafficMirroringTransport-test.ts b/packages/snack-runtime/src/transports/__tests__/RuntimeTrafficMirroringTransport-test.ts new file mode 100644 index 00000000..3c994fb6 --- /dev/null +++ b/packages/snack-runtime/src/transports/__tests__/RuntimeTrafficMirroringTransport-test.ts @@ -0,0 +1,221 @@ +import * as Logger from '../../Logger'; +import RuntimeTrafficMirroringTransport, { + AckMessageQueue, +} from '../RuntimeTrafficMirroringTransport'; +import type { ListenerType } from '../RuntimeTrafficMirroringTransport'; +import type { Device, RuntimeMessagePayload } from '../RuntimeTransport'; +import RuntimeTransportImplPubNub from '../RuntimeTransportImplPubNub'; +import RuntimeTransportImplSocketIO from '../RuntimeTransportImplSocketIO'; + +jest.mock('../../Logger'); +jest.mock('../RuntimeTransportImplPubNub'); +jest.mock('../RuntimeTransportImplSocketIO'); + +describe(RuntimeTrafficMirroringTransport, () => { + const fallbackAckWaitMs = 100; + + const device: Device = { + id: 'testId', + name: 'testDeviceName', + platform: 'ios', + }; + + const mockTransportPrimary = RuntimeTransportImplSocketIO as jest.MockedClass< + typeof RuntimeTransportImplSocketIO + >; + const mockTransportFallback = RuntimeTransportImplPubNub as jest.MockedClass< + typeof RuntimeTransportImplPubNub + >; + + afterEach(() => { + jest.clearAllMocks(); + }); + + function setPrimaryTransportConnected(isConnected: boolean) { + const mockIsConnected = mockTransportPrimary.mock.instances[0] + .isConnected as jest.MockedFunction['isConnected']>; + mockIsConnected.mockReturnValue(isConnected); + } + + function emitCallbacks( + transport: typeof RuntimeTransportImplSocketIO | typeof RuntimeTransportImplPubNub, + message: RuntimeMessagePayload['message'] + ) { + const mockTransportClass = transport as jest.MockedClass; + const mockTransport = mockTransportClass.mock.instances[0]; + const mockListener = mockTransport.listen as jest.MockedFunction< + InstanceType['listen'] + >; + const mockListenerCallback = mockListener.mock.calls[0][0]; + mockListenerCallback({ message }); + } + + function waitAsync(timeMs: number): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, timeMs); + }); + } + + function expectAckListenerCalledFrom(primaryTransport: boolean) { + if (primaryTransport) { + const mockLogger = Logger.comm as jest.MockedFunction; + expect(mockLogger).toBeCalledWith( + '[RuntimeTrafficMirroringTransport] ack upper from primary transport' + ); + } else { + const mockLogger = Logger.warn as jest.MockedFunction; + expect(mockLogger).toBeCalledWith( + '[RuntimeTrafficMirroringTransport] ack upper from fallback transport' + ); + } + } + + it('should subscribe from all transports', () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + transport.subscribe('test'); + expect(mockTransportPrimary.mock.instances[0].subscribe).toBeCalled(); + expect(mockTransportFallback.mock.instances[0].subscribe).toBeCalled(); + }); + + it('should unsubscribe from all transports', () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + transport.unsubscribe(); + expect(mockTransportPrimary.mock.instances[0].unsubscribe).toBeCalled(); + expect(mockTransportFallback.mock.instances[0].unsubscribe).toBeCalled(); + }); + + it('should publish from primary transport when it is stable', () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + setPrimaryTransportConnected(true); + transport.publish({ a: 'a' }); + expect(mockTransportPrimary.mock.instances[0].publish).toBeCalled(); + expect(mockTransportFallback.mock.instances[0].publish).not.toBeCalled(); + }); + + it('should publish from fallback transport when the primary transport is not connected', () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + setPrimaryTransportConnected(false); + transport.publish({ a: 'a' }); + expect(mockTransportPrimary.mock.instances[0].publish).not.toBeCalled(); + expect(mockTransportFallback.mock.instances[0].publish).toBeCalled(); + }); + + it('should emit upper listener callback only once - primary is connected', async () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + setPrimaryTransportConnected(true); + + const mockUpperListener = jest.fn() as jest.MockedFunction; + transport.listen(mockUpperListener); + emitCallbacks(mockTransportPrimary, { a: 'a', type: 'test' }); + emitCallbacks(mockTransportFallback, { a: 'a', type: 'test' }); + await waitAsync(500); + + expect(mockUpperListener).toBeCalledTimes(1); + expect(mockUpperListener).toBeCalledWith({ message: { a: 'a', type: 'test' } }); + expectAckListenerCalledFrom(/* primaryTransport */ true); + }); + + it('should emit upper listener callback only once - primary is disconnected', async () => { + const transport = new RuntimeTrafficMirroringTransport(device, fallbackAckWaitMs); + setPrimaryTransportConnected(false); + + const mockUpperListener = jest.fn() as jest.MockedFunction; + transport.listen(mockUpperListener); + emitCallbacks(mockTransportFallback, { a: 'a', type: 'test' }); + await waitAsync(500); + + expect(mockUpperListener).toBeCalledTimes(1); + expect(mockUpperListener).toBeCalledWith({ message: { a: 'a', type: 'test' } }); + expectAckListenerCalledFrom(/* primaryTransport */ false); + }); + + it('should emit upper listener callback only once - primary is too slow', async () => { + const transport = new RuntimeTrafficMirroringTransport(device, 100); + setPrimaryTransportConnected(true); + + const mockUpperListener = jest.fn() as jest.MockedFunction; + transport.listen(mockUpperListener); + setTimeout(() => { + emitCallbacks(mockTransportPrimary, { a: 'a', type: 'test' }); + }, 200); + emitCallbacks(mockTransportFallback, { a: 'a', type: 'test' }); + await waitAsync(500); + + expect(mockUpperListener).toBeCalledTimes(1); + expect(mockUpperListener).toBeCalledWith({ message: { a: 'a', type: 'test' } }); + expectAckListenerCalledFrom(/* primaryTransport */ false); + }); + + it('should publish from primary transport when its missing rate lower than 3 times', async () => { + const transport = new RuntimeTrafficMirroringTransport(device, 100); + setPrimaryTransportConnected(true); + + const mockUpperListener = jest.fn() as jest.MockedFunction; + transport.listen(mockUpperListener); + emitCallbacks(mockTransportFallback, { a: 'a', type: 'test' }); + emitCallbacks(mockTransportFallback, { b: 'b', type: 'test' }); + await waitAsync(500); + + expect(mockUpperListener).toBeCalledTimes(2); + transport.publish({ a: 'a' }); + expect(mockTransportPrimary.mock.instances[0].publish).toBeCalled(); + expect(mockTransportFallback.mock.instances[0].publish).not.toBeCalled(); + }); + + it('should publish from fallback transport when its missing rate is too high', async () => { + const transport = new RuntimeTrafficMirroringTransport(device, 100); + setPrimaryTransportConnected(true); + + const mockUpperListener = jest.fn() as jest.MockedFunction; + transport.listen(mockUpperListener); + emitCallbacks(mockTransportFallback, { a: 'a', type: 'test' }); + emitCallbacks(mockTransportFallback, { b: 'b', type: 'test' }); + emitCallbacks(mockTransportFallback, { c: 'c', type: 'test' }); + emitCallbacks(mockTransportFallback, { d: 'd', type: 'test' }); + emitCallbacks(mockTransportFallback, { e: 'e', type: 'test' }); + await waitAsync(500); + + expect(mockUpperListener).toBeCalledTimes(5); + transport.publish({ a: 'a' }); + expect(mockTransportPrimary.mock.instances[0].publish).not.toBeCalled(); + expect(mockTransportFallback.mock.instances[0].publish).toBeCalled(); + }); +}); + +describe(AckMessageQueue, () => { + it(`findMessageAsync should return false for empty queue`, async () => { + const queue = new AckMessageQueue(3); + const result = await queue.findMessageStringAsync(JSON.stringify({})); + expect(result).toBe(false); + }); + + it(`findMessageAsync should return false when no matching item in queue`, async () => { + const queue = new AckMessageQueue(3); + await queue.enqueueMessageStringAsync(JSON.stringify({ '1': '1' })); + const result = await queue.findMessageStringAsync(JSON.stringify({ '2': '2' })); + expect(result).toBe(false); + }); + + it(`findMessageAsync should return true when matching item in queue`, async () => { + const queue = new AckMessageQueue(3); + await queue.enqueueMessageStringAsync(JSON.stringify({ '1': '1' })); + const result = await queue.findMessageStringAsync(JSON.stringify({ '1': '1' })); + expect(result).toBe(true); + }); + + it(`enqueueMessageAsync should remove oldest items and cut the queue size to fit limit`, async () => { + const queue = new AckMessageQueue(3); + await queue.enqueueMessageStringAsync(JSON.stringify({ '1': '1' })); + await queue.enqueueMessageStringAsync(JSON.stringify({ '2': '2' })); + await queue.enqueueMessageStringAsync(JSON.stringify({ '3': '3' })); + await queue.enqueueMessageStringAsync(JSON.stringify({ '4': '4' })); + await queue.enqueueMessageStringAsync(JSON.stringify({ '5': '5' })); + + expect(queue.size()).toBe(3); + expect(queue.at(0)).toEqual(JSON.stringify({ '5': '5' })); + expect(queue.at(1)).toEqual(JSON.stringify({ '4': '4' })); + expect(queue.at(2)).toEqual(JSON.stringify({ '3': '3' })); + }); +}); diff --git a/packages/snack-runtime/tsconfig.json b/packages/snack-runtime/tsconfig.json new file mode 100644 index 00000000..166b324b --- /dev/null +++ b/packages/snack-runtime/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + + }, + "include": ["src/**/*"] +} diff --git a/packages/snack-runtime/types/AssetRegistry.d.ts b/packages/snack-runtime/types/AssetRegistry.d.ts new file mode 100644 index 00000000..768414b8 --- /dev/null +++ b/packages/snack-runtime/types/AssetRegistry.d.ts @@ -0,0 +1,19 @@ +declare module 'react-native/Libraries/Image/AssetRegistry' { + export type PackagerAsset = { + __packager_asset: boolean; + fileSystemLocation: string; + httpServerLocation: string; + width?: number; + height?: number; + scales: number[]; + fileHashes?: string[]; + uri?: string; + hash: string; + name: string; + type: string; + }; + + export function registerAsset(asset: Partial): number; + + export function getAssetByID(assetId: number): PackagerAsset; +} diff --git a/packages/snack-runtime/types/canvaskit-wasm.d.ts b/packages/snack-runtime/types/canvaskit-wasm.d.ts new file mode 100644 index 00000000..987c4b26 --- /dev/null +++ b/packages/snack-runtime/types/canvaskit-wasm.d.ts @@ -0,0 +1,3 @@ +declare module 'canvaskit-wasm/bin/full/canvaskit' { + export { default } from 'canvaskit-wasm'; +} diff --git a/packages/snack-runtime/vendor/README.md b/packages/snack-runtime/vendor/README.md new file mode 100644 index 00000000..416417cc --- /dev/null +++ b/packages/snack-runtime/vendor/README.md @@ -0,0 +1,20 @@ +# Vendored libraries + +## SystemJS + +We vendor SystemJS because it doesn't run in React Native by default. We have done the following changes in the vendored code: + +1. Replaced code that assigned baseURI to `document.baseURI` so we can run the app in the chrome debugger. +2. Removed all dynamic `require` expressions so that React Native packager can bundle the code. +3. Removed SystemJS's node detection stuff so it doesn't try to require node native modules. +4. Removed requiring node native modules such as 'fs'. +5. Replaced the `eval` with a `global.evaluate` which we assign in `Modules.js`. + +## Babel Standalone + +We vendor Babel Standalone for 2 reasons: + +1. We want to remove all the plugins and presets bundled by default, otherwise metro takes forever for the build. +2. When including the plugins and presets we need, we want to mock node built-ins and hence need to run it through webpack. We can include them in the same build pipeline for the bundle. + +The script for building exists at: [expo/babel-standalone](https://github.com/expo/babel-standalone) diff --git a/packages/snack-runtime/vendor/system.src.d.ts b/packages/snack-runtime/vendor/system.src.d.ts new file mode 100644 index 00000000..fedd86ae --- /dev/null +++ b/packages/snack-runtime/vendor/system.src.d.ts @@ -0,0 +1 @@ +export default SystemJSLoader; diff --git a/packages/snack-runtime/vendor/system.src.js b/packages/snack-runtime/vendor/system.src.js new file mode 100644 index 00000000..96a9de31 --- /dev/null +++ b/packages/snack-runtime/vendor/system.src.js @@ -0,0 +1,4187 @@ +/* esilint-disable prettier */ + +/* + * SystemJS v0.20.0-rc.8 Dev + */ +(function() { + 'use strict'; + + /* + * Environment + */ + var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + var isNode = typeof process !== 'undefined' && process.versions && process.versions.node; + var isWindows = + typeof process !== 'undefined' && + typeof process.platform === 'string' && + process.platform.match(/^win/); + + var envGlobal = typeof self !== 'undefined' ? self : global; + /* + * Simple Symbol() shim + */ + var hasSymbol = typeof Symbol !== 'undefined'; + function createSymbol(name) { + return hasSymbol ? Symbol() : '@@' + name; + } + + /* + * Environment baseURI + */ + var baseURI = 'module://'; + + // sanitize out the hash and querystring + if (baseURI) { + baseURI = baseURI.split('#')[0].split('?')[0]; + baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1); + } else if (typeof process != 'undefined' && process.cwd) { + baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd(); + if (isWindows) baseURI = baseURI.replace(/\\/g, '/'); + } else { + throw new TypeError('No environment baseURI'); + } + + // ensure baseURI has trailing "/" + if (baseURI[baseURI.length - 1] !== '/') baseURI += '/'; + + /* + * LoaderError with chaining for loader stacks + */ + var errArgs = new Error(0, '_').fileName == '_'; + function LoaderError__Check_error_message_for_loader_stack(childErr, newMessage) { + // Convert file:/// URLs to paths in Node + if (!isBrowser) newMessage = newMessage.replace(isWindows ? /file:\/\/\//g : /file:\/\//g, ''); + + var message = (childErr.message || childErr) + '\n ' + newMessage; + + var err; + if (errArgs && childErr.fileName) + err = new Error(message, childErr.fileName, childErr.lineNumber); + else err = new Error(message); + + var stack = childErr.originalErr ? childErr.originalErr.stack : childErr.stack; + + if (isNode) + // node doesn't show the message otherwise + err.stack = message + '\n ' + stack; + else err.stack = stack; + + err.originalErr = childErr.originalErr || childErr; + + return err; + } + + /* + * Optimized URL normalization assuming a syntax-valid URL parent + */ + function throwResolveError() { + throw new RangeError('Unable to resolve "' + relUrl + '" to ' + parentUrl); + } + function resolveIfNotPlain(relUrl, parentUrl) { + var parentProtocol = parentUrl && parentUrl.substr(0, parentUrl.indexOf(':') + 1); + + var firstChar = relUrl[0]; + var secondChar = relUrl[1]; + + // protocol-relative + if (firstChar === '/' && secondChar === '/') { + if (!parentProtocol) throwResolveError(relUrl, parentUrl); + return parentProtocol + relUrl; + } else if ( + (firstChar === '.' && + (secondChar === '/' || + (secondChar === '.' && (relUrl[2] === '/' || relUrl.length === 2)) || + relUrl.length === 1)) || + firstChar === '/' + ) { + // relative-url + var parentIsPlain = !parentProtocol || parentUrl[parentProtocol.length] !== '/'; + + // read pathname from parent if a URL + // pathname taken to be part after leading "/" + var pathname; + if (parentIsPlain) { + // resolving to a plain parent -> skip standard URL prefix, and treat entire parent as pathname + if (parentUrl === undefined) throwResolveError(relUrl, parentUrl); + pathname = parentUrl; + } else if (parentUrl[parentProtocol.length + 1] === '/') { + // resolving to a :// so we need to read out the auth and host + if (parentProtocol !== 'file:') { + pathname = parentUrl.substr(parentProtocol.length + 2); + pathname = pathname.substr(pathname.indexOf('/') + 1); + } else { + pathname = parentUrl.substr(8); + } + } else { + // resolving to :/ so pathname is the /... part + pathname = parentUrl.substr(parentProtocol.length + 1); + } + + if (firstChar === '/') { + if (parentIsPlain) throwResolveError(relUrl, parentUrl); + else return parentUrl.substr(0, parentUrl.length - pathname.length - 1) + relUrl; + } + + // join together and split for removal of .. and . segments + // looping the string instead of anything fancy for perf reasons + // '../../../../../z' resolved to 'x/y' is just 'z' regardless of parentIsPlain + var segmented = pathname.substr(0, pathname.lastIndexOf('/') + 1) + relUrl; + + var output = []; + var segmentIndex = undefined; + + for (var i = 0; i < segmented.length; i++) { + // busy reading a segment - only terminate on '/' + if (segmentIndex !== undefined) { + if (segmented[i] === '/') { + output.push(segmented.substr(segmentIndex, i - segmentIndex + 1)); + segmentIndex = undefined; + } + continue; + } + + // new segment - check if it is relative + if (segmented[i] === '.') { + // ../ segment + if ( + segmented[i + 1] === '.' && + (segmented[i + 2] === '/' || i === segmented.length - 2) + ) { + output.pop(); + i += 2; + } else if (segmented[i + 1] === '/' || i === segmented.length - 1) { + // ./ segment + i += 1; + } else { + // the start of a new segment as below + segmentIndex = i; + continue; + } + + // this is the plain URI backtracking error (../, package:x -> error) + if (parentIsPlain && output.length === 0) throwResolveError(relUrl, parentUrl); + + // trailing . or .. segment + if (i === segmented.length) output.push(''); + continue; + } + + // it is the start of a new segment + segmentIndex = i; + } + // finish reading out the last segment + if (segmentIndex !== undefined) + output.push(segmented.substr(segmentIndex, segmented.length - segmentIndex)); + + return parentUrl.substr(0, parentUrl.length - pathname.length) + output.join(''); + } + + // sanitizes and verifies (by returning undefined if not a valid URL-like form) + // Windows filepath compatibility is an added convenience here + var protocolIndex = relUrl.indexOf(':'); + if (protocolIndex !== -1) { + if (isNode) { + // C:\x becomes file:///c:/x (we don't support C|\x) + if (relUrl[1] === ':' && relUrl[2] === '\\' && relUrl[0].match(/[a-z]/i)) + return 'file:///' + relUrl.replace(/\\/g, '/'); + } + return relUrl; + } + } + + var resolvedPromise$1 = Promise.resolve(); + + /* + * Simple Array values shim + */ + function arrayValues(arr) { + if (arr.values) return arr.values(); + + if (typeof Symbol === 'undefined' || !Symbol.iterator) + throw new Error('Symbol.iterator not supported in this browser'); + + var iterable = {}; + iterable[Symbol.iterator] = function() { + var keys = Object.keys(arr); + var keyIndex = 0; + return { + next() { + if (keyIndex < keys.length) + return { + value: arr[keys[keyIndex++]], + done: false, + }; + else + return { + value: undefined, + done: true, + }; + }, + }; + }; + return iterable; + } + + /* + * 3. Reflect.Loader + * + * We skip the entire native internal pipeline, just providing the bare API + */ + // 3.1.1 + function Loader() { + this.registry = new Registry(); + } + // 3.3.1 + Loader.prototype.constructor = Loader; + + function ensureInstantiated(module) { + if (!(module instanceof ModuleNamespace)) + throw new TypeError('Module instantiation did not return a valid namespace object.'); + return module; + } + + // 3.3.2 + Loader.prototype.import = function(key, parent) { + if (typeof key !== 'string') + throw new TypeError('Loader import method must be passed a module key string'); + // custom resolveInstantiate combined hook for better perf + var loader = this; + return ( + resolvedPromise$1 + .then(function() { + return loader[RESOLVE_INSTANTIATE](key, parent); + }) + .then(ensureInstantiated) + //.then(Module.evaluate) + .catch(function(err) { + throw LoaderError__Check_error_message_for_loader_stack( + err, + 'Loading ' + key + (parent ? ' from ' + parent : '') + ); + }) + ); + }; + // 3.3.3 + var RESOLVE = (Loader.resolve = createSymbol('resolve')); + + /* + * Combined resolve / instantiate hook + * + * Not in current reduced spec, but necessary to separate RESOLVE from RESOLVE + INSTANTIATE as described + * in the spec notes of this repo to ensure that loader.resolve doesn't instantiate when not wanted. + * + * We implement RESOLVE_INSTANTIATE as a single hook instead of a separate INSTANTIATE in order to avoid + * the need for double registry lookups as a performance optimization. + */ + var RESOLVE_INSTANTIATE = (Loader.resolveInstantiate = createSymbol('resolveInstantiate')); + + // default resolveInstantiate is just to call resolve and then get from the registry + // this provides compatibility for the resolveInstantiate optimization + Loader.prototype[RESOLVE_INSTANTIATE] = function(key, parent) { + var loader = this; + return loader.resolve(key, parent).then(function(resolved) { + return loader.registry.get(resolved); + }); + }; + + function ensureResolution(resolvedKey) { + if (resolvedKey === undefined) throw new RangeError('No resolution found.'); + return resolvedKey; + } + + Loader.prototype.resolve = function(key, parent) { + var loader = this; + return resolvedPromise$1 + .then(function() { + return loader[RESOLVE](key, parent); + }) + .then(ensureResolution) + .catch(function(err) { + throw LoaderError__Check_error_message_for_loader_stack( + err, + 'Resolving ' + key + (parent ? ' to ' + parent : '') + ); + }); + }; + + // 3.3.4 (import without evaluate) + // this is not documented because the use of deferred evaluation as in Module.evaluate is not + // documented, as it is not considered a stable feature to be encouraged + // Loader.prototype.load may well be deprecated if this stays disabled + /* Loader.prototype.load = function (key, parent) { + return Promise.resolve(this[RESOLVE_INSTANTIATE](key, parent || this.key)) + .catch(function (err) { + throw addToError(err, 'Loading ' + key + (parent ? ' from ' + parent : '')); + }); + }; */ + + /* + * 4. Registry + * + * Instead of structuring through a Map, just use a dictionary object + * We throw for construction attempts so this doesn't affect the public API + * + * Registry has been adjusted to use Namespace objects over ModuleStatus objects + * as part of simplifying loader API implementation + */ + var iteratorSupport = typeof Symbol !== 'undefined' && Symbol.iterator; + var REGISTRY = createSymbol('registry'); + function Registry() { + this[REGISTRY] = {}; + this._registry = REGISTRY; + } + // 4.4.1 + if (iteratorSupport) { + // 4.4.2 + Registry.prototype[Symbol.iterator] = function() { + return this.entries()[Symbol.iterator](); + }; + + // 4.4.3 + Registry.prototype.entries = function() { + var registry = this[REGISTRY]; + return arrayValues( + Object.keys(registry).map(function(key) { + return [key, registry[key]]; + }) + ); + }; + } + + // 4.4.4 + Registry.prototype.keys = function() { + return arrayValues(Object.keys(this[REGISTRY])); + }; + // 4.4.5 + Registry.prototype.values = function() { + var registry = this[REGISTRY]; + return arrayValues( + Object.keys(registry).map(function(key) { + return registry[key]; + }) + ); + }; + // 4.4.6 + Registry.prototype.get = function(key) { + return this[REGISTRY][key]; + }; + // 4.4.7 + Registry.prototype.set = function(key, namespace) { + if (!(namespace instanceof ModuleNamespace)) + throw new Error('Registry must be set with an instance of Module Namespace'); + this[REGISTRY][key] = namespace; + return this; + }; + // 4.4.8 + Registry.prototype.has = function(key) { + return Object.hasOwnProperty.call(this[REGISTRY], key); + }; + // 4.4.9 + Registry.prototype.delete = function(key) { + if (Object.hasOwnProperty.call(this[REGISTRY], key)) { + delete this[REGISTRY][key]; + return true; + } + return false; + }; + + /* + * Simple ModuleNamespace Exotic object based on a baseObject + * We export this for allowing a fast-path for module namespace creation over Module descriptors + */ + // var EVALUATE = createSymbol('evaluate'); + var BASE_OBJECT = createSymbol('baseObject'); + + // 8.3.1 Reflect.Module + /* + * Best-effort simplified non-spec implementation based on + * a baseObject referenced via getters. + * + * Allows: + * + * loader.registry.set('x', new Module({ default: 'x' })); + * + * Optional evaluation function provides experimental Module.evaluate + * support for non-executed modules in registry. + */ + function ModuleNamespace(baseObject /*, evaluate*/) { + Object.defineProperty(this, BASE_OBJECT, { + value: baseObject, + }); + + // evaluate defers namespace population + /* if (evaluate) { + Object.defineProperty(this, EVALUATE, { + value: evaluate, + configurable: true, + writable: true + }); + } + else { */ + Object.keys(baseObject).forEach(extendNamespace, this); + //} + } + // 8.4.2 + ModuleNamespace.prototype = Object.create(null); + + if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + Object.defineProperty(ModuleNamespace.prototype, Symbol.toStringTag, { + value: 'Module', + }); + + function extendNamespace(key) { + Object.defineProperty(this, key, { + enumerable: true, + get() { + return this[BASE_OBJECT][key]; + }, + }); + } + + /* function doEvaluate (evaluate, context) { + try { + evaluate.call(context); + } + catch (e) { + return e; + } + } + + // 8.4.1 Module.evaluate... not documented or used because this is potentially unstable + Module.evaluate = function (ns) { + var evaluate = ns[EVALUATE]; + if (evaluate) { + ns[EVALUATE] = undefined; + var err = doEvaluate(evaluate); + if (err) { + // cache the error + ns[EVALUATE] = function () { + throw err; + }; + throw err; + } + Object.keys(ns[BASE_OBJECT]).forEach(extendNamespace, ns); + } + // make chainable + return ns; + }; */ + + /* + * Register Loader + * + * Builds directly on top of loader polyfill to provide: + * - loader.register support + * - hookable higher-level resolve + * - instantiate hook returning a ModuleNamespace or undefined for es module loading + * - loader error behaviour as in HTML and loader specs, clearing failed modules from registration cache synchronously + * - build tracing support by providing a .trace=true and .loads object format + */ + + var REGISTER_INTERNAL = createSymbol('register-internal'); + + function RegisterLoader$1() { + Loader.call(this); + + this[REGISTER_INTERNAL] = { + // last anonymous System.register call + lastRegister: undefined, + // in-flight es module load records + records: {}, + }; + + // tracing + this.trace = false; + } + + RegisterLoader$1.prototype = Object.create(Loader.prototype); + RegisterLoader$1.prototype.constructor = RegisterLoader$1; + + var INSTANTIATE = (RegisterLoader$1.instantiate = createSymbol('instantiate')); + + // default normalize is the WhatWG style normalizer + RegisterLoader$1.prototype[(RegisterLoader$1.resolve = Loader.resolve)] = function( + key, + parentKey + ) { + return resolveIfNotPlain(key, parentKey || baseURI); + }; + + RegisterLoader$1.prototype[INSTANTIATE] = function(key, processAnonRegister) {}; + + // once evaluated, the linkRecord is set to undefined leaving just the other load record properties + // this allows tracking new binding listeners for es modules through importerSetters + // for dynamic modules, the load record is removed entirely. + function createLoadRecord(state, key, registration) { + return (state.records[key] = { + key, + + // defined System.register cache + registration, + + // module namespace object + module: undefined, + + // es-only + // this sticks around so new module loads can listen to binding changes + // for already-loaded modules by adding themselves to their importerSetters + importerSetters: undefined, + + // in-flight linking record + linkRecord: { + // promise for instantiated + instantiatePromise: undefined, + dependencies: undefined, + execute: undefined, + executingRequire: false, + + // underlying module object bindings + moduleObj: undefined, + + // es only, also indicates if es or not + setters: undefined, + + // promise for instantiated dependencies (dependencyInstantiations populated) + depsInstantiatePromise: undefined, + // will be the array of dependency load record or a module namespace + dependencyInstantiations: undefined, + + // indicates if the load and all its dependencies are instantiated and linked + // but not yet executed + // mostly just a performance shortpath to avoid rechecking the promises above + linked: false, + + error: undefined, + // NB optimization and way of ensuring module objects in setters + // indicates setters which should run pre-execution of that dependency + // setters is then just for completely executed module objects + // alternatively we just pass the partially filled module objects as + // arguments into the execute function + // hoisted: undefined + }, + }); + } + + RegisterLoader$1.prototype[Loader.resolveInstantiate] = function(key, parentKey) { + var loader = this; + var state = this[REGISTER_INTERNAL]; + var registry = loader.registry[loader.registry._registry]; + + return resolveInstantiate(loader, key, parentKey, registry, state).then(function(instantiated) { + if (instantiated instanceof ModuleNamespace) return instantiated; + + // if already beaten to linked, return + if (instantiated.module) return instantiated.module; + + // resolveInstantiate always returns a load record with a link record and no module value + if (instantiated.linkRecord.linked) + return ensureEvaluate( + loader, + instantiated, + instantiated.linkRecord, + registry, + state, + undefined + ); + + return instantiateDeps(loader, instantiated, instantiated.linkRecord, registry, state, [ + instantiated, + ]) + .then(function() { + return ensureEvaluate( + loader, + instantiated, + instantiated.linkRecord, + registry, + state, + undefined + ); + }) + .catch(function(err) { + clearLoadErrors(loader, instantiated); + throw err; + }); + }); + }; + + function resolveInstantiate(loader, key, parentKey, registry, state) { + // normalization shortpath for already-normalized key + // could add a plain name filter, but doesn't yet seem necessary for perf + var module = registry[key]; + if (module) return Promise.resolve(module); + + var load = state.records[key]; + + // already linked but not in main registry is ignored + if (load && !load.module) return instantiate(loader, load, load.linkRecord, registry, state); + + return loader.resolve(key, parentKey).then(function(resolvedKey) { + // main loader registry always takes preference + module = registry[resolvedKey]; + if (module) return module; + + load = state.records[resolvedKey]; + + // already has a module value but not already in the registry (load.module) + // means it was removed by registry.delete, so we should + // disgard the current load record creating a new one over it + // but keep any existing registration + if (!load || load.module) + load = createLoadRecord(state, resolvedKey, load && load.registration); + + var link = load.linkRecord; + if (!link) return load; + + return instantiate(loader, load, link, registry, state); + }); + } + + function createProcessAnonRegister(loader, load, state) { + return function() { + var lastRegister = state.lastRegister; + + if (!lastRegister) return !!load.registration; + + state.lastRegister = undefined; + load.registration = lastRegister; + + return true; + }; + } + + function instantiate(loader, load, link, registry, state) { + return ( + link.instantiatePromise || + (link.instantiatePromise = + // if there is already an existing registration, skip running instantiate + (load.registration + ? Promise.resolve() + : Promise.resolve().then(function() { + state.lastRegister = undefined; + return loader[INSTANTIATE]( + load.key, + loader[INSTANTIATE].length > 1 && createProcessAnonRegister(loader, load, state) + ); + }) + ) + .then(function(instantiation) { + // direct module return from instantiate -> we're done + if (instantiation !== undefined) { + if (!(instantiation instanceof ModuleNamespace)) + throw new TypeError('Instantiate did not return a valid Module object.'); + + delete state.records[load.key]; + if (loader.trace) traceLoad(loader, load, link); + return (registry[load.key] = instantiation); + } + + // run the cached loader.register declaration if there is one + var registration = load.registration; + // clear to allow new registrations for future loads (combined with registry delete) + load.registration = undefined; + if (!registration) + throw new TypeError( + 'Module instantiation did not call an anonymous or correctly named System.register.' + ); + + link.dependencies = registration[0]; + + load.importerSetters = []; + + link.moduleObj = {}; + + // process System.registerDynamic declaration + if (registration[2]) { + link.moduleObj.default = {}; + link.moduleObj.__useDefault = true; + link.executingRequire = registration[1]; + link.execute = registration[2]; + } else { + // process System.register declaration + registerDeclarative(loader, load, link, registration[1]); + } + + // shortpath to instantiateDeps + if (!link.dependencies.length) { + link.linked = true; + if (loader.trace) traceLoad(loader, load, link); + } + + return load; + }) + .catch(function(err) { + throw (link.error = LoaderError__Check_error_message_for_loader_stack( + err, + 'Instantiating ' + load.key + )); + })) + ); + } + + // like resolveInstantiate, but returning load records for linking + function resolveInstantiateDep(loader, key, parentKey, registry, state, traceDepMap) { + // normalization shortpaths for already-normalized key + // DISABLED to prioritise consistent resolver calls + // could add a plain name filter, but doesn't yet seem necessary for perf + /* var load = state.records[key]; + var module = registry[key]; + + if (module) { + if (traceDepMap) + traceDepMap[key] = key; + + // registry authority check in case module was deleted or replaced in main registry + if (load && load.module && load.module === module) + return load; + else + return module; + } + + // already linked but not in main registry is ignored + if (load && !load.module) { + if (traceDepMap) + traceDepMap[key] = key; + return instantiate(loader, load, load.linkRecord, registry, state); + } */ + return loader.resolve(key, parentKey).then(function(resolvedKey) { + if (traceDepMap) traceDepMap[key] = key; + + // normalization shortpaths for already-normalized key + var load = state.records[resolvedKey]; + var module = registry[resolvedKey]; + + // main loader registry always takes preference + if (module && (!load || (load.module && module !== load.module))) return module; + + // already has a module value but not already in the registry (load.module) + // means it was removed by registry.delete, so we should + // disgard the current load record creating a new one over it + // but keep any existing registration + if (!load || (!module && load.module)) + load = createLoadRecord(state, resolvedKey, load && load.registration); + + var link = load.linkRecord; + if (!link) return load; + + return instantiate(loader, load, link, registry, state); + }); + } + + function traceLoad(loader, load, link) { + loader.loads = loader.loads || {}; + loader.loads[load.key] = { + key: load.key, + deps: link.dependencies, + depMap: link.depMap || {}, + }; + } + + /* + * Convert a CJS module.exports into a valid object for new Module: + * + * new Module(getEsModule(module.exports)) + * + * Sets the default value to the module, while also reading off named exports carefully. + */ + function registerDeclarative(loader, load, link, declare) { + var moduleObj = link.moduleObj; + var importerSetters = load.importerSetters; + + var locked = false; + + // closure especially not based on link to allow link record disposal + var declared = declare.call( + envGlobal, + function(name, value) { + // export setter propogation with locking to avoid cycles + if (locked) return; + + if (typeof name === 'object') { + for (var p in name) + if (p !== '__useDefault') { + Object.defineProperty(moduleObj, p, { + get() { + return name[p]; + }, + }); + } + } else { + Object.defineProperty(moduleObj, name, { + get() { + return value; + }, + }); + } + + locked = true; + for (var i = 0; i < importerSetters.length; i++) importerSetters[i](moduleObj); + locked = false; + + return value; + }, + new ContextualLoader(loader, load.key) + ); + + link.setters = declared.setters; + link.execute = declared.execute; + if (declared.exports) link.moduleObj = moduleObj = declared.exports; + } + + function instantiateDeps(loader, load, link, registry, state, seen) { + return ( + link.depsInstantiatePromise || + (link.depsInstantiatePromise = Promise.resolve() + .then(function() { + var depsInstantiatePromises = Array(link.dependencies.length); + + for (var i = 0; i < link.dependencies.length; i++) + depsInstantiatePromises[i] = resolveInstantiateDep( + loader, + link.dependencies[i], + load.key, + registry, + state, + loader.trace && (link.depMap = {}) + ); + + return Promise.all(depsInstantiatePromises); + }) + .then(function(dependencyInstantiations) { + link.dependencyInstantiations = dependencyInstantiations; + + // run setters to set up bindings to instantiated dependencies + if (link.setters) { + for (var i = 0; i < dependencyInstantiations.length; i++) { + var setter = link.setters[i]; + if (setter) { + var instantiation = dependencyInstantiations[i]; + + if (instantiation instanceof ModuleNamespace) { + setter(instantiation); + } else { + setter(instantiation.module || instantiation.linkRecord.moduleObj); + // this applies to both es and dynamic registrations + if (instantiation.importerSetters) instantiation.importerSetters.push(setter); + } + } + } + } + })) + ) + .then(function() { + // now deeply instantiateDeps on each dependencyInstantiation that is a load record + var deepDepsInstantiatePromises = []; + + for (var i = 0; i < link.dependencies.length; i++) { + var depLoad = link.dependencyInstantiations[i]; + var depLink = depLoad.linkRecord; + + if (!depLink || depLink.linked) continue; + + if (seen.indexOf(depLoad) !== -1) continue; + seen.push(depLoad); + + deepDepsInstantiatePromises.push( + instantiateDeps(loader, depLoad, depLoad.linkRecord, registry, state, seen) + ); + } + + return Promise.all(deepDepsInstantiatePromises); + }) + .then(function() { + // as soon as all dependencies instantiated, we are ready for evaluation so can add to the registry + // this can run multiple times, but so what + link.linked = true; + if (loader.trace) traceLoad(loader, load, link); + + return load; + }) + .catch(function(err) { + err = LoaderError__Check_error_message_for_loader_stack(err, 'Loading ' + load.key); + + // throw up the instantiateDeps stack + // loads are then synchonously cleared at the top-level through the clearLoadErrors helper below + // this then ensures avoiding partially unloaded tree states + link.error = link.error || err; + + throw err; + }); + } + + // clears an errored load and all its errored dependencies from the loads registry + function clearLoadErrors(loader, load) { + var state = loader[REGISTER_INTERNAL]; + + // clear from loads + if (state.records[load.key] === load) delete state.records[load.key]; + + var link = load.linkRecord; + + if (!link) return; + + if (link.dependencyInstantiations) + link.dependencyInstantiations.forEach(function(depLoad, index) { + if (!depLoad || depLoad instanceof ModuleNamespace) return; + + if (depLoad.linkRecord) { + if (depLoad.linkRecord.error) { + // provides a circular reference check + if (state.records[depLoad.key] === depLoad) clearLoadErrors(loader, depLoad); + } + + // unregister setters for es dependency load records that will remain + if (link.setters && depLoad.importerSetters) { + var setterIndex = depLoad.importerSetters.indexOf(link.setters[index]); + depLoad.importerSetters.splice(setterIndex, 1); + } + } + }); + } + + /* + * System.register + */ + RegisterLoader$1.prototype.register = function(key, deps, declare) { + var state = this[REGISTER_INTERNAL]; + + // anonymous modules get stored as lastAnon + if (declare === undefined) { + state.lastRegister = [key, deps, undefined]; + } else { + // everything else registers into the register cache + var load = state.records[key] || createLoadRecord(state, key, undefined); + load.registration = [deps, declare, undefined]; + } + }; + + /* + * System.registerDyanmic + */ + RegisterLoader$1.prototype.registerDynamic = function(key, deps, executingRequire, execute) { + var state = this[REGISTER_INTERNAL]; + + // anonymous modules get stored as lastAnon + if (typeof key !== 'string') { + state.lastRegister = [key, deps, executingRequire]; + } else { + // everything else registers into the register cache + var load = state.records[key] || createLoadRecord(state, key, undefined); + load.registration = [deps, executingRequire, execute]; + } + }; + + // ContextualLoader class + // backwards-compatible with previous System.register context argument by exposing .id + function ContextualLoader(loader, key) { + this.loader = loader; + this.key = this.id = key; + } + ContextualLoader.prototype.constructor = function() { + throw new TypeError('Cannot subclass the contextual loader only Reflect.Loader.'); + }; + ContextualLoader.prototype.import = function(key) { + return this.loader.import(key, this.key); + }; + ContextualLoader.prototype.resolve = function(key) { + return this.loader.resolve(key, this.key); + }; + ContextualLoader.prototype.load = function(key) { + return this.loader.load(key, this.key); + }; + + // this is the execution function bound to the Module namespace record + function ensureEvaluate(loader, load, link, registry, state, seen) { + if (load.module) return load.module; + + if (link.error) throw link.error; + + if (seen && seen.indexOf(load) !== -1) return load.linkRecord.moduleObj; + + // for ES loads we always run ensureEvaluate on top-level, so empty seen is passed regardless + // for dynamic loads, we pass seen if also dynamic + var err = doEvaluate(loader, load, link, registry, state, link.setters ? [] : seen || []); + if (err) { + clearLoadErrors(loader, load); + throw err; + } + + return load.module; + } + + function makeDynamicRequire( + loader, + key, + dependencies, + dependencyInstantiations, + registry, + state, + seen + ) { + // we can only require from already-known dependencies + return function(name) { + for (var i = 0; i < dependencies.length; i++) { + if (dependencies[i] === name) { + var depLoad = dependencyInstantiations[i]; + var module; + + if (depLoad instanceof ModuleNamespace) module = depLoad; + else module = ensureEvaluate(loader, depLoad, depLoad.linkRecord, registry, state, seen); + + return module.__useDefault ? module.default : module; + } + } + throw new Error( + 'Module ' + name + ' not declared as a System.registerDynamic dependency of ' + key + ); + }; + } + + // ensures the given es load is evaluated + // returns the error if any + function doEvaluate(loader, load, link, registry, state, seen) { + seen.push(load); + + var err; + + // es modules evaluate dependencies first + // non es modules explicitly call moduleEvaluate through require + if (link.setters) { + var depLoad, depLink; + for (var i = 0; i < link.dependencies.length; i++) { + depLoad = link.dependencyInstantiations[i]; + + if (depLoad instanceof ModuleNamespace) continue; + + // custom Module returned from instantiate + depLink = depLoad.linkRecord; + if (depLink && seen.indexOf(depLoad) === -1) { + if (depLink.error) err = depLink.error; + // dynamic / declarative boundaries clear the "seen" list + // we just let cross format circular throw as would happen in real implementations + else + err = doEvaluate( + loader, + depLoad, + depLink, + registry, + state, + depLink.setters ? seen : [] + ); + } + + if (err) + return (link.error = LoaderError__Check_error_message_for_loader_stack( + err, + 'Evaluating ' + load.key + )); + } + } + + // link.execute won't exist for Module returns from instantiate on top-level load + if (link.execute) { + // ES System.register execute + // "this" is null in ES + if (link.setters) { + err = declarativeExecute(link.execute); + } else { + // System.registerDynamic execute + // "this" is "exports" in CJS + var module = { id: load.key }; + var moduleObj = link.moduleObj; + Object.defineProperty(module, 'exports', { + configurable: true, + set(exports) { + moduleObj.default = exports; + }, + get() { + return moduleObj.default; + }, + }); + + var require = makeDynamicRequire( + loader, + load.key, + link.dependencies, + link.dependencyInstantiations, + registry, + state, + seen + ); + + // evaluate deps first + if (!link.executingRequire) + for (var i = 0; i < link.dependencies.length; i++) { + // require(link.dependencies[i]); + } + + err = dynamicExecute(link.execute, require, moduleObj.default, module); + // __esModule flag extension support + if (moduleObj.default && moduleObj.default.__esModule) + for (var p in moduleObj.default) + if (moduleObj.default.hasOwnProperty(p) && p !== 'default') { + Object.defineProperty(moduleObj, p, { + get() { + return moduleObj.default[p]; + }, + }); + } + } + } + + if (err) + return (link.error = LoaderError__Check_error_message_for_loader_stack( + err, + 'Evaluating ' + load.key + )); + + registry[load.key] = load.module = new ModuleNamespace(link.moduleObj); + + // if not an esm module, run importer setters and clear them + // this allows dynamic modules to update themselves into es modules + // as soon as execution has completed + if (!link.setters) { + if (load.importerSetters) + for (var i = 0; i < load.importerSetters.length; i++) load.importerSetters[i](load.module); + load.importerSetters = undefined; + } + + // dispose link record + load.linkRecord = undefined; + } + + // {} is the closest we can get to call(undefined) + var nullContext = {}; + if (Object.freeze) Object.freeze(nullContext); + + function declarativeExecute(execute) { + try { + execute.call(nullContext); + } catch (e) { + return e; + } + } + + function dynamicExecute(execute, require, exports, module) { + try { + var output = execute.call(envGlobal, require, exports, module); + if (output !== undefined) module.exports = output; + } catch (e) { + return e; + } + } + + var resolvedPromise = Promise.resolve(); + function noop() {} + + var emptyModule = new ModuleNamespace({}); + + function protectedCreateNamespace(bindings) { + if (bindings instanceof ModuleNamespace) return bindings; + + if (bindings && bindings.__esModule) return new ModuleNamespace(bindings); + + return new ModuleNamespace({ default: bindings, __useDefault: true }); + } + + var CONFIG = createSymbol('loader-config'); + var METADATA = createSymbol('metadata'); + + var isWorker = + typeof window === 'undefined' && + typeof self !== 'undefined' && + typeof importScripts !== 'undefined'; + + function warn(msg, force) { + if (force || (this.warnings && typeof console !== 'undefined' && console.warn)) + console.warn(msg); + } + + var parentModuleContext; + function loadNodeModule(key, baseURL) { + if (key[0] === '.') + throw new Error('Node module ' + key + " can't be loaded as it is not a package require."); + + if (!parentModuleContext) { + var Module = this._nodeRequire('module'); + var base = baseURL.substr(isWindows ? 8 : 7); + parentModuleContext = new Module(base); + parentModuleContext.paths = Module._nodeModulePaths(base); + } + return parentModuleContext.require(key); + } + + function extend(a, b) { + for (var p in b) { + if (!Object.hasOwnProperty.call(b, p)) continue; + a[p] = b[p]; + } + return a; + } + + function prepend(a, b) { + for (var p in b) { + if (!Object.hasOwnProperty.call(b, p)) continue; + if (a[p] === undefined) a[p] = b[p]; + } + return a; + } + + // meta first-level extends where: + // array + array appends + // object + object extends + // other properties replace + function extendMeta(a, b, _prepend) { + for (var p in b) { + if (!Object.hasOwnProperty.call(b, p)) continue; + var val = b[p]; + if (a[p] === undefined) a[p] = val; + else if (val instanceof Array && a[p] instanceof Array) + a[p] = [].concat(_prepend ? val : a[p]).concat(_prepend ? a[p] : val); + else if (typeof val == 'object' && val !== null && typeof a[p] == 'object') + a[p] = (_prepend ? prepend : extend)(extend({}, a[p]), val); + else if (!_prepend) a[p] = val; + } + } + + var supportsPreload = false; + var supportsPrefetch = false; + if (isBrowser) + (function() { + var relList = document.createElement('link').relList; + if (relList && relList.supports) { + supportsPrefetch = true; + try { + supportsPreload = relList.supports('preload'); + } catch (e) {} + } + })(); + + function preloadScript(url) { + // fallback to old fashioned image technique which still works in safari + if (!supportsPreload && !supportsPrefetch) { + var preloadImage = new Image(); + preloadImage.src = url; + return; + } + + var link = document.createElement('link'); + if (supportsPreload) { + link.rel = 'preload'; + link.as = 'script'; + } else { + // this works for all except Safari (detected by relList.supports lacking) + link.rel = 'prefetch'; + } + link.href = url; + document.head.appendChild(link); + document.head.removeChild(link); + } + + function workerImport(src, resolve, reject) { + try { + importScripts(src); + } catch (e) { + reject(e); + } + resolve(); + } + + if (isBrowser) { + var loadingScripts = []; + var onerror = window.onerror; + window.onerror = function globalOnerror(msg, src) { + for (var i = 0; i < loadingScripts.length; i++) { + if (loadingScripts[i].src !== src) continue; + loadingScripts[i].err(msg); + return; + } + onerror.apply(this, arguments); + }; + } + + function scriptLoad(src, crossOrigin, integrity, resolve, reject) { + // percent encode just "#" for HTTP requests + src = src.replace(/#/g, '%23'); + + // subresource integrity is not supported in web workers + if (isWorker) return workerImport(src, resolve, reject); + + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.charset = 'utf-8'; + script.async = true; + + if (crossOrigin) script.crossOrigin = crossOrigin; + if (integrity) script.integrity = integrity; + + script.addEventListener('load', load, false); + script.addEventListener('error', error, false); + + script.src = src; + document.head.appendChild(script); + + function load() { + resolve(); + cleanup(); + } + + // note this does not catch execution errors + function error(err) { + cleanup(); + reject(new Error('Fetching ' + src)); + } + + function cleanup() { + for (var i = 0; i < loadingScripts.length; i++) { + if (loadingScripts[i].err === error) { + loadingScripts.splice(i, 1); + break; + } + } + script.removeEventListener('load', load, false); + script.removeEventListener('error', error, false); + document.head.removeChild(script); + } + } + + function readMemberExpression(p, value) { + var pParts = p.split('.'); + while (pParts.length) value = value[pParts.shift()]; + return value; + } + + // separate out paths cache as a baseURL lock process + function applyPaths(baseURL, paths, key) { + var mapMatch = getMapMatch(paths, key); + if (mapMatch) { + var target = paths[mapMatch] + key.substr(mapMatch.length); + + var resolved = resolveIfNotPlain(target, baseURI); + if (resolved !== undefined) return resolved; + + return baseURL + target; + } else if (key.indexOf(':') !== -1) { + return key; + } else { + return baseURL + key; + } + } + + function checkMap(p) { + var name = this.name; + // can add ':' here if we want paths to match the behaviour of map + if ( + name.substr(0, p.length) === p && + (name.length === p.length || + name[p.length] === '/' || + p[p.length - 1] === '/' || + p[p.length - 1] === ':') + ) { + var curLen = p.split('/').length; + if (curLen > this.len) { + this.match = p; + this.len = curLen; + } + } + } + + function getMapMatch(map, name) { + if (Object.hasOwnProperty.call(map, name)) return name; + + var bestMatch = { + name, + match: undefined, + len: 0, + }; + + Object.keys(map).forEach(checkMap, bestMatch); + + return bestMatch.match; + } + + // RegEx adjusted from https://github.com/jbrantly/yabble/blob/master/lib/yabble.js#L339 + var cjsRequireRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF."'])require\s*\(\s*("[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*')\s*\)/g; + + /* + * Source loading + */ + function fetchFetch(url, authorization, integrity, asBuffer) { + // fetch doesn't support file:/// urls + if (url.substr(0, 8) === 'file:///') { + if (hasXhr) return xhrFetch(url, authorization, integrity, asBuffer); + else throw new Error('Unable to fetch file URLs in this environment.'); + } + + // percent encode just "#" for HTTP requests + url = url.replace(/#/g, '%23'); + + var opts = { + // NB deprecate + headers: { Accept: 'application/x-es-module, */*' }, + }; + + if (integrity) opts.integrity = integrity; + + if (authorization) { + if (typeof authorization == 'string') opts.headers['Authorization'] = authorization; + opts.credentials = 'include'; + } + + return fetch(url, opts).then(function(res) { + if (res.ok) return asBuffer ? res.arrayBuffer() : res.text(); + else throw new Error('Fetch error: ' + res.status + ' ' + res.statusText); + }); + } + + function xhrFetch(url, authorization, integrity, asBuffer) { + return new Promise(function(resolve, reject) { + // percent encode just "#" for HTTP requests + url = url.replace(/#/g, '%23'); + + var xhr = new XMLHttpRequest(); + if (asBuffer) xhr.responseType = 'arraybuffer'; + function load() { + resolve(asBuffer ? xhr.response : xhr.responseText); + } + function error() { + reject( + new Error( + 'XHR error: ' + + (xhr.status + ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText : '') + ')' + : '') + + ' loading ' + + url + ) + ); + } + + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + // in Chrome on file:/// URLs, status is 0 + if (xhr.status == 0) { + if (xhr.response) { + load(); + } else { + // when responseText is empty, wait for load or error event + // to inform if it is a 404 or empty file + xhr.addEventListener('error', error); + xhr.addEventListener('load', load); + } + } else if (xhr.status === 200) { + load(); + } else { + error(); + } + } + }; + xhr.open('GET', url, true); + + if (xhr.setRequestHeader) { + xhr.setRequestHeader('Accept', 'application/x-es-module, */*'); + // can set "authorization: true" to enable withCredentials only + if (authorization) { + if (typeof authorization == 'string') + xhr.setRequestHeader('Authorization', authorization); + xhr.withCredentials = true; + } + } + + xhr.send(null); + }); + } + + function nodeFetch(url, authorization, integrity, asBuffer) { + return Promise.reject(new Error('Unable to fetch "' + url + '". Node is not supported.')); + } + + function noFetch() { + throw new Error('No fetch method is defined for this environment.'); + } + + var fetchFunction; + + var hasXhr = typeof XMLHttpRequest !== 'undefined'; + + if (typeof self !== 'undefined' && typeof self.fetch !== 'undefined') fetchFunction = fetchFetch; + else if (hasXhr) fetchFunction = xhrFetch; + else if (typeof require !== 'undefined' && typeof process !== 'undefined') + fetchFunction = nodeFetch; + else fetchFunction = noFetch; + + var fetch$1 = fetchFunction; + + function createMetadata() { + return { + pluginKey: undefined, + pluginArgument: undefined, + pluginModule: undefined, + packageKey: undefined, + packageConfig: undefined, + load: undefined, + }; + } + + function getParentMetadata(loader, config, parentKey) { + var parentMetadata = createMetadata(); + + if (parentKey) { + // detect parent plugin + // we just need pluginKey to be truthy for package configurations + // so we duplicate it as pluginArgument - although not correct its not used + var parentPluginIndex; + if (config.pluginFirst) { + if ((parentPluginIndex = parentKey.lastIndexOf('!')) !== -1) + parentMetadata.pluginArgument = parentMetadata.pluginKey = parentKey.substr( + 0, + parentPluginIndex + ); + } else { + if ((parentPluginIndex = parentKey.indexOf('!')) !== -1) + parentMetadata.pluginArgument = parentMetadata.pluginKey = parentKey.substr( + parentPluginIndex + 1 + ); + } + + // detect parent package + parentMetadata.packageKey = getMapMatch(config.packages, parentKey); + if (parentMetadata.packageKey) + parentMetadata.packageConfig = config.packages[parentMetadata.packageKey]; + } + + return parentMetadata; + } + + function normalize(key, parentKey) { + var config = this[CONFIG]; + + var metadata = createMetadata(); + var parentMetadata = getParentMetadata(this, config, parentKey); + + var loader = this; + + return ( + Promise.resolve() + // boolean conditional + .then(function() { + // first we normalize the conditional + var booleanIndex = key.lastIndexOf('#?'); + + if (booleanIndex === -1) return Promise.resolve(key); + + var conditionObj = parseCondition.call(loader, key.substr(booleanIndex + 2)); + + // in builds, return normalized conditional + /*if (this.builder) + return this.resolve(conditionObj.module, parentKey) + .then(function (conditionModule) { + conditionObj.module = conditionModule; + return key.substr(0, booleanIndex) + '#?' + serializeCondition(conditionObj); + });*/ + + return resolveCondition + .call(loader, conditionObj, parentKey, true) + .then(function(conditionValue) { + return conditionValue ? key.substr(0, booleanIndex) : '@empty'; + }); + }) + // plugin + .then(function(key) { + var parsed = parsePlugin(config.pluginFirst, key); + + if (!parsed) + return packageResolve.call( + loader, + config, + key, + (parentMetadata && parentMetadata.pluginArgument) || parentKey, + metadata, + parentMetadata, + false + ); + + metadata.pluginKey = parsed.plugin; + + return Promise.all([ + packageResolve.call( + loader, + config, + parsed.argument, + (parentMetadata && parentMetadata.pluginArgument) || parentKey, + metadata, + parentMetadata, + true + ), + loader.resolve(parsed.plugin, parentKey), + ]).then(function(normalized) { + metadata.pluginArgument = normalized[0]; + metadata.pluginKey = normalized[1]; + + // don't allow a plugin to load itself + if (metadata.pluginArgument === metadata.pluginKey) + throw new Error( + 'Plugin ' + + metadata.pluginArgument + + ' cannot load itself, make sure it is excluded from any wildcard meta configuration via a custom loader: false rule.' + ); + + return combinePluginParts(config.pluginFirst, normalized[0], normalized[1]); + }); + }) + .then(function(normalized) { + return interpolateConditional.call(loader, normalized, parentKey, parentMetadata); + }) + .then(function(normalized) { + setMeta.call(loader, config, normalized, metadata); + + if (metadata.pluginKey || !metadata.load.loader) return normalized; + + // loader by configuration + // normalizes to parent to support package loaders + return loader.resolve(metadata.load.loader, normalized).then(function(pluginKey) { + metadata.pluginKey = pluginKey; + metadata.pluginArgument = normalized; + return normalized; + }); + }) + .then(function(normalized) { + loader[METADATA][normalized] = metadata; + return normalized; + }) + ); + } + + // normalization function used for registry keys + // just does coreResolve without map + function decanonicalize(config, key) { + var parsed = parsePlugin(config.pluginFirst, key); + + // plugin + if (parsed) { + var pluginKey = decanonicalize.call(this, config, parsed.plugin); + return combinePluginParts( + config.pluginFirst, + coreResolve.call(this, config, parsed.argument, undefined, false), + pluginKey + ); + } + + return coreResolve.call(this, config, key, undefined, false); + } + + function normalizeSync(key, parentKey) { + var config = this[CONFIG]; + + // normalizeSync is metadataless, so create metadata + var metadata = createMetadata(); + var parentMetadata = parentMetadata || getParentMetadata(this, config, parentKey); + + var parsed = parsePlugin(config.pluginFirst, key); + + // plugin + if (parsed) { + metadata.pluginKey = normalizeSync.call(this, parsed.plugin, parentKey); + return combinePluginParts( + config.pluginFirst, + packageResolveSync.call( + this, + config, + parsed.argument, + parentMetadata.pluginArgument || parentKey, + metadata, + parentMetadata, + !!metadata.pluginKey + ), + metadata.pluginKey + ); + } + + return packageResolveSync.call( + this, + config, + key, + parentMetadata.pluginArgument || parentKey, + metadata, + parentMetadata, + !!metadata.pluginKey + ); + } + + function coreResolve(config, key, parentKey, doMap) { + var relativeResolved = resolveIfNotPlain(key, parentKey || baseURI); + + // standard URL resolution + if (relativeResolved) return applyPaths(config.baseURL, config.paths, relativeResolved); + + // plain keys not starting with './', 'x://' and '/' go through custom resolution + if (doMap) { + var mapMatch = getMapMatch(config.map, key); + + if (mapMatch) { + key = config.map[mapMatch] + key.substr(mapMatch.length); + + relativeResolved = resolveIfNotPlain(key, baseURI); + if (relativeResolved) return applyPaths(config.baseURL, config.paths, relativeResolved); + } + } + + if (this.registry.has(key)) return key; + + if (key.substr(0, 6) === '@node/') return key; + + return applyPaths(config.baseURL, config.paths, key); + } + + function packageResolveSync(config, key, parentKey, metadata, parentMetadata, skipExtensions) { + // ignore . since internal maps handled by standard package resolution + if (parentMetadata && parentMetadata.packageConfig && key[0] !== '.') { + var parentMap = parentMetadata.packageConfig.map; + var parentMapMatch = parentMap && getMapMatch(parentMap, key); + + if (parentMapMatch && typeof parentMap[parentMapMatch] === 'string') { + var mapped = doMapSync( + this, + config, + parentMetadata.packageConfig, + parentMetadata.packageKey, + parentMapMatch, + key, + metadata, + skipExtensions + ); + if (mapped) return mapped; + } + } + + var normalized = coreResolve.call(this, config, key, parentKey, true); + + var pkgConfigMatch = getPackageConfigMatch(config, normalized); + metadata.packageKey = + (pkgConfigMatch && pkgConfigMatch.packageKey) || getMapMatch(config.packages, normalized); + + if (!metadata.packageKey) return normalized; + + if (config.packageConfigKeys.indexOf(normalized) !== -1) { + metadata.packageKey = undefined; + return normalized; + } + + metadata.packageConfig = + config.packages[metadata.packageKey] || + (config.packages[metadata.packageKey] = createPackage()); + + var subPath = normalized.substr(metadata.packageKey.length + 1); + + return applyPackageConfigSync( + this, + config, + metadata.packageConfig, + metadata.packageKey, + subPath, + metadata, + skipExtensions + ); + } + + function packageResolve(config, key, parentKey, metadata, parentMetadata, skipExtensions) { + var loader = this; + + return resolvedPromise + .then(function() { + // ignore . since internal maps handled by standard package resolution + if (parentMetadata && parentMetadata.packageConfig && key.substr(0, 2) !== './') { + var parentMap = parentMetadata.packageConfig.map; + var parentMapMatch = parentMap && getMapMatch(parentMap, key); + + if (parentMapMatch) + return doMap( + loader, + config, + parentMetadata.packageConfig, + parentMetadata.packageKey, + parentMapMatch, + key, + metadata, + skipExtensions + ); + } + + return resolvedPromise; + }) + .then(function(mapped) { + if (mapped) return mapped; + + // apply map, core, paths, contextual package map + var normalized = coreResolve.call(loader, config, key, parentKey, true); + + var pkgConfigMatch = getPackageConfigMatch(config, normalized); + metadata.packageKey = + (pkgConfigMatch && pkgConfigMatch.packageKey) || getMapMatch(config.packages, normalized); + + if (!metadata.packageKey) return Promise.resolve(normalized); + + if (config.packageConfigKeys.indexOf(normalized) !== -1) { + metadata.packageKey = undefined; + metadata.load = createMeta(); + metadata.load.format = 'json'; + return Promise.resolve(normalized); + } + + metadata.packageConfig = + config.packages[metadata.packageKey] || + (config.packages[metadata.packageKey] = createPackage()); + + // load configuration when it matches packageConfigPaths, not already configured, and not the config itself + var loadConfig = pkgConfigMatch && !metadata.packageConfig.configured; + + return (loadConfig + ? loadPackageConfigPath(loader, config, pkgConfigMatch.configPath, metadata) + : resolvedPromise + ).then(function() { + var subPath = normalized.substr(metadata.packageKey.length + 1); + + return applyPackageConfig( + loader, + config, + metadata.packageConfig, + metadata.packageKey, + subPath, + metadata, + skipExtensions + ); + }); + }); + } + + function createMeta() { + return { + extension: '', + deps: undefined, + format: undefined, + loader: undefined, + scriptLoad: undefined, + globals: undefined, + nonce: undefined, + integrity: undefined, + sourceMap: undefined, + exports: undefined, + encapsulateGlobal: false, + crossOrigin: undefined, + cjsRequireDetection: true, + cjsDeferDepsExecute: false, + }; + } + + function setMeta(config, key, metadata) { + metadata.load = metadata.load || createMeta(); + + // apply wildcard metas + var bestDepth = 0; + var wildcardIndex; + for (var module in config.meta) { + wildcardIndex = module.indexOf('*'); + if (wildcardIndex === -1) continue; + if ( + module.substr(0, wildcardIndex) === key.substr(0, wildcardIndex) && + module.substr(wildcardIndex + 1) === + key.substr(key.length - module.length + wildcardIndex + 1) + ) { + var depth = module.split('/').length; + if (depth > bestDepth) bestDepth = depth; + extendMeta(metadata.load, config.meta[module], bestDepth !== depth); + } + } + + // apply exact meta + if (config.meta[key]) extendMeta(metadata.load, config.meta[key], false); + + // apply package meta + if (metadata.packageKey) { + var subPath = key.substr(metadata.packageKey.length + 1); + + var meta = {}; + if (metadata.packageConfig.meta) { + var bestDepth = 0; + + getMetaMatches(metadata.packageConfig.meta, subPath, function( + metaPattern, + matchMeta, + matchDepth + ) { + if (matchDepth > bestDepth) bestDepth = matchDepth; + extendMeta(meta, matchMeta, matchDepth && bestDepth > matchDepth); + }); + + extendMeta(metadata.load, meta, false); + } + + // format + if (metadata.packageConfig.format && !metadata.pluginKey) + metadata.load.format = metadata.load.format || metadata.packageConfig.format; + } + } + + function parsePlugin(pluginFirst, key) { + var argumentKey; + var pluginKey; + + var pluginIndex = pluginFirst ? key.indexOf('!') : key.lastIndexOf('!'); + + if (pluginIndex === -1) return; + + if (pluginFirst) { + argumentKey = key.substr(pluginIndex + 1); + pluginKey = key.substr(0, pluginIndex); + } else { + argumentKey = key.substr(0, pluginIndex); + pluginKey = + key.substr(pluginIndex + 1) || argumentKey.substr(argumentKey.lastIndexOf('.') + 1); + } + + return { + argument: argumentKey, + plugin: pluginKey, + }; + } + + // put key back together after parts have been normalized + function combinePluginParts(pluginFirst, argumentKey, pluginKey) { + if (pluginFirst) return pluginKey + '!' + argumentKey; + else return argumentKey + '!' + pluginKey; + } + + /* + * Package Configuration Extension + * + * Example: + * + * SystemJS.packages = { + * jquery: { + * main: 'index.js', // when not set, package key is requested directly + * format: 'amd', + * defaultExtension: 'ts', // defaults to 'js', can be set to false + * modules: { + * '*.ts': { + * loader: 'typescript' + * }, + * 'vendor/sizzle.js': { + * format: 'global' + * } + * }, + * map: { + * // map internal require('sizzle') to local require('./vendor/sizzle') + * sizzle: './vendor/sizzle.js', + * // map any internal or external require of 'jquery/vendor/another' to 'another/index.js' + * './vendor/another.js': './another/index.js', + * // test.js / test -> lib/test.js + * './test.js': './lib/test.js', + * + * // environment-specific map configurations + * './index.js': { + * '~browser': './index-node.js', + * './custom-condition.js|~export': './index-custom.js' + * } + * }, + * // allows for setting package-prefixed depCache + * // keys are normalized module keys relative to the package itself + * depCache: { + * // import 'package/index.js' loads in parallel package/lib/test.js,package/vendor/sizzle.js + * './index.js': ['./test'], + * './test.js': ['external-dep'], + * 'external-dep/path.js': ['./another.js'] + * } + * } + * }; + * + * Then: + * import 'jquery' -> jquery/index.js + * import 'jquery/submodule' -> jquery/submodule.js + * import 'jquery/submodule.ts' -> jquery/submodule.ts loaded as typescript + * import 'jquery/vendor/another' -> another/index.js + * + * Detailed Behaviours + * - main can have a leading "./" can be added optionally + * - map and defaultExtension are applied to the main + * - defaultExtension adds the extension only if the exact extension is not present + + * - if a meta value is available for a module, map and defaultExtension are skipped + * - like global map, package map also applies to subpaths (sizzle/x, ./vendor/another/sub) + * - condition module map is '@env' module in package or '@system-env' globally + * - map targets support conditional interpolation ('./x': './x.#{|env}.js') + * - internal package map targets cannot use boolean conditionals + * + * Package Configuration Loading + * + * Not all packages may already have their configuration present in the System config + * For these cases, a list of packageConfigPaths can be provided, which when matched against + * a request, will first request a ".json" file by the package key to derive the package + * configuration from. This allows dynamic loading of non-predetermined code, a key use + * case in SystemJS. + * + * Example: + * + * SystemJS.packageConfigPaths = ['packages/test/package.json', 'packages/*.json']; + * + * // will first request 'packages/new-package/package.json' for the package config + * // before completing the package request to 'packages/new-package/path' + * SystemJS.import('packages/new-package/path'); + * + * // will first request 'packages/test/package.json' before the main + * SystemJS.import('packages/test'); + * + * When a package matches packageConfigPaths, it will always send a config request for + * the package configuration. + * The package key itself is taken to be the match up to and including the last wildcard + * or trailing slash. + * The most specific package config path will be used. + * Any existing package configurations for the package will deeply merge with the + * package config, with the existing package configurations taking preference. + * To opt-out of the package configuration request for a package that matches + * packageConfigPaths, use the { configured: true } package config option. + * + */ + + function addDefaultExtension(config, pkg, pkgKey, subPath, skipExtensions) { + // don't apply extensions to folders or if defaultExtension = false + if (!subPath || !pkg.defaultExtension || subPath[subPath.length - 1] === '/' || skipExtensions) + return subPath; + + var metaMatch = false; + + // exact meta or meta with any content after the last wildcard skips extension + if (pkg.meta) + getMetaMatches(pkg.meta, subPath, function(metaPattern, matchMeta, matchDepth) { + if (matchDepth === 0 || metaPattern.lastIndexOf('*') !== metaPattern.length - 1) + return (metaMatch = true); + }); + + // exact global meta or meta with any content after the last wildcard skips extension + if (!metaMatch && config.meta) + getMetaMatches(config.meta, pkgKey + '/' + subPath, function( + metaPattern, + matchMeta, + matchDepth + ) { + if (matchDepth === 0 || metaPattern.lastIndexOf('*') !== metaPattern.length - 1) + return (metaMatch = true); + }); + + if (metaMatch) return subPath; + + // work out what the defaultExtension is and add if not there already + var defaultExtension = '.' + pkg.defaultExtension; + if (subPath.substr(subPath.length - defaultExtension.length) !== defaultExtension) + return subPath + defaultExtension; + else return subPath; + } + + function applyPackageConfigSync(loader, config, pkg, pkgKey, subPath, metadata, skipExtensions) { + // main + if (!subPath) { + if (pkg.main) subPath = pkg.main.substr(0, 2) === './' ? pkg.main.substr(2) : pkg.main; + // also no submap if key is package itself (import 'pkg' -> 'path/to/pkg.js') + // NB can add a default package main convention here + // if it becomes internal to the package then it would no longer be an exit path + else return pkgKey; + } + + // map config checking without then with extensions + if (pkg.map) { + var mapPath = './' + subPath; + + var mapMatch = getMapMatch(pkg.map, mapPath); + + // we then check map with the default extension adding + if (!mapMatch) { + mapPath = './' + addDefaultExtension(loader, pkg, pkgKey, subPath, skipExtensions); + if (mapPath !== './' + subPath) mapMatch = getMapMatch(pkg.map, mapPath); + } + if (mapMatch) { + var mapped = doMapSync( + loader, + config, + pkg, + pkgKey, + mapMatch, + mapPath, + metadata, + skipExtensions + ); + if (mapped) return mapped; + } + } + + // normal package resolution + return pkgKey + '/' + addDefaultExtension(loader, pkg, pkgKey, subPath, skipExtensions); + } + + function validMapping(mapMatch, mapped, path) { + // allow internal ./x -> ./x/y or ./x/ -> ./x/y recursive maps + // but only if the path is exactly ./x and not ./x/z + if (mapped.substr(0, mapMatch.length) === mapMatch && path.length > mapMatch.length) + return false; + + return true; + } + + function doMapSync(loader, config, pkg, pkgKey, mapMatch, path, metadata, skipExtensions) { + if (path[path.length - 1] === '/') path = path.substr(0, path.length - 1); + var mapped = pkg.map[mapMatch]; + + if (typeof mapped === 'object') + throw new Error( + 'Synchronous conditional normalization not supported sync normalizing ' + + mapMatch + + ' in ' + + pkgKey + ); + + if (!validMapping(mapMatch, mapped, path) || typeof mapped !== 'string') return; + + return packageResolveSync.call( + this, + config, + mapped + path.substr(mapMatch.length), + pkgKey + '/', + metadata, + metadata, + skipExtensions + ); + } + + function applyPackageConfig(loader, config, pkg, pkgKey, subPath, metadata, skipExtensions) { + // main + if (!subPath) { + if (pkg.main) subPath = pkg.main.substr(0, 2) === './' ? pkg.main.substr(2) : pkg.main; + // also no submap if key is package itself (import 'pkg' -> 'path/to/pkg.js') + // NB can add a default package main convention here + // if it becomes internal to the package then it would no longer be an exit path + else return Promise.resolve(pkgKey); + } + + // map config checking without then with extensions + var mapPath, mapMatch; + + if (pkg.map) { + mapPath = './' + subPath; + mapMatch = getMapMatch(pkg.map, mapPath); + + // we then check map with the default extension adding + if (!mapMatch) { + mapPath = './' + addDefaultExtension(loader, pkg, pkgKey, subPath, skipExtensions); + if (mapPath !== './' + subPath) mapMatch = getMapMatch(pkg.map, mapPath); + } + } + + return (mapMatch + ? doMap(loader, config, pkg, pkgKey, mapMatch, mapPath, metadata, skipExtensions) + : resolvedPromise + ).then(function(mapped) { + if (mapped) return Promise.resolve(mapped); + + // normal package resolution / fallback resolution for no conditional match + return Promise.resolve( + pkgKey + '/' + addDefaultExtension(loader, pkg, pkgKey, subPath, skipExtensions) + ); + }); + } + + function doMap(loader, config, pkg, pkgKey, mapMatch, path, metadata, skipExtensions) { + if (path[path.length - 1] === '/') path = path.substr(0, path.length - 1); + + var mapped = pkg.map[mapMatch]; + + if (typeof mapped === 'string') { + if (!validMapping(mapMatch, mapped, path)) return resolvedPromise; + return packageResolve + .call( + loader, + config, + mapped + path.substr(mapMatch.length), + pkgKey + '/', + metadata, + metadata, + skipExtensions + ) + .then(function(normalized) { + return interpolateConditional.call(loader, normalized, pkgKey + '/', metadata); + }); + } + + // we use a special conditional syntax to allow the builder to handle conditional branch points further + /*if (loader.builder) + return Promise.resolve(pkgKey + '/#:' + path);*/ + + // we load all conditions upfront + var conditionPromises = []; + var conditions = []; + for (var e in mapped) { + var c = parseCondition(e); + conditions.push({ + condition: c, + map: mapped[e], + }); + conditionPromises.push(RegisterLoader$1.prototype.import.call(loader, c.module, pkgKey)); + } + + // map object -> conditional map + return Promise.all(conditionPromises) + .then(function(conditionValues) { + // first map condition to match is used + for (var i = 0; i < conditions.length; i++) { + var c = conditions[i].condition; + var value = readMemberExpression( + c.prop, + conditionValues[i].__useDefault ? conditionValues[i].default : conditionValues[i] + ); + if ((!c.negate && value) || (c.negate && !value)) return conditions[i].map; + } + }) + .then(function(mapped) { + if (mapped) { + if (!validMapping(mapMatch, mapped, path)) return resolvedPromise; + return packageResolve + .call( + loader, + config, + mapped + path.substr(mapMatch.length), + pkgKey + '/', + metadata, + metadata, + skipExtensions + ) + .then(function(normalized) { + return interpolateConditional.call(loader, normalized, pkgKey + '/', metadata); + }); + } + + // no environment match -> fallback to original subPath by returning undefined + }); + } + + // check if the given normalized key matches a packageConfigPath + // if so, loads the config + var packageConfigPaths = {}; + + // data object for quick checks against package paths + function createPkgConfigPathObj(path) { + var lastWildcard = path.lastIndexOf('*'); + var length = Math.max(lastWildcard + 1, path.lastIndexOf('/')); + return { + length, + regEx: new RegExp( + '^(' + + path + .substr(0, length) + .replace(/[.+?^${}()|[\]\\]/g, '\\$&') + .replace(/\*/g, '[^\\/]+') + + ')(\\/|$)' + ), + wildcard: lastWildcard !== -1, + }; + } + + // most specific match wins + function getPackageConfigMatch(config, normalized) { + var pkgKey, + exactMatch = false, + configPath; + for (var i = 0; i < config.packageConfigPaths.length; i++) { + var packageConfigPath = config.packageConfigPaths[i]; + var p = + packageConfigPaths[packageConfigPath] || + (packageConfigPaths[packageConfigPath] = createPkgConfigPathObj(packageConfigPath)); + if (normalized.length < p.length) continue; + var match = normalized.match(p.regEx); + if (match && (!pkgKey || (!(exactMatch && p.wildcard) && pkgKey.length < match[1].length))) { + pkgKey = match[1]; + exactMatch = !p.wildcard; + configPath = pkgKey + packageConfigPath.substr(p.length); + } + } + + if (!pkgKey) return; + + return { + packageKey: pkgKey, + configPath, + }; + } + + function loadPackageConfigPath(loader, config, pkgConfigPath, metadata, normalized) { + var configLoader = loader.pluginLoader || loader; + + // ensure we note this is a package config file path + // it will then be skipped from getting other normalizations itself to ensure idempotency + if (config.packageConfigKeys.indexOf(pkgConfigPath) === -1) + config.packageConfigKeys.push(pkgConfigPath); + + return configLoader + .import(pkgConfigPath) + .then(function(pkgConfig) { + setPkgConfig(metadata.packageConfig, pkgConfig, metadata.packageKey, true, config); + metadata.packageConfig.configured = true; + }) + .catch(function(err) { + throw LoaderError__Check_error_message_for_loader_stack( + err, + 'Unable to fetch package configuration file ' + pkgConfigPath + ); + }); + } + + function getMetaMatches(pkgMeta, subPath, matchFn) { + // wildcard meta + var wildcardIndex; + for (var module in pkgMeta) { + // allow meta to start with ./ for flexibility + var dotRel = module.substr(0, 2) === './' ? './' : ''; + if (dotRel) module = module.substr(2); + + wildcardIndex = module.indexOf('*'); + if (wildcardIndex === -1) continue; + + if ( + module.substr(0, wildcardIndex) === subPath.substr(0, wildcardIndex) && + module.substr(wildcardIndex + 1) === + subPath.substr(subPath.length - module.length + wildcardIndex + 1) + ) { + // alow match function to return true for an exit path + if (matchFn(module, pkgMeta[dotRel + module], module.split('/').length)) return; + } + } + // exact meta + var exactMeta = + pkgMeta[subPath] && Object.hasOwnProperty.call(pkgMeta, subPath) + ? pkgMeta[subPath] + : pkgMeta['./' + subPath]; + if (exactMeta) matchFn(exactMeta, exactMeta, 0); + } + + /* + * Conditions Extension + * + * Allows a condition module to alter the resolution of an import via syntax: + * + * import $ from 'jquery/#{browser}'; + * + * Will first load the module 'browser' via `SystemJS.import('browser')` and + * take the default export of that module. + * If the default export is not a string, an error is thrown. + * + * We then substitute the string into the require to get the conditional resolution + * enabling environment-specific variations like: + * + * import $ from 'jquery/ie' + * import $ from 'jquery/firefox' + * import $ from 'jquery/chrome' + * import $ from 'jquery/safari' + * + * It can be useful for a condition module to define multiple conditions. + * This can be done via the `|` modifier to specify an export member expression: + * + * import 'jquery/#{./browser.js|grade.version}' + * + * Where the `grade` export `version` member in the `browser.js` module is substituted. + * + * + * Boolean Conditionals + * + * For polyfill modules, that are used as imports but have no module value, + * a binary conditional allows a module not to be loaded at all if not needed: + * + * import 'es5-shim#?./conditions.js|needs-es5shim' + * + * These conditions can also be negated via: + * + * import 'es5-shim#?./conditions.js|~es6' + * + */ + + var sysConditions = ['browser', 'node', 'dev', 'build', 'production', 'default']; + + function parseCondition(condition) { + var conditionExport, conditionModule, negation; + + var negation; + var conditionExportIndex = condition.lastIndexOf('|'); + if (conditionExportIndex !== -1) { + conditionExport = condition.substr(conditionExportIndex + 1); + conditionModule = condition.substr(0, conditionExportIndex); + + if (conditionExport[0] === '~') { + negation = true; + conditionExport = conditionExport.substr(1); + } + } else { + negation = condition[0] === '~'; + conditionExport = 'default'; + conditionModule = condition.substr(negation); + if (sysConditions.indexOf(conditionModule) !== -1) { + conditionExport = conditionModule; + conditionModule = null; + } + } + + return { + module: conditionModule || '@system-env', + prop: conditionExport, + negate: negation, + }; + } + + function resolveCondition(conditionObj, parentKey, bool) { + // import without __useDefault handling here + return RegisterLoader$1.prototype.import + .call(this, conditionObj.module, parentKey) + .then(function(condition) { + var m = readMemberExpression(conditionObj.prop, condition); + + if (bool && typeof m !== 'boolean') + throw new TypeError('Condition did not resolve to a boolean.'); + + return conditionObj.negate ? !m : m; + }); + } + + var interpolationRegEx = /#\{[^\}]+\}/; + function interpolateConditional(key, parentKey, parentMetadata) { + // first we normalize the conditional + var conditionalMatch = key.match(interpolationRegEx); + + if (!conditionalMatch) return Promise.resolve(key); + + var conditionObj = parseCondition.call( + this, + conditionalMatch[0].substr(2, conditionalMatch[0].length - 3) + ); + + // in builds, return normalized conditional + /*if (this.builder) + return this.normalize(conditionObj.module, parentKey, createMetadata(), parentMetadata) + .then(function (conditionModule) { + conditionObj.module = conditionModule; + return key.replace(interpolationRegEx, '#{' + serializeCondition(conditionObj) + '}'); + });*/ + + return resolveCondition + .call(this, conditionObj, parentKey, false) + .then(function(conditionValue) { + if (typeof conditionValue !== 'string') + throw new TypeError('The condition value for ' + key + " doesn't resolve to a string."); + + if (conditionValue.indexOf('/') !== -1) + throw new TypeError( + 'Unabled to interpolate conditional ' + + key + + (parentKey ? ' in ' + parentKey : '') + + '\n\tThe condition value ' + + conditionValue + + ' cannot contain a "/" separator.' + ); + + return key.replace(interpolationRegEx, conditionValue); + }); + } + + /* + Extend config merging one deep only + + loader.config({ + some: 'random', + config: 'here', + deep: { + config: { too: 'too' } + } + }); + + <=> + + loader.some = 'random'; + loader.config = 'here' + loader.deep = loader.deep || {}; + loader.deep.config = { too: 'too' }; + + + Normalizes meta and package configs allowing for: + + SystemJS.config({ + meta: { + './index.js': {} + } + }); + + To become + + SystemJS.meta['https://thissite.com/index.js'] = {}; + + For easy normalization canonicalization with latest URL support. + + */ + var envConfigNames = [ + 'browserConfig', + 'nodeConfig', + 'devConfig', + 'buildConfig', + 'productionConfig', + ]; + function envSet(loader, cfg, envCallback) { + for (var i = 0; i < envConfigNames.length; i++) { + var envConfig = envConfigNames[i]; + if (cfg[envConfig] && envModule[envConfig.substr(0, envConfig.length - 6)]) + envCallback(cfg[envConfig]); + } + } + + function cloneObj(obj, maxDepth) { + var clone = {}; + for (var p in obj) { + var prop = obj[p]; + if (maxDepth > 1) { + if (typeof prop === 'object') clone[p] = cloneObj(prop, maxDepth - 1); + else if (p !== 'packageConfig') clone[p] = prop; + } else { + clone[p] = prop; + } + } + return clone; + } + + function getConfigItem(config, p) { + var cfgItem = config[p]; + + // getConfig must return an unmodifiable clone of the configuration + if (cfgItem instanceof Array) return config[p].concat([]); + else if (typeof cfgItem === 'object') return cloneObj(cfgItem, 3); + else return config[p]; + } + + function getConfig(configName) { + if (configName) { + if (configNames.indexOf(configName) !== -1) return getConfigItem(this[CONFIG], configName); + throw new Error( + '"' + + configName + + '" is not a valid configuration name. Must be one of ' + + configNames.join(', ') + + '.' + ); + } + + var cfg = {}; + for (var i = 0; i < configNames.length; i++) { + var p = configNames[i]; + var configItem = getConfigItem(this[CONFIG], p); + if (configItem !== undefined) cfg[p] = configItem; + } + return cfg; + } + + function setConfig(cfg, isEnvConfig) { + var loader = this; + var config = this[CONFIG]; + + if ('warnings' in cfg) config.warnings = cfg.warnings; + + if ('wasm' in cfg) config.wasm = typeof WebAssembly !== 'undefined' && cfg.wasm; + + if ('production' in cfg || 'build' in cfg) + setProduction.call(loader, !!cfg.production, !!(cfg.build || (envModule && envModule.build))); + + if (!isEnvConfig) { + // if using nodeConfig / browserConfig / productionConfig, take baseURL from there + // these exceptions will be unnecessary when we can properly implement config queuings + var baseURL; + envSet(loader, cfg, function(cfg) { + baseURL = baseURL || cfg.baseURL; + }); + baseURL = baseURL || cfg.baseURL; + + // always configure baseURL first + if (baseURL) { + config.baseURL = + resolveIfNotPlain(baseURL, baseURI) || resolveIfNotPlain('./' + baseURL, baseURI); + if (config.baseURL[config.baseURL.length - 1] !== '/') config.baseURL += '/'; + } + + if (cfg.paths) extend(config.paths, cfg.paths); + + envSet(loader, cfg, function(cfg) { + if (cfg.paths) extend(config.paths, cfg.paths); + }); + + for (var p in config.paths) { + if (config.paths[p].indexOf('*') === -1) continue; + warn.call( + config, + 'Path config ' + + p + + ' -> ' + + config.paths[p] + + ' is no longer supported as wildcards are deprecated.' + ); + delete config.paths[p]; + } + } + + if (cfg.defaultJSExtensions) + warn.call( + config, + 'The defaultJSExtensions configuration option is deprecated.\n Use packages defaultExtension instead.', + true + ); + + if (typeof cfg.pluginFirst === 'boolean') config.pluginFirst = cfg.pluginFirst; + + if (cfg.map) { + for (var p in cfg.map) { + var v = cfg.map[p]; + + if (typeof v === 'string') { + config.map[p] = coreResolve.call(loader, config, v, undefined, false); + } else { + // object map + var pkgName = coreResolve.call(loader, config, p, undefined, true); + var pkg = config.packages[pkgName]; + if (!pkg) { + pkg = config.packages[pkgName] = createPackage(); + // use '' instead of false to keep type consistent + pkg.defaultExtension = ''; + } + setPkgConfig(pkg, { map: v }, pkgName, false, config); + } + } + } + + if (cfg.packageConfigPaths) { + var packageConfigPaths = []; + for (var i = 0; i < cfg.packageConfigPaths.length; i++) { + var path = cfg.packageConfigPaths[i]; + var packageLength = Math.max(path.lastIndexOf('*') + 1, path.lastIndexOf('/')); + var normalized = coreResolve.call( + loader, + config, + path.substr(0, packageLength), + undefined, + false + ); + packageConfigPaths[i] = normalized + path.substr(packageLength); + } + config.packageConfigPaths = packageConfigPaths; + } + + if (cfg.bundles) { + for (var p in cfg.bundles) { + var bundle = []; + for (var i = 0; i < cfg.bundles[p].length; i++) + bundle.push(loader.normalizeSync(cfg.bundles[p][i])); + config.bundles[p] = bundle; + } + } + + if (cfg.packages) { + for (var p in cfg.packages) { + if (p.match(/^([^\/]+:)?\/\/$/)) + throw new TypeError('"' + p + '" is not a valid package name.'); + + var pkgName = coreResolve.call(loader, config, p, undefined, true); + + // allow trailing slash in packages + if (pkgName[pkgName.length - 1] === '/') pkgName = pkgName.substr(0, pkgName.length - 1); + + setPkgConfig( + (config.packages[pkgName] = config.packages[pkgName] || createPackage()), + cfg.packages[p], + pkgName, + false, + config + ); + } + } + + if (cfg.depCache) { + for (var p in cfg.depCache) + config.depCache[loader.normalizeSync(p)] = [].concat(cfg.depCache[p]); + } + + if (cfg.meta) { + for (var p in cfg.meta) { + // base wildcard stays base + if (p[0] === '*') { + extend((config.meta[p] = config.meta[p] || {}), cfg.meta[p]); + } else { + var resolved = coreResolve.call(loader, config, p, undefined, true); + extend((config.meta[resolved] = config.meta[resolved] || {}), cfg.meta[p]); + } + } + } + + if ('transpiler' in cfg) config.transpiler = cfg.transpiler; + + // copy any remaining non-standard configuration properties + for (var c in cfg) { + if (configNames.indexOf(c) !== -1) continue; + if (envConfigNames.indexOf(c) !== -1) continue; + // warn.call(config, 'Setting custom config option `System.config({ ' + c + ': ... })` is deprecated. Avoid custom config options or set SystemJS.' + c + ' = ... directly.'); + + config[c] = cfg[c]; + } + + envSet(loader, cfg, function(cfg) { + loader.config(cfg, true); + }); + } + + function createPackage() { + return { + defaultExtension: undefined, + main: undefined, + format: undefined, + meta: undefined, + map: undefined, + packageConfig: undefined, + configured: false, + }; + } + + // deeply-merge (to first level) config with any existing package config + function setPkgConfig(pkg, cfg, pkgName, prependConfig, config) { + for (var prop in cfg) { + if ( + prop === 'main' || + prop === 'format' || + prop === 'defaultExtension' || + prop === 'configured' + ) { + if (!prependConfig || pkg[prop] === undefined) pkg[prop] = cfg[prop]; + } else if (prop === 'map') { + (prependConfig ? prepend : extend)((pkg.map = pkg.map || {}), cfg.map); + } else if (prop === 'meta') { + (prependConfig ? prepend : extend)((pkg.meta = pkg.meta || {}), cfg.meta); + } else if (Object.hasOwnProperty.call(cfg, prop)) { + warn.call( + config, + '"' + prop + '" is not a valid package configuration option in package ' + pkgName + ); + } + } + + // default defaultExtension for packages only + if (pkg.defaultExtension === undefined) pkg.defaultExtension = 'js'; + + if (pkg.main === undefined && pkg.map && pkg.map['.']) { + pkg.main = pkg.map['.']; + delete pkg.map['.']; + } else if (typeof pkg.main === 'object') { + // main object becomes main map + pkg.map = pkg.map || {}; + pkg.map['./@main'] = pkg.main; + pkg.main['default'] = pkg.main['default'] || './'; + pkg.main = '@main'; + } + + return pkg; + } + + var hasBuffer = typeof Buffer !== 'undefined'; + try { + if (hasBuffer && new Buffer('a').toString('base64') !== 'YQ==') hasBuffer = false; + } catch (e) { + hasBuffer = false; + } + + var sourceMapPrefix = '\n//# sourceMapping' + 'URL=data:application/json;base64,'; + function inlineSourceMap(sourceMapString) { + if (hasBuffer) return sourceMapPrefix + new Buffer(sourceMapString).toString('base64'); + else if (typeof btoa !== 'undefined') + return sourceMapPrefix + btoa(unescape(encodeURIComponent(sourceMapString))); + else return ''; + } + + function getSource(source, sourceMap, address, wrap) { + var lastLineIndex = source.lastIndexOf('\n'); + + if (sourceMap) { + if (typeof sourceMap != 'object') + throw new TypeError('load.metadata.sourceMap must be set to an object.'); + + sourceMap = JSON.stringify(sourceMap); + } + + return ( + (wrap ? '(function(System, SystemJS) {' : '') + + source + + (wrap ? '\n})(System, System);' : '') + + // adds the sourceURL comment if not already present + (source.substr(lastLineIndex, 15) != '\n//# sourceURL=' + ? '\n//# sourceURL=' + address + (sourceMap ? '!transpiled' : '') + : '') + + // add sourceMappingURL if load.metadata.sourceMap is set + ((sourceMap && inlineSourceMap(sourceMap)) || '') + ); + } + + // script execution via injecting a script tag into the page + // this allows CSP nonce to be set for CSP environments + var head; + function scriptExec(loader, source, sourceMap, address, nonce) { + if (!head) head = document.head || document.body || document.documentElement; + + var script = document.createElement('script'); + script.text = getSource(source, sourceMap, address, false); + var onerror = window.onerror; + var e; + window.onerror = function(_e) { + e = addToError(_e, 'Evaluating ' + address); + if (onerror) onerror.apply(this, arguments); + }; + preExec(loader); + + if (nonce) script.setAttribute('nonce', nonce); + + head.appendChild(script); + head.removeChild(script); + postExec(); + window.onerror = onerror; + if (e) return e; + } + + var vm; + var useVm; + + var curSystem; + + var callCounter = 0; + function preExec(loader) { + if (callCounter++ == 0) curSystem = envGlobal.System; + envGlobal.System = envGlobal.SystemJS = loader; + } + function postExec() { + if (--callCounter == 0) envGlobal.System = envGlobal.SystemJS = curSystem; + } + + var supportsScriptExec = false; + if (isBrowser && typeof document != 'undefined' && document.getElementsByTagName) { + if (!((window.chrome && window.chrome.extension) || navigator.userAgent.match(/^Node\.js/))) + supportsScriptExec = true; + } + + function evaluate(loader, source, sourceMap, address, integrity, nonce, noWrap) { + if (!source) return; + if (nonce && supportsScriptExec) return scriptExec(loader, source, sourceMap, address, nonce); + try { + preExec(loader); + // global scoped eval for node (avoids require scope leak) + if (!vm && loader._nodeRequire) { + vm = loader._nodeRequire('vm'); + useVm = vm.runInThisContext("typeof System !== 'undefined' && System") === loader; + } + if (useVm) + vm.runInThisContext(getSource(source, sourceMap, address, !noWrap), { + filename: address + (sourceMap ? '!transpiled' : ''), + }); + else global.evaluate(getSource(source, sourceMap, address, !noWrap)); + postExec(); + } catch (e) { + postExec(); + return e; + } + } + + var formatHelpers = function(loader) { + loader.set( + '@@cjs-helpers', + loader.newModule({ + requireResolve: requireResolve.bind(loader), + getPathVars: getPathVars, + }) + ); + + loader.set( + '@@global-helpers', + loader.newModule({ + prepareGlobal: prepareGlobal, + }) + ); + + /* + AMD-compatible require + To copy RequireJS, set window.require = window.requirejs = loader.amdRequire + */ + function require(names, callback, errback, referer) { + // in amd, first arg can be a config object... we just ignore + if (typeof names === 'object' && !(names instanceof Array)) + return require(...Array.prototype.splice.call(arguments, 1, arguments.length - 1)); + + // amd require + if (typeof names === 'string' && typeof callback === 'function') names = [names]; + if (names instanceof Array) { + var dynamicRequires = []; + for (var i = 0; i < names.length; i++) + dynamicRequires.push(loader.import(names[i], referer)); + Promise.all(dynamicRequires).then(function(modules) { + for (var i = 0; i < modules.length; i++) + modules[i] = modules[i].__useDefault ? modules[i].default : modules[i]; + if (callback) callback(...modules); + }, errback); + } else if (typeof names === 'string') { + // commonjs require + var normalized = loader.decanonicalize(names, referer); + var module = loader.get(normalized); + if (!module) + throw new Error( + 'Module not already loaded loading "' + + names + + '" as ' + + normalized + + (referer ? ' from "' + referer + '".' : '.') + ); + return module.__useDefault ? module.default : module; + } else throw new TypeError('Invalid require'); + } + + function define(name, deps, factory) { + if (typeof name !== 'string') { + factory = deps; + deps = name; + name = null; + + if (curMetaDeps) { + deps = deps.concat(curMetaDeps); + curMetaDeps = undefined; + } + } + + if (!(deps instanceof Array)) { + factory = deps; + deps = ['require', 'exports', 'module'].splice(0, factory.length); + } + + if (typeof factory !== 'function') + factory = (function(factory) { + return function() { + return factory; + }; + })(factory); + + // remove system dependencies + var requireIndex, exportsIndex, moduleIndex; + + if ((requireIndex = deps.indexOf('require')) !== -1) { + deps.splice(requireIndex, 1); + + // only trace cjs requires for non-named + // named defines assume the trace has already been done + if (!name) deps = deps.concat(amdGetCJSDeps(factory.toString(), requireIndex)); + } + + if ((exportsIndex = deps.indexOf('exports')) !== -1) deps.splice(exportsIndex, 1); + + if ((moduleIndex = deps.indexOf('module')) !== -1) deps.splice(moduleIndex, 1); + + function execute(req, exports, module) { + var depValues = []; + for (var i = 0; i < deps.length; i++) depValues.push(req(deps[i])); + + module.uri = module.id; + + module.config = noop; + + // add back in system dependencies + if (moduleIndex !== -1) depValues.splice(moduleIndex, 0, module); + + if (exportsIndex !== -1) depValues.splice(exportsIndex, 0, exports); + + if (requireIndex !== -1) { + var contextualRequire = function(names, callback, errback) { + if (typeof names === 'string' && typeof callback !== 'function') return req(names); + return require.call(loader, names, callback, errback, module.id); + }; + contextualRequire.toUrl = function(name) { + return loader.normalizeSync(name, module.id); + }; + depValues.splice(requireIndex, 0, contextualRequire); + } + + // set global require to AMD require + var curRequire = envGlobal.require; + envGlobal.require = require; + + var output = factory.apply(exportsIndex === -1 ? envGlobal : exports, depValues); + + envGlobal.require = curRequire; + + if (typeof output !== 'undefined') module.exports = output; + } + + // anonymous define + if (!name) { + loader.registerDynamic(deps, false, execute); + } else { + loader.registerDynamic(name, deps, false, execute); + + // if we don't have any other defines, + // then let this be an anonymous define + // this is just to support single modules of the form: + // define('jquery') + // still loading anonymously + // because it is done widely enough to be useful + // as soon as there is more than one define, this gets removed though + if (lastNamedDefine) { + lastNamedDefine = undefined; + multipleNamedDefines = true; + } else if (!multipleNamedDefines) { + lastNamedDefine = [deps, execute]; + } + } + } + define.amd = {}; + + loader.amdDefine = define; + loader.amdRequire = require; + }; + + // CJS + var windowOrigin; + if (typeof window !== 'undefined' && typeof document !== 'undefined' && window.location) + windowOrigin = + location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); + + function stripOrigin(path) { + if (path.substr(0, 8) === 'file:///') return path.substr(7 + !!isWindows); + + if (windowOrigin && path.substr(0, windowOrigin.length) === windowOrigin) + return path.substr(windowOrigin.length); + + return path; + } + + function requireResolve(request, parentId) { + return stripOrigin(this.normalizeSync(request, parentId)); + } + + function getPathVars(moduleId) { + // remove any plugin syntax + var pluginIndex = moduleId.lastIndexOf('!'); + var filename; + if (pluginIndex !== -1) filename = moduleId.substr(0, pluginIndex); + else filename = moduleId; + + var dirname = filename.split('/'); + dirname.pop(); + dirname = dirname.join('/'); + + return { + filename: stripOrigin(filename), + dirname: stripOrigin(dirname), + }; + } + + var commentRegEx$1 = /(^|[^\\])(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm; + var stringRegEx$1 = /("[^"\\\n\r]*(\\.[^"\\\n\r]*)*"|'[^'\\\n\r]*(\\.[^'\\\n\r]*)*')/g; + + // extract CJS dependencies from source text via regex static analysis + // read require('x') statements not in comments or strings + function getCJSDeps(source) { + cjsRequireRegEx.lastIndex = commentRegEx$1.lastIndex = stringRegEx$1.lastIndex = 0; + + var deps = []; + + var match; + + // track string and comment locations for unminified source + var stringLocations = [], + commentLocations = []; + + function inLocation(locations, match) { + for (var i = 0; i < locations.length; i++) + if (locations[i][0] < match.index && locations[i][1] > match.index) return true; + return false; + } + + if (source.length / source.split('\n').length < 200) { + while ((match = stringRegEx$1.exec(source))) + stringLocations.push([match.index, match.index + match[0].length]); + + // TODO: track template literals here before comments + + while ((match = commentRegEx$1.exec(source))) { + // only track comments not starting in strings + if (!inLocation(stringLocations, match)) + commentLocations.push([match.index + match[1].length, match.index + match[0].length - 1]); + } + } + + while ((match = cjsRequireRegEx.exec(source))) { + // ensure we're not within a string or comment location + if (!inLocation(stringLocations, match) && !inLocation(commentLocations, match)) { + var dep = match[1].substr(1, match[1].length - 2); + // skip cases like require('" + file + "') + if (dep.match(/"|'/)) continue; + deps.push(dep); + } + } + + return deps; + } + + // Global + // bare minimum ignores + var ignoredGlobalProps = [ + '_g', + 'sessionStorage', + 'localStorage', + 'clipboardData', + 'frames', + 'frameElement', + 'external', + 'mozAnimationStartTime', + 'webkitStorageInfo', + 'webkitIndexedDB', + 'mozInnerScreenY', + 'mozInnerScreenX', + ]; + + var globalSnapshot; + function globalIterator(globalName) { + if (ignoredGlobalProps.indexOf(globalName) !== -1) return; + try { + var value = envGlobal[globalName]; + } catch (e) { + ignoredGlobalProps.push(globalName); + } + this(globalName, value); + } + + function getGlobalValue(exports) { + if (typeof exports === 'string') return readMemberExpression(exports, envGlobal); + + if (!(exports instanceof Array)) throw new Error('Global exports must be a string or array.'); + + var globalValue = {}; + for (var i = 0; i < exports.length; i++) + globalValue[exports[i].split('.').pop()] = readMemberExpression(exports[i], envGlobal); + return globalValue; + } + + function prepareGlobal(moduleName, exports, globals, encapsulate) { + // disable module detection + var curDefine = envGlobal.define; + + envGlobal.define = undefined; + + // set globals + var oldGlobals; + if (globals) { + oldGlobals = {}; + for (var g in globals) { + oldGlobals[g] = envGlobal[g]; + envGlobal[g] = globals[g]; + } + } + + // store a complete copy of the global object in order to detect changes + if (!exports) { + globalSnapshot = {}; + + Object.keys(envGlobal).forEach(globalIterator, function(name, value) { + globalSnapshot[name] = value; + }); + } + + // return function to retrieve global + return function() { + var globalValue = exports ? getGlobalValue(exports) : {}; + + var singleGlobal; + var multipleExports = !!exports; + + if (!exports || encapsulate) + Object.keys(envGlobal).forEach(globalIterator, function(name, value) { + if (globalSnapshot[name] === value) return; + if (value === undefined) return; + + // allow global encapsulation where globals are removed + if (encapsulate) envGlobal[name] = undefined; + + if (!exports) { + globalValue[name] = value; + + if (singleGlobal !== undefined) { + if (!multipleExports && singleGlobal !== value) multipleExports = true; + } else { + singleGlobal = value; + } + } + }); + + globalValue = multipleExports ? globalValue : singleGlobal; + + // revert globals + if (oldGlobals) { + for (var g in oldGlobals) envGlobal[g] = oldGlobals[g]; + } + envGlobal.define = curDefine; + + return globalValue; + }; + } + + // AMD + var cjsRequirePre = '(?:^|[^$_a-zA-Z\\xA0-\\uFFFF.])'; + var cjsRequirePost = '\\s*\\(\\s*("([^"]+)"|\'([^\']+)\')\\s*\\)'; + var fnBracketRegEx = /\(([^\)]*)\)/; + var wsRegEx = /^\s+|\s+$/g; + + var requireRegExs = {}; + + function amdGetCJSDeps(source, requireIndex) { + // remove comments + source = source.replace(commentRegEx$1, ''); + + // determine the require alias + var params = source.match(fnBracketRegEx); + var requireAlias = (params[1].split(',')[requireIndex] || 'require').replace(wsRegEx, ''); + + // find or generate the regex for this requireAlias + var requireRegEx = + requireRegExs[requireAlias] || + (requireRegExs[requireAlias] = new RegExp( + cjsRequirePre + requireAlias + cjsRequirePost, + 'g' + )); + + requireRegEx.lastIndex = 0; + + var deps = []; + + var match; + while ((match = requireRegEx.exec(source))) deps.push(match[2] || match[3]); + + return deps; + } + + // generate anonymous define from singular named define + var multipleNamedDefines = false; + var lastNamedDefine; + var curMetaDeps; + function clearLastDefine(metaDeps) { + curMetaDeps = metaDeps; + lastNamedDefine = undefined; + multipleNamedDefines = false; + } + function registerLastDefine(loader) { + if (lastNamedDefine) + loader.registerDynamic( + curMetaDeps ? lastNamedDefine[0].concat(curMetaDeps) : lastNamedDefine[0], + false, + lastNamedDefine[1] + ); + else if (multipleNamedDefines) + // bundles are an empty module + loader.registerDynamic([], false, noop); + } + + var supportsScriptLoad = + (isBrowser || isWorker) && + typeof navigator !== 'undefined' && + navigator.userAgent && + !navigator.userAgent.match(/MSIE (9|10).0/); + + // include the node require since we're overriding it + var nodeRequire; + + function instantiate$1(key, processAnonRegister) { + var loader = this; + var config = this[CONFIG]; + var metadata = this[METADATA][key]; + // first do bundles and depCache + return (loadBundlesAndDepCache(config, this, key) || resolvedPromise) + .then(function() { + if (processAnonRegister()) return; + + // node module loading + if (key.substr(0, 6) === '@node/') { + if (!loader._nodeRequire) + throw new TypeError( + 'Error loading ' + key + '. Can only load node core modules in Node.' + ); + loader.registerDynamic([], false, function() { + return loadNodeModule.call(loader, key.substr(6), loader.baseURL); + }); + processAnonRegister(); + return; + } + + if (metadata.load.scriptLoad) { + if (metadata.load.pluginKey || !supportsScriptLoad) { + metadata.load.scriptLoad = false; + warn.call(config, 'scriptLoad not supported for "' + key + '"'); + } + } else if (metadata.load.scriptLoad !== false && supportsScriptLoad) { + // auto script load AMD, global without deps + if ( + !metadata.load.deps && + !metadata.load.globals && + (metadata.load.format === 'system' || + metadata.load.format === 'register' || + (metadata.load.format === 'global' && metadata.load.exports)) + ) + metadata.load.scriptLoad = true; + } + + // fetch / translate / instantiate pipeline + if (!metadata.load.scriptLoad) + return initializePlugin(loader, key, metadata).then(function() { + return runFetchPipeline(loader, key, metadata, processAnonRegister, config.wasm); + }); + + // just script loading + return new Promise(function(resolve, reject) { + if (metadata.load.format === 'amd' && envGlobal.define !== loader.amdDefine) + throw new Error( + 'Loading AMD with scriptLoad requires setting the global `' + + globalName + + '.define = SystemJS.amdDefine`' + ); + + scriptLoad( + key, + metadata.load.crossOrigin, + metadata.load.integrity, + function() { + if (!processAnonRegister()) { + metadata.load.format = 'global'; + var globalValue = getGlobalValue(metadata.load.exports); + loader.registerDynamic([], false, function() { + return globalValue; + }); + processAnonRegister(); + } + + resolve(); + }, + reject + ); + }); + }) + .then(function(instantiated) { + loader[METADATA][key] = undefined; + return instantiated; + }); + } + + function initializePlugin(loader, key, metadata) { + if (!metadata.pluginKey) return resolvedPromise; + + return loader.import(metadata.pluginKey).then(function(plugin) { + metadata.pluginModule = plugin; + metadata.pluginLoad = { + name: key, + address: metadata.pluginArgument, + source: undefined, + metadata: metadata.load, + }; + metadata.load.deps = metadata.load.deps || []; + }); + } + + function loadBundlesAndDepCache(config, loader, key) { + // load direct deps, in turn will pick up their trace trees + var deps = config.depCache[key]; + if (deps) { + for (var i = 0; i < deps.length; i++) loader.normalize(deps[i], key).then(preloadScript); + } else { + var matched = false; + for (var b in config.bundles) { + for (var i = 0; i < config.bundles[b].length; i++) { + var curModule = config.bundles[b][i]; + + if (curModule == key) { + matched = true; + break; + } + + // wildcard in bundles includes / boundaries + if (curModule.indexOf('*') != -1) { + var parts = curModule.split('*'); + if (parts.length != 2) { + config.bundles[b].splice(i--, 1); + continue; + } + + if ( + key.substring(0, parts[0].length) == parts[0] && + key.substr(key.length - parts[1].length, parts[1].length) == parts[1] + ) { + matched = true; + break; + } + } + } + + if (matched) return loader.import(b); + } + } + } + + function runFetchPipeline(loader, key, metadata, processAnonRegister, wasm) { + if (metadata.load.exports && !metadata.load.format) metadata.load.format = 'global'; + + return ( + resolvedPromise + // locate + .then(function() { + if (!metadata.pluginModule || !metadata.pluginModule.locate) return; + + return metadata.pluginModule.locate + .call(loader, metadata.pluginLoad) + .then(function(address) { + if (address) metadata.pluginLoad.address = address; + }); + }) + // fetch + .then(function() { + if (!metadata.pluginModule) + return fetch$1(key, metadata.load.authorization, metadata.load.integrity, wasm); + + if (!metadata.pluginModule.fetch) + return fetch$1( + metadata.pluginArgument, + metadata.load.authorization, + metadata.load.integrity, + wasm + ); + + wasm = false; + return metadata.pluginModule.fetch.call(loader, metadata.pluginLoad, function(load) { + return fetch$1( + load.address, + metadata.load.authorization, + metadata.load.integrity, + false + ); + }); + }) + .then(function(fetched) { + // fetch is already a utf-8 string if not doing wasm detection + if (!wasm || typeof fetched === 'string') + return translateAndInstantiate(loader, key, fetched, metadata, processAnonRegister); + + var bytes = new Uint8Array(fetched); + + // detect by leading bytes + if (bytes[0] === 0 && bytes[1] === 97 && bytes[2] === 115) { + return WebAssembly.compile(bytes).then(function(m) { + /* TODO handle imports when `WebAssembly.Module.imports` is implemented + if (WebAssembly.Module.imports) { + var deps = []; + var setters = []; + var importObj = {}; + WebAssembly.Module.imports(m).forEach(function (i) { + var key = i.module; + setters.push(function (m) { + importObj[key] = m; + }); + if (deps.indexOf(key) === -1) + deps.push(key); + }); + loader.register(deps, function (_export) { + return { + setters: setters, + execute: function () { + _export(new WebAssembly.Instance(m, importObj).exports); + } + }; + }); + }*/ + // for now we just load WASM without dependencies + var wasmModule = new WebAssembly.Instance(m, {}); + return loader.newModule(wasmModule.exports); + }); + } + + // not wasm -> convert buffer into utf-8 string to execute as a module + // TextDecoder compatibility matches WASM currently. Need to keep checking this. + // The TextDecoder interface is documented at http://encoding.spec.whatwg.org/#interface-textdecoder + var stringSource = new TextDecoder('utf-8').decode(bytes); + return translateAndInstantiate(loader, key, stringSource, metadata, processAnonRegister); + }) + ); + } + + function translateAndInstantiate(loader, key, source, metadata, processAnonRegister) { + return ( + Promise.resolve(source) + // translate + .then(function(source) { + if (metadata.load.format === 'detect') metadata.load.format = undefined; + + readMetaSyntax(source, metadata); + + if (!metadata.pluginModule || !metadata.pluginModule.translate) return source; + + metadata.pluginLoad.source = source; + return Promise.resolve( + metadata.pluginModule.translate.call(loader, metadata.pluginLoad, metadata.traceOpts) + ).then(function(translated) { + if (metadata.load.sourceMap) { + if (typeof metadata.load.sourceMap !== 'object') + throw new Error('metadata.load.sourceMap must be set to an object.'); + sanitizeSourceMap(metadata.pluginLoad.address, metadata.load.sourceMap); + } + + if (typeof translated === 'string') return translated; + else return metadata.pluginLoad.source; + }); + }) + .then(function(source) { + if ( + metadata.load.format === 'register' || + (!metadata.load.format && detectRegisterFormat(source)) + ) { + metadata.load.format = 'register'; + return source; + } + + if (metadata.load.format !== 'esm' && (metadata.load.format || !source.match(esmRegEx))) { + return source; + } + + metadata.load.format = 'esm'; + return transpile(loader, source, key, metadata, processAnonRegister); + }) + // instantiate + .then(function(translated) { + if ( + typeof translated !== 'string' || + !metadata.pluginModule || + !metadata.pluginModule.instantiate + ) + return translated; + + var calledInstantiate = false; + metadata.pluginLoad.source = translated; + return Promise.resolve( + metadata.pluginModule.instantiate.call(loader, metadata.pluginLoad, function(load) { + translated = load.source; + metadata.load = load.metadata; + if (calledInstantiate) throw new Error('Instantiate must only be called once.'); + calledInstantiate = true; + }) + ).then(function(result) { + if (calledInstantiate) return translated; + return protectedCreateNamespace(result); + }); + }) + .then(function(source) { + // plugin instantiate result case + if (typeof source !== 'string') return source; + + if (!metadata.load.format) metadata.load.format = detectLegacyFormat(source); + + var registered = false; + + switch (metadata.load.format) { + case 'esm': + case 'register': + case 'system': + var err = evaluate( + loader, + source, + metadata.load.sourceMap, + key, + metadata.load.integrity, + metadata.load.nonce, + false + ); + if (err) throw err; + if (!processAnonRegister()) return emptyModule; + return; + break; + + case 'json': + // warn.call(config, '"json" module format is deprecated.'); + return loader.newModule({ default: JSON.parse(source), __useDefault: true }); + + case 'amd': + var curDefine = envGlobal.define; + envGlobal.define = loader.amdDefine; + + clearLastDefine(metadata.load.deps); + + var err = evaluate( + loader, + source, + metadata.load.sourceMap, + key, + metadata.load.integrity, + metadata.load.nonce, + false + ); + + // if didn't register anonymously, use the last named define if only one + registered = processAnonRegister(); + if (!registered) { + registerLastDefine(loader); + registered = processAnonRegister(); + } + + envGlobal.define = curDefine; + + if (err) throw err; + break; + + case 'cjs': + var metaDeps = metadata.load.deps; + var deps = (metadata.load.deps || []).concat( + metadata.load.cjsRequireDetection ? getCJSDeps(source) : [] + ); + + for (var g in metadata.load.globals) + if (metadata.load.globals[g]) deps.push(metadata.load.globals[g]); + + loader.registerDynamic(deps, true, function(require, exports, module) { + require.resolve = function(key) { + return requireResolve.call(loader, key, module.id); + }; + // support module.paths ish + module.paths = []; + module.require = require; + + // ensure meta deps execute first + if (!metadata.load.cjsDeferDepsExecute && metaDeps) + for (var i = 0; i < metaDeps.length; i++) { + // require(metaDeps[i]); + } + + var pathVars = getPathVars(module.id); + var __cjsWrapper = { + exports, + args: [ + require, + exports, + module, + pathVars.filename, + pathVars.dirname, + envGlobal, + envGlobal, + ], + }; + + var cjsWrapper = + '(function (require, exports, module, __filename, __dirname, global, GLOBAL'; + + // add metadata.globals to the wrapper arguments + if (metadata.load.globals) + for (var g in metadata.load.globals) { + // __cjsWrapper.args.push(require(metadata.load.globals[g])); + cjsWrapper += ', ' + g; + } + + // disable AMD detection + var define = envGlobal.define; + envGlobal.define = undefined; + envGlobal.__cjsWrapper = __cjsWrapper; + + source = + cjsWrapper + + ') {' + + source.replace(hashBangRegEx, '') + + '\n}).apply(__cjsWrapper.exports, __cjsWrapper.args);'; + + var err = evaluate( + loader, + source, + metadata.load.sourceMap, + key, + metadata.load.integrity, + metadata.load.nonce, + false + ); + if (err) throw err; + + envGlobal.__cjsWrapper = undefined; + envGlobal.define = define; + }); + registered = processAnonRegister(); + break; + + case 'global': + var deps = metadata.load.deps || []; + for (var g in metadata.load.globals) { + var gl = metadata.load.globals[g]; + if (gl) deps.push(gl); + } + + loader.registerDynamic(deps, false, function(require, exports, module) { + var globals; + if (metadata.load.globals) { + globals = {}; + // for (var g in metadata.load.globals) + // if (metadata.load.globals[g]) globals[g] = require(metadata.load.globals[g]); + } + + var exportName = metadata.load.exports; + + if (exportName) + source += '\n' + globalName + '["' + exportName + '"] = ' + exportName + ';'; + + var retrieveGlobal = prepareGlobal( + module.id, + exportName, + globals, + metadata.load.encapsulateGlobal + ); + var err = evaluate( + loader, + source, + metadata.load.sourceMap, + key, + metadata.load.integrity, + metadata.load.nonce, + true + ); + + if (err) throw err; + + return retrieveGlobal(); + }); + registered = processAnonRegister(); + break; + + default: + throw new TypeError( + 'Unknown module format "' + + metadata.load.format + + '" for "' + + key + + '".' + + (metadata.load.format === 'es6' ? ' Use "esm" instead here.' : '') + ); + } + + if (!registered) + throw new Error( + 'Module ' + + key + + ' detected as ' + + metadata.load.format + + " but didn't execute correctly." + ); + }) + ); + } + + var globalName = typeof self != 'undefined' ? 'self' : 'global'; + + // good enough ES6 module detection regex - format detections not designed to be accurate, but to handle the 99% use case + var esmRegEx = /(^\s*|[}\);\n]\s*)(import\s*(['"]|(\*\s+as\s+)?[^"'\(\)\n;]+\s*from\s*['"]|\{)|export\s+\*\s+from\s+["']|export\s*(\{|default|function|class|var|const|let|async\s+function))/; + + var leadingCommentAndMetaRegEx = /^(\s*\/\*[^\*]*(\*(?!\/)[^\*]*)*\*\/|\s*\/\/[^\n]*|\s*"[^"]+"\s*;?|\s*'[^']+'\s*;?)*\s*/; + function detectRegisterFormat(source) { + var leadingCommentAndMeta = source.match(leadingCommentAndMetaRegEx); + return ( + leadingCommentAndMeta && + source.substr(leadingCommentAndMeta[0].length, 15) === 'System.register' + ); + } + + // AMD Module Format Detection RegEx + // define([.., .., ..], ...) + // define(varName); || define(function(require, exports) {}); || define({}) + var amdRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF.])define\s*\(\s*("[^"]+"\s*,\s*|'[^']+'\s*,\s*)?\s*(\[(\s*(("[^"]+"|'[^']+')\s*,|\/\/.*\r?\n|\/\*(.|\s)*?\*\/))*(\s*("[^"]+"|'[^']+')\s*,?)?(\s*(\/\/.*\r?\n|\/\*(.|\s)*?\*\/))*\s*\]|function\s*|{|[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*\))/; + + /// require('...') || exports[''] = ... || exports.asd = ... || module.exports = ... + var cjsExportsRegEx = /(?:^\uFEFF?|[^$_a-zA-Z\xA0-\uFFFF.])(exports\s*(\[['"]|\.)|module(\.exports|\['exports'\]|\["exports"\])\s*(\[['"]|[=,\.]))/; + // used to support leading #!/usr/bin/env in scripts as supported in Node + var hashBangRegEx = /^\#\!.*/; + + function detectLegacyFormat(source) { + if (source.match(amdRegEx)) return 'amd'; + + cjsExportsRegEx.lastIndex = 0; + cjsRequireRegEx.lastIndex = 0; + if (cjsRequireRegEx.exec(source) || cjsExportsRegEx.exec(source)) return 'cjs'; + + // global is the fallback format + return 'global'; + } + + function sanitizeSourceMap(address, sourceMap) { + var originalName = address.split('!')[0]; + + // force set the filename of the original file + if (!sourceMap.file || sourceMap.file == address) sourceMap.file = originalName + '!transpiled'; + + // force set the sources list if only one source + if ( + !sourceMap.sources || + (sourceMap.sources.length <= 1 && (!sourceMap.sources[0] || sourceMap.sources[0] === address)) + ) + sourceMap.sources = [originalName]; + } + + function transpile(loader, source, key, metadata, processAnonRegister) { + if (!loader.transpiler) + throw new TypeError( + "Unable to dynamically transpile ES module\n A loader plugin needs to be configured via `SystemJS.config({ transpiler: 'transpiler-module' })`." + ); + + // deps support for es transpile + if (metadata.load.deps) { + var depsPrefix = ''; + for (var i = 0; i < metadata.load.deps.length; i++) + depsPrefix += 'import "' + metadata.load.deps[i] + '"; '; + source = depsPrefix + source; + } + + // do transpilation + return loader.import.call(loader, loader.transpiler).then( + function(transpiler) { + if (transpiler.__useDefault) transpiler = transpiler.default; + + // translate hooks means this is a transpiler plugin instead of a raw implementation + if (!transpiler.translate) + throw new Error(loader.transpier + ' is not a valid transpiler plugin.'); + + // if transpiler is the same as the plugin loader, then don't run twice + if (transpiler === metadata.pluginModule) return load.source; + + // convert the source map into an object for transpilation chaining + if (typeof metadata.load.sourceMap === 'string') + metadata.load.sourceMap = JSON.parse(metadata.load.sourceMap); + + metadata.pluginLoad = metadata.pluginLoad || { + name: key, + address: key, + source, + metadata: metadata.load, + }; + metadata.load.deps = metadata.load.deps || []; + + return Promise.resolve( + transpiler.translate.call(loader, metadata.pluginLoad, metadata.traceOpts) + ).then(function(source) { + // sanitize sourceMap if an object not a JSON string + var sourceMap = metadata.load.sourceMap; + if (sourceMap && typeof sourceMap === 'object') sanitizeSourceMap(key, sourceMap); + + if (metadata.load.format === 'esm' && detectRegisterFormat(source)) + metadata.load.format = 'register'; + + return source; + }); + }, + function(err) { + throw LoaderError__Check_error_message_for_loader_stack( + err, + 'Unable to load transpiler to transpile ' + key + ); + } + ); + } + + // detect any meta header syntax + // only set if not already set + var metaRegEx = /^(\s*\/\*[^\*]*(\*(?!\/)[^\*]*)*\*\/|\s*\/\/[^\n]*|\s*"[^"]+"\s*;?|\s*'[^']+'\s*;?)+/; + var metaPartRegEx = /\/\*[^\*]*(\*(?!\/)[^\*]*)*\*\/|\/\/[^\n]*|"[^"]+"\s*;?|'[^']+'\s*;?/g; + + function setMetaProperty(target, p, value) { + var pParts = p.split('.'); + var curPart; + while (pParts.length > 1) { + curPart = pParts.shift(); + target = target[curPart] = target[curPart] || {}; + } + curPart = pParts.shift(); + if (target[curPart] === undefined) target[curPart] = value; + } + + function readMetaSyntax(source, metadata) { + var meta = source.match(metaRegEx); + if (!meta) return; + + var metaParts = meta[0].match(metaPartRegEx); + + for (var i = 0; i < metaParts.length; i++) { + var curPart = metaParts[i]; + var len = curPart.length; + + var firstChar = curPart.substr(0, 1); + if (curPart.substr(len - 1, 1) == ';') len--; + + if (firstChar != '"' && firstChar != "'") continue; + + var metaString = curPart.substr(1, curPart.length - 3); + var metaName = metaString.substr(0, metaString.indexOf(' ')); + + if (metaName) { + var metaValue = metaString.substr( + metaName.length + 1, + metaString.length - metaName.length - 1 + ); + + if (metaName === 'deps') metaName = 'deps[]'; + + if (metaName.substr(metaName.length - 2, 2) === '[]') { + metaName = metaName.substr(0, metaName.length - 2); + metadata.load[metaName] = metadata.load[metaName] || []; + metadata.load[metaName].push(metaValue); + } else if (metaName !== 'use') { + // "use strict" is not meta + setMetaProperty(metadata.load, metaName, metaValue); + } + } else { + metadata.load[metaString] = true; + } + } + } + + var scriptSrc; + + // Promise detection and error message + if (typeof Promise === 'undefined') throw new Error('SystemJS needs a Promise polyfill.'); + + if (typeof document !== 'undefined') { + var scripts = document.getElementsByTagName('script'); + var curScript = scripts[scripts.length - 1]; + if (document.currentScript && (curScript.defer || curScript.async)) + curScript = document.currentScript; + + scriptSrc = curScript && curScript.src; + } else if (typeof importScripts !== 'undefined') { + // worker + try { + throw new Error('_'); + } catch (e) { + e.stack.replace(/(?:at|@).*(http.+):[\d]+:[\d]+/, function(m, url) { + scriptSrc = url; + }); + } + } else if (typeof __filename !== 'undefined') { + // node + scriptSrc = __filename; + } + + function SystemJSLoader$1() { + RegisterLoader$1.call(this); + + // NB deprecate + this._loader = {}; + + // internal metadata store + this[METADATA] = {}; + + // internal configuration + this[CONFIG] = { + baseURL: baseURI, + paths: {}, + + packageConfigPaths: [], + packageConfigKeys: [], + map: {}, + packages: {}, + depCache: {}, + meta: {}, + bundles: {}, + + production: false, + + transpiler: undefined, + loadedBundles: {}, + + // global behaviour flags + warnings: false, + pluginFirst: false, + + // enable wasm loading and detection when supported + wasm: false, + }; + + // make the location of the system.js script accessible (if any) + this.scriptSrc = scriptSrc; + + this._nodeRequire = nodeRequire; + + // support the empty module, as a concept + this.registry.set('@empty', emptyModule); + + setProduction.call(this, false, false); + + // add module format helpers + formatHelpers(this); + } + + var envModule; + function setProduction(isProduction, isBuilder) { + this[CONFIG].production = isProduction; + this.registry.set( + '@system-env', + (envModule = this.newModule({ + browser: isBrowser, + node: !!this._nodeRequire, + production: !isBuilder && isProduction, + dev: isBuilder || !isProduction, + build: isBuilder, + default: true, + })) + ); + } + + SystemJSLoader$1.prototype = Object.create(RegisterLoader$1.prototype); + + SystemJSLoader$1.prototype.constructor = SystemJSLoader$1; + + // NB deprecate normalize + SystemJSLoader$1.prototype[ + (SystemJSLoader$1.resolve = RegisterLoader$1.resolve) + ] = SystemJSLoader$1.prototype.normalize = normalize; + + SystemJSLoader$1.prototype.load = function(key, parentKey) { + warn.call(this[CONFIG], 'System.load is deprecated.'); + return this.import(key, parentKey); + }; + + // NB deprecate decanonicalize, normalizeSync + SystemJSLoader$1.prototype.decanonicalize = SystemJSLoader$1.prototype.normalizeSync = SystemJSLoader$1.prototype.resolveSync = normalizeSync; + + SystemJSLoader$1.prototype[ + (SystemJSLoader$1.instantiate = RegisterLoader$1.instantiate) + ] = instantiate$1; + + SystemJSLoader$1.prototype.config = setConfig; + SystemJSLoader$1.prototype.getConfig = getConfig; + + SystemJSLoader$1.prototype.global = envGlobal; + + SystemJSLoader$1.prototype.import = function() { + return RegisterLoader$1.prototype.import.apply(this, arguments).then(function(m) { + return m.__useDefault ? m.default : m; + }); + }; + + var configNames = [ + 'baseURL', + 'map', + 'paths', + 'packages', + 'packageConfigPaths', + 'depCache', + 'meta', + 'bundles', + 'transpiler', + 'warnings', + 'pluginFirst', + 'production', + 'wasm', + ]; + + var hasProxy = typeof Proxy !== 'undefined'; + for (var i = 0; i < configNames.length; i++) + (function(configName) { + Object.defineProperty(SystemJSLoader$1.prototype, configName, { + get: function() { + var cfg = getConfigItem(this[CONFIG], configName); + + if (hasProxy && typeof cfg === 'object') + cfg = new Proxy(cfg, { + set: function(target, option) { + throw new Error( + 'Cannot set SystemJS.' + + configName + + '["' + + option + + '"] directly. Use SystemJS.config({ ' + + configName + + ': { "' + + option + + '": ... } }) rather.' + ); + }, + }); + + //if (typeof cfg === 'object') + // warn.call(this[CONFIG], 'Referencing `SystemJS.' + configName + '` is deprecated. Use the config getter `SystemJS.getConfig(\'' + configName + '\')`'); + return cfg; + }, + set: function(name) { + throw new Error( + 'Setting `SystemJS.' + + configName + + '` directly is no longer supported. Use `SystemJS.config({ ' + + configName + + ': ... })`.' + ); + }, + }); + })(configNames[i]); + + /* + * Backwards-compatible registry API, to be deprecated + */ + function registryWarn(loader, method) { + warn.call( + loader[CONFIG], + 'SystemJS.' + method + ' is deprecated for SystemJS.registry.' + method + ); + } + SystemJSLoader$1.prototype.delete = function(key) { + registryWarn(this, 'delete'); + this.registry.delete(key); + }; + SystemJSLoader$1.prototype.get = function(key) { + registryWarn(this, 'get'); + return this.registry.get(key); + }; + SystemJSLoader$1.prototype.has = function(key) { + registryWarn(this, 'has'); + return this.registry.has(key); + }; + SystemJSLoader$1.prototype.set = function(key, module) { + registryWarn(this, 'set'); + return this.registry.set(key, module); + }; + SystemJSLoader$1.prototype.newModule = function(bindings) { + return new ModuleNamespace(bindings); + }; + + // ensure System.register and System.registerDynamic decanonicalize + SystemJSLoader$1.prototype.register = function(key, deps, declare) { + if (typeof key === 'string') key = decanonicalize.call(this, this[CONFIG], key); + return RegisterLoader$1.prototype.register.call(this, key, deps, declare); + }; + + SystemJSLoader$1.prototype.registerDynamic = function(key, deps, executingRequire, execute) { + if (typeof key === 'string') key = decanonicalize.call(this, this[CONFIG], key); + return RegisterLoader$1.prototype.registerDynamic.call( + this, + key, + deps, + executingRequire, + execute + ); + }; + + SystemJSLoader$1.prototype.version = '0.20.0-rc.8 Dev'; + + var System = new SystemJSLoader$1(); + + // only set the global System on the global in browsers + if (isBrowser || isWorker) { + envGlobal.SystemJS = System; + + // dont override an existing System global + if (!envGlobal.System) { + envGlobal.System = System; + } else { + // rather just extend or set a System.register on the existing System global + var register = envGlobal.System.register; + envGlobal.System.register = function() { + if (register) register.apply(this, arguments); + System.register.apply(this, arguments); + }; + } + } + + if (typeof module !== 'undefined' && module.exports) module.exports = System; +})(); diff --git a/packages/snack-runtime/yarn.lock b/packages/snack-runtime/yarn.lock new file mode 100644 index 00000000..f28ab154 --- /dev/null +++ b/packages/snack-runtime/yarn.lock @@ -0,0 +1,9660 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@0no-co/graphql.web@^1.0.1": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.4.tgz#9606eb651955499525d068ce0ad8bea596286ce2" + integrity sha512-W3ezhHGfO0MS1PtGloaTpg0PbaT8aZSmmaerL7idtU5F7oCI+uu25k+MsMS31BVFlp4aMkHSrNRxiD72IlK8TA== + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" + integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== + dependencies: + "@babel/highlight" "^7.22.10" + chalk "^2.4.2" + +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + +"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" + integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.10" + "@babel/parser" "^7.22.10" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.1" + +"@babel/generator@^7.20.0", "@babel/generator@^7.22.10", "@babel/generator@^7.7.2": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" + integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== + dependencies: + "@babel/types" "^7.22.10" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" + integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== + dependencies: + "@babel/types" "^7.22.10" + +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" + integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.5" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" + +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.9": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.10" + +"@babel/helpers@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" + integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" + integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-decorators@^7.12.9": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz#d6a8c3a9018e1b13e6647f869c5ea56ff2b585d4" + integrity sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/plugin-syntax-decorators" "^7.22.10" + +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.5.tgz#825924eda1fad382c3de4db6fe1711b6fa03362f" + integrity sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-default-from" "^7.22.5" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.13", "@babel/plugin-proposal-object-rest-spread@^7.20.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" + integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" + integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" + integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" + +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" + +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" + +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" + integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" + integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" + integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.12.17": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@^7.0.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" + integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typescript@^7.22.5", "@babel/plugin-transform-typescript@^7.5.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" + integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.20.0": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" + integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@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-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@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-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.10" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.10" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.10" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.10" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.10" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-flow@^7.13.13": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" + integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-flow-strip-types" "^7.22.5" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.13.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" + +"@babel/register@^7.13.16": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939" + integrity sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ== + 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" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.8.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.0.0", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" + integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== + dependencies: + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.10" + "@babel/types" "^7.22.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" + integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.7.0.tgz#96e7c05e738327602ae5942437f9c6b177ec279a" + integrity sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@^8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.47.0.tgz#5478fdf443ff8158f9de171c704ae45308696c7d" + integrity sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og== + +"@expo/bunyan@4.0.0", "@expo/bunyan@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.0.tgz#be0c1de943c7987a9fbd309ea0b1acd605890c7b" + integrity sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA== + dependencies: + uuid "^8.0.0" + optionalDependencies: + mv "~2" + safe-json-stringify "~1" + +"@expo/cli@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.7.3.tgz#8d61490f4961d40c38af72b7184e3c7cab70773e" + integrity sha512-uMGHbAhApqXR2sd1KPhgvpbOhBBnspad8msEqHleT2PHXwKIwTUDzBGO9+jdOAWwCx2MJfw3+asYjzoD3DN9Bg== + dependencies: + "@babel/runtime" "^7.20.0" + "@expo/code-signing-certificates" "0.0.5" + "@expo/config" "~8.0.0" + "@expo/config-plugins" "~6.0.0" + "@expo/dev-server" "0.3.0" + "@expo/devcert" "^1.0.0" + "@expo/json-file" "^8.2.37" + "@expo/metro-config" "~0.7.0" + "@expo/osascript" "^2.0.31" + "@expo/package-manager" "~1.0.0" + "@expo/plist" "^0.0.20" + "@expo/prebuild-config" "6.0.1" + "@expo/rudder-sdk-node" "1.1.1" + "@expo/spawn-async" "1.5.0" + "@expo/xcpretty" "^4.2.1" + "@urql/core" "2.3.6" + "@urql/exchange-retry" "0.3.0" + accepts "^1.3.8" + arg "4.1.0" + better-opn "~3.0.2" + bplist-parser "^0.3.1" + cacache "^15.3.0" + chalk "^4.0.0" + ci-info "^3.3.0" + debug "^4.3.4" + env-editor "^0.4.1" + form-data "^3.0.1" + freeport-async "2.0.0" + fs-extra "~8.1.0" + getenv "^1.0.0" + graphql "15.8.0" + graphql-tag "^2.10.1" + https-proxy-agent "^5.0.1" + internal-ip "4.3.0" + is-root "^2.1.0" + js-yaml "^3.13.1" + json-schema-deref-sync "^0.13.0" + md5-file "^3.2.3" + md5hex "^1.0.0" + minipass "3.1.6" + node-fetch "^2.6.7" + node-forge "^1.3.1" + npm-package-arg "^7.0.0" + ora "3.4.0" + pretty-bytes "5.6.0" + progress "2.0.3" + prompts "^2.3.2" + qrcode-terminal "0.11.0" + requireg "^0.2.2" + resolve-from "^5.0.0" + semver "^6.3.0" + send "^0.18.0" + slugify "^1.3.4" + structured-headers "^0.4.1" + tar "^6.0.5" + tempy "^0.7.1" + terminal-link "^2.1.1" + text-table "^0.2.0" + url-join "4.0.0" + wrap-ansi "^7.0.0" + ws "^8.12.1" + +"@expo/code-signing-certificates@0.0.5": + version "0.0.5" + resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c" + integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw== + dependencies: + node-forge "^1.2.1" + nullthrows "^1.1.1" + +"@expo/config-plugins@6.0.2", "@expo/config-plugins@~6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-6.0.2.tgz#cf07319515022ba94d9aa9fa30e0cff43a14256f" + integrity sha512-Cn01fXMHwjU042EgO9oO3Mna0o/UCrW91MQLMbJa4pXM41CYGjNgVy1EVXiuRRx/upegHhvltBw5D+JaUm8aZQ== + dependencies: + "@expo/config-types" "^48.0.0" + "@expo/json-file" "~8.2.37" + "@expo/plist" "^0.0.20" + "@expo/sdk-runtime-versions" "^1.0.0" + "@react-native/normalize-color" "^2.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.3.5" + slash "^3.0.0" + xcode "^3.0.1" + xml2js "0.4.23" + +"@expo/config-plugins@~5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-5.0.4.tgz#216fea6558fe66615af1370de55193f4181cb23e" + integrity sha512-vzUcVpqOMs3h+hyRdhGwk+eGIOhXa5xYdd92yO17RMNHav3v/+ekMbs7XA2c3lepMO8Yd4/5hqmRw9ZTL6jGzg== + dependencies: + "@expo/config-types" "^47.0.0" + "@expo/json-file" "8.2.36" + "@expo/plist" "0.0.18" + "@expo/sdk-runtime-versions" "^1.0.0" + "@react-native/normalize-color" "^2.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.3.5" + slash "^3.0.0" + xcode "^3.0.1" + xml2js "0.4.23" + +"@expo/config-types@^47.0.0": + version "47.0.0" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-47.0.0.tgz#99eeabe0bba7a776e0f252b78beb0c574692c38d" + integrity sha512-r0pWfuhkv7KIcXMUiNACJmJKKwlTBGMw9VZHNdppS8/0Nve8HZMTkNRFQzTHW1uH3pBj8jEXpyw/2vSWDHex9g== + +"@expo/config-types@^48.0.0": + version "48.0.0" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-48.0.0.tgz#15a46921565ffeda3c3ba010701398f05193d5b3" + integrity sha512-DwyV4jTy/+cLzXGAo1xftS6mVlSiLIWZjl9DjTCLPFVgNYQxnh7htPilRv4rBhiNs7KaznWqKU70+4zQoKVT9A== + +"@expo/config@8.0.5", "@expo/config@~8.0.0": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-8.0.5.tgz#71380a7a20f2e27fe386d7bb73428a437b27a96b" + integrity sha512-3CnLmtAQUWqLZwTRliS23QoFwdyhg4AWtp6gZ0qfcXthR84RvlZKcCDQQIyPiRUgu8dZa+gQDcdRJtgE+GM5XQ== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~6.0.0" + "@expo/config-types" "^48.0.0" + "@expo/json-file" "^8.2.37" + getenv "^1.0.0" + glob "7.1.6" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + semver "7.3.2" + slugify "^1.3.4" + sucrase "^3.20.0" + +"@expo/config@~7.0.2": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.3.tgz#c9c634e76186de25e296485e51418f1e52966e6e" + integrity sha512-joVtB5o+NF40Tmsdp65UzryRtbnCuMbXkVO4wJnNJO4aaK0EYLdHCYSewORVqNcDfGN0LphQr8VTG2npbd9CJA== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~5.0.3" + "@expo/config-types" "^47.0.0" + "@expo/json-file" "8.2.36" + getenv "^1.0.0" + glob "7.1.6" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + semver "7.3.2" + slugify "^1.3.4" + sucrase "^3.20.0" + +"@expo/dev-server@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@expo/dev-server/-/dev-server-0.3.0.tgz#c575c88b0ec28f127f328a80ea6a3a4c6f785800" + integrity sha512-2A6/8uZADSKAtzyR6YqhCBUFxb5DFmjxmFn0EHMqnPnsh13ZSiKEjrZPrRkM6Li2EHLYqHK2rmweJ7O/7q9pPQ== + dependencies: + "@expo/bunyan" "4.0.0" + "@expo/metro-config" "~0.7.0" + "@expo/osascript" "2.0.33" + "@expo/spawn-async" "^1.5.0" + body-parser "^1.20.1" + chalk "^4.0.0" + connect "^3.7.0" + fs-extra "9.0.0" + is-docker "^2.0.0" + is-wsl "^2.1.1" + node-fetch "^2.6.0" + open "^8.3.0" + resolve-from "^5.0.0" + semver "7.3.2" + serialize-error "6.0.0" + temp-dir "^2.0.0" + +"@expo/devcert@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.1.0.tgz#d148eb9180db6753c438192e73a123fb13b662ac" + integrity sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA== + dependencies: + application-config-path "^0.1.0" + command-exists "^1.2.4" + debug "^3.1.0" + eol "^0.9.1" + get-port "^3.2.0" + glob "^7.1.2" + lodash "^4.17.4" + mkdirp "^0.5.1" + password-prompt "^1.0.4" + rimraf "^2.6.2" + sudo-prompt "^8.2.0" + tmp "^0.0.33" + tslib "^2.4.0" + +"@expo/image-utils@0.3.22": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.22.tgz#3a45fb2e268d20fcc761c87bca3aca7fd8e24260" + integrity sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ== + dependencies: + "@expo/spawn-async" "1.5.0" + chalk "^4.0.0" + fs-extra "9.0.0" + getenv "^1.0.0" + jimp-compact "0.16.1" + mime "^2.4.4" + node-fetch "^2.6.0" + parse-png "^2.1.0" + resolve-from "^5.0.0" + semver "7.3.2" + tempy "0.3.0" + +"@expo/json-file@8.2.36": + version "8.2.36" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.36.tgz#62a505cb7f30a34d097386476794680a3f7385ff" + integrity sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^1.0.1" + write-file-atomic "^2.3.0" + +"@expo/json-file@^8.2.37", "@expo/json-file@~8.2.37": + version "8.2.37" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.37.tgz#9c02d3b42134907c69cc0a027b18671b69344049" + integrity sha512-YaH6rVg11JoTS2P6LsW7ybS2CULjf40AbnAHw2F1eDPuheprNjARZMnyHFPkKv7GuxCy+B9GPcbOKgc4cgA80Q== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.2" + write-file-atomic "^2.3.0" + +"@expo/metro-config@~0.7.0": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.7.1.tgz#eaae792da23554c1abbc401df868566fab29951b" + integrity sha512-vGWU62Zp5pRGw5IEHDNdqvsy62/hu/Na7bswePYVjoaItOjJY7+qilFeF0AAK+3V8qAM8fpltH3ByylKfWaA7A== + dependencies: + "@expo/config" "~8.0.0" + chalk "^4.1.0" + debug "^4.3.2" + find-yarn-workspace-root "~2.0.0" + getenv "^1.0.0" + resolve-from "^5.0.0" + sucrase "^3.20.0" + +"@expo/osascript@2.0.33", "@expo/osascript@^2.0.31": + version "2.0.33" + resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.0.33.tgz#e9dcc8da54466c11939074aa71a006024ea884b1" + integrity sha512-FQinlwHrTlJbntp8a7NAlCKedVXe06Va/0DSLXRO8lZVtgbEMrYYSUZWQNcOlNtc58c2elNph6z9dMOYwSo3JQ== + dependencies: + "@expo/spawn-async" "^1.5.0" + exec-async "^2.2.0" + +"@expo/package-manager@~1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.0.2.tgz#6c5fd0ee9b3d28c5523b2484c62c6c7b0c8dbf89" + integrity sha512-dlUp6o8qs1mi3/+l3y7cY3oMoqQVVzvH18cUTi6+t4ob8XwTpaeP2SwOP+obwZN29dMg9YzZAv4eQz+mshAbQA== + dependencies: + "@expo/json-file" "^8.2.37" + "@expo/spawn-async" "^1.5.0" + ansi-regex "^5.0.0" + chalk "^4.0.0" + find-up "^5.0.0" + find-yarn-workspace-root "~2.0.0" + js-yaml "^3.13.1" + micromatch "^4.0.2" + npm-package-arg "^7.0.0" + split "^1.0.1" + sudo-prompt "9.1.1" + +"@expo/plist@0.0.18": + version "0.0.18" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.18.tgz#9abcde78df703a88f6d9fa1a557ee2f045d178b0" + integrity sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w== + dependencies: + "@xmldom/xmldom" "~0.7.0" + base64-js "^1.2.3" + xmlbuilder "^14.0.0" + +"@expo/plist@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.20.tgz#a6b3124438031c02b762bad5a47b70584d3c0072" + integrity sha512-UXQ4LXCfTZ580LDHGJ5q62jSTwJFFJ1GqBu8duQMThiHKWbMJ+gajJh6rsB6EJ3aLUr9wcauxneL5LVRFxwBEA== + dependencies: + "@xmldom/xmldom" "~0.7.7" + base64-js "^1.2.3" + xmlbuilder "^14.0.0" + +"@expo/prebuild-config@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-6.0.1.tgz#e3a5bbf5892859e71ac6a2408b1cc8ba6ca3f58f" + integrity sha512-WK3FDht1tdXZGCvtG5s7HSwzhsc7Tyu2DdqV9jVUsLtGD42oqUepk13mEWlU9LOTBgLsoEueKjoSK4EXOXFctw== + dependencies: + "@expo/config" "~8.0.0" + "@expo/config-plugins" "~6.0.0" + "@expo/config-types" "^48.0.0" + "@expo/image-utils" "0.3.22" + "@expo/json-file" "^8.2.37" + debug "^4.3.1" + fs-extra "^9.0.0" + resolve-from "^5.0.0" + semver "7.3.2" + xml2js "0.4.23" + +"@expo/rudder-sdk-node@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz#6aa575f346833eb6290282118766d4919c808c6a" + integrity sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ== + dependencies: + "@expo/bunyan" "^4.0.0" + "@segment/loosely-validate-event" "^2.0.0" + fetch-retry "^4.1.1" + md5 "^2.2.1" + node-fetch "^2.6.1" + remove-trailing-slash "^0.1.0" + uuid "^8.3.2" + +"@expo/sdk-runtime-versions@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" + integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== + +"@expo/spawn-async@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395" + integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew== + dependencies: + cross-spawn "^6.0.5" + +"@expo/spawn-async@^1.5.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" + integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== + dependencies: + cross-spawn "^7.0.3" + +"@expo/vector-icons@^13.0.0": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-13.0.0.tgz#e2989b85e95a82bce216f88cf8fb583ab050ec95" + integrity sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA== + +"@expo/xcpretty@^4.2.1": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@expo/xcpretty/-/xcpretty-4.2.2.tgz#7890f86b017015be8a20242ae74fe6ed4b80a92c" + integrity sha512-Lke/geldJqUV0Dfxg5/QIOugOzdqZ/rQ9yHKSgGbjZtG1uiSqWyFwWvXmrdd3/sIdX33eykGvIcf+OrvvcXVUw== + dependencies: + "@babel/code-frame" "7.10.4" + chalk "^4.1.0" + find-up "^5.0.0" + js-yaml "^4.1.0" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@graphql-typed-document-node/core@^3.1.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + 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" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/console@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.3.tgz#55ad945087c27e380d6d9fcbb85181ed802543f3" + integrity sha512-ukZbHAdDH4ktZIOKvWs1juAXhiVAdvCyM8zv4S/7Ii3vJSDvMW5k+wOVGMQmHLHUFw3Ko63ZQNy7NI6PSlsD5w== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.6.3" + jest-util "^29.6.3" + slash "^3.0.0" + +"@jest/core@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.3.tgz#bccee53680762e1bdef2a0038f123cc8d7ba4ab8" + integrity sha512-skV1XrfNxfagmjRUrk2FyN5/2YwIzdWVVBa/orUfbLvQUANXxERq2pTvY0I+FinWHjDKB2HRmpveUiph4X0TJw== + dependencies: + "@jest/console" "^29.6.3" + "@jest/reporters" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/transform" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.6.3" + jest-config "^29.6.3" + jest-haste-map "^29.6.3" + jest-message-util "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.3" + jest-resolve-dependencies "^29.6.3" + jest-runner "^29.6.3" + jest-runtime "^29.6.3" + jest-snapshot "^29.6.3" + jest-util "^29.6.3" + jest-validate "^29.6.3" + jest-watcher "^29.6.3" + micromatch "^4.0.4" + pretty-format "^29.6.3" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/create-cache-key-function@^27.0.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" + integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== + dependencies: + "@jest/types" "^27.5.1" + +"@jest/create-cache-key-function@^29.2.1": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.6.3.tgz#e16da2139246403fb359fd65fced012eb32aa2b1" + integrity sha512-kzSK9XAxtD1kRPJKxsmD0YKw2fyXveP+5ikeQkCYCHeacWW1EGYMTgjDIM/Di4Uhttx7lnHwrNpz2xn+0rTp8g== + dependencies: + "@jest/types" "^29.6.3" + +"@jest/environment@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.3.tgz#bb02535c729393a0345b8d2c5eef94d34f7b35a3" + integrity sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA== + dependencies: + "@jest/fake-timers" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.6.3" + +"@jest/expect-utils@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.3.tgz#5ef1a9689fdaa348da837c8be8d1219f56940ea3" + integrity sha512-nvOEW4YoqRKD9HBJ9OJ6przvIvP9qilp5nAn1462P5ZlL/MM9SgPEZFyjTGPfs7QkocdUsJa6KjHhyRn4ueItA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.3.tgz#d54e1e7134982166f62653add0d4b8262dd72db9" + integrity sha512-Ic08XbI2jlg6rECy+CGwk/8NDa6VE7UmIG6++9OTPAMnQmNGY28hu69Nf629CWv6T7YMODLbONxDFKdmQeI9FA== + dependencies: + expect "^29.6.3" + jest-snapshot "^29.6.3" + +"@jest/fake-timers@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.3.tgz#7e780b05b14ad59dca68bdc188f6cf085552a0e8" + integrity sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.6.3" + jest-mock "^29.6.3" + jest-util "^29.6.3" + +"@jest/globals@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.3.tgz#fe9e302bc20683ba8feb683b8804e38a9913b783" + integrity sha512-RB+uI+CZMHntzlnOPlll5x/jgRff3LEPl/td/jzMXiIgR0iIhKq9qm1HLU+EC52NuoVy/1swit/sDGjVn4bc6A== + dependencies: + "@jest/environment" "^29.6.3" + "@jest/expect" "^29.6.3" + "@jest/types" "^29.6.3" + jest-mock "^29.6.3" + +"@jest/reporters@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.3.tgz#e5071915d74f43e0f49982fa518ca3283a9f4c5a" + integrity sha512-kGz59zMi0GkVjD2CJeYWG9k6cvj7eBqt9aDAqo2rcCLRTYlvQ62Gu/n+tOmJMBHGjzeijjuCENjzTyYBgrtLUw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/transform" "^29.6.3" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.6.3" + jest-util "^29.6.3" + jest-worker "^29.6.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.3.tgz#1da4c6749c16a71c108644624d9cd0d17206aa2b" + integrity sha512-k7ZZaNvOSMBHPZYiy0kuiaFoyansR5QnTwDux1EjK3kD5iWpRVyJIJ0RAIV39SThafchuW59vra7F8mdy5Hfgw== + dependencies: + "@jest/console" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.3.tgz#e59f422bc3786d79fac504c16979a5f1b999a932" + integrity sha512-/SmijaAU2TY9ComFGIYa6Z+fmKqQMnqs2Nmwb0P/Z/tROdZ7M0iruES1EaaU9PBf8o9uED5xzaJ3YPFEIcDgAg== + dependencies: + "@jest/test-result" "^29.6.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.3" + slash "^3.0.0" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + 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" + +"@jest/transform@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.3.tgz#e8e376f56fffe827b529bf03a9881e58d152c14b" + integrity sha512-dPIc3DsvMZ/S8ut4L2ViCj265mKO0owB0wfzBv2oGzL9pQ+iRvJewHqLBmsGb7XFb5UotWIEtvY5A/lnylaIoQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.3" + jest-regex-util "^29.6.3" + jest-util "^29.6.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + 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" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@react-native-community/cli-clean@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-10.1.1.tgz#4c73ce93a63a24d70c0089d4025daac8184ff504" + integrity sha512-iNsrjzjIRv9yb5y309SWJ8NDHdwYtnCpmxZouQDyOljUdC9MwdZ4ChbtA4rwQyAwgOVfS9F/j56ML3Cslmvrxg== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + prompts "^2.4.0" + +"@react-native-community/cli-config@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-10.1.1.tgz#08dcc5d7ca1915647dc06507ed853fe0c1488395" + integrity sha512-p4mHrjC+s/ayiNVG6T35GdEGdP6TuyBUg5plVGRJfTl8WT6LBfLYLk+fz/iETrEZ/YkhQIsQcEUQC47MqLNHog== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^3.2.0" + glob "^7.1.3" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-10.0.0.tgz#4bb6d41c7e46449714dc7ba5d9f5b41ef0ea7c57" + integrity sha512-8UKLcvpSNxnUTRy8CkCl27GGLqZunQ9ncGYhSrWyKrU9SWBJJGeZwi2k2KaoJi5FvF2+cD0t8z8cU6lsq2ZZmA== + dependencies: + serve-static "^1.13.1" + +"@react-native-community/cli-doctor@^10.2.2": + version "10.2.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-10.2.5.tgz#e5e28c66c2373f05a94b296a8ec637f8df736707" + integrity sha512-1YbzXvsldBmSw1MmBsXB74bKiHXKNCjlb2ByLgkfTiarpSvETYam3g5vex0N+qc0Cdkzkq+8NznE744LFhnUpw== + dependencies: + "@react-native-community/cli-config" "^10.1.1" + "@react-native-community/cli-platform-ios" "^10.2.5" + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + command-exists "^1.2.8" + envinfo "^7.7.2" + execa "^1.0.0" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + prompts "^2.4.0" + semver "^6.3.0" + strip-ansi "^5.2.0" + sudo-prompt "^9.0.0" + wcwidth "^1.0.1" + +"@react-native-community/cli-hermes@^10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-10.2.0.tgz#cc252f435b149f74260bc918ce22fdf58033a87e" + integrity sha512-urfmvNeR8IiO/Sd92UU3xPO+/qI2lwCWQnxOkWaU/i2EITFekE47MD6MZrfVulRVYRi5cuaFqKZO/ccOdOB/vQ== + dependencies: + "@react-native-community/cli-platform-android" "^10.2.0" + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + +"@react-native-community/cli-platform-android@10.2.0", "@react-native-community/cli-platform-android@^10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-10.2.0.tgz#0bc689270a5f1d9aaf9e723181d43ca4dbfffdef" + integrity sha512-CBenYwGxwFdObZTn1lgxWtMGA5ms2G/ALQhkS+XTAD7KHDrCxFF9yT/fnAjFZKM6vX/1TqGI1RflruXih3kAhw== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + glob "^7.1.3" + logkitty "^0.7.1" + +"@react-native-community/cli-platform-ios@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.1.tgz#2e6bd2cb6d48cbb8720d7b7265bb1bab80745f72" + integrity sha512-hz4zu4Y6eyj7D0lnZx8Mf2c2si8y+zh/zUTgCTaPPLzQD8jSZNNBtUUiA1cARm2razpe8marCZ1QbTMAGbf3mg== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + fast-xml-parser "^4.0.12" + glob "^7.1.3" + ora "^5.4.1" + +"@react-native-community/cli-platform-ios@^10.2.5": + version "10.2.5" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.5.tgz#7888c74b83099885bf9e6d52170c6e663ad971ee" + integrity sha512-hq+FZZuSBK9z82GLQfzdNDl8vbFx5UlwCLFCuTtNCROgBoapFtVZQKRP2QBftYNrQZ0dLAb01gkwxagHsQCFyg== + dependencies: + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + fast-xml-parser "^4.0.12" + glob "^7.1.3" + ora "^5.4.1" + +"@react-native-community/cli-plugin-metro@^10.2.2": + version "10.2.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.2.3.tgz#419e0155a50951c3329818fba51cb5021a7294f1" + integrity sha512-jHi2oDuTePmW4NEyVT8JEGNlIYcnFXCSV2ZMp4rnDrUk4TzzyvS3IMvDlESEmG8Kry8rvP0KSUx/hTpy37Sbkw== + dependencies: + "@react-native-community/cli-server-api" "^10.1.1" + "@react-native-community/cli-tools" "^10.1.1" + chalk "^4.1.2" + execa "^1.0.0" + metro "0.73.10" + metro-config "0.73.10" + metro-core "0.73.10" + metro-react-native-babel-transformer "0.73.10" + metro-resolver "0.73.10" + metro-runtime "0.73.10" + readline "^1.3.0" + +"@react-native-community/cli-server-api@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-10.1.1.tgz#e382269de281bb380c2e685431364fbbb8c1cb3a" + integrity sha512-NZDo/wh4zlm8as31UEBno2bui8+ufzsZV+KN7QjEJWEM0levzBtxaD+4je0OpfhRIIkhaRm2gl/vVf7OYAzg4g== + dependencies: + "@react-native-community/cli-debugger-ui" "^10.0.0" + "@react-native-community/cli-tools" "^10.1.1" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.0" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^7.5.1" + +"@react-native-community/cli-tools@^10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-10.1.1.tgz#fa66e509c0d3faa31f7bb87ed7d42ad63f368ddd" + integrity sha512-+FlwOnZBV+ailEzXjcD8afY2ogFEBeHOw/8+XXzMgPaquU2Zly9B+8W089tnnohO3yfiQiZqkQlElP423MY74g== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^6.3.0" + shell-quote "^1.7.3" + +"@react-native-community/cli-types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-10.0.0.tgz#046470c75ec18f8b3bd906e54e43a6f678e01a45" + integrity sha512-31oUM6/rFBZQfSmDQsT1DX/5fjqfxg7sf2u8kTPJK7rXVya5SRpAMaCXsPAG0omsmJxXt+J9HxUi3Ic+5Ux5Iw== + dependencies: + joi "^17.2.1" + +"@react-native-community/cli@10.2.2": + version "10.2.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-10.2.2.tgz#3fa438ba7f19f83e07bc337765fc1cabdcf2cac2" + integrity sha512-aZVcVIqj+OG6CrliR/Yn8wHxrvyzbFBY9cj7n0MvRw/P54QUru2nNqUTSSbqv0Qaa297yHJbe6kFDojDMSTM8Q== + dependencies: + "@react-native-community/cli-clean" "^10.1.1" + "@react-native-community/cli-config" "^10.1.1" + "@react-native-community/cli-debugger-ui" "^10.0.0" + "@react-native-community/cli-doctor" "^10.2.2" + "@react-native-community/cli-hermes" "^10.2.0" + "@react-native-community/cli-plugin-metro" "^10.2.2" + "@react-native-community/cli-server-api" "^10.1.1" + "@react-native-community/cli-tools" "^10.1.1" + "@react-native-community/cli-types" "^10.0.0" + chalk "^4.1.2" + commander "^9.4.1" + execa "^1.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + graceful-fs "^4.1.3" + prompts "^2.4.0" + semver "^6.3.0" + +"@react-native/assets@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" + integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== + +"@react-native/normalize-color@*", "@react-native/normalize-color@2.1.0", "@react-native/normalize-color@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" + integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== + +"@react-native/polyfills@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" + integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ== + +"@segment/loosely-validate-event@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681" + integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== + dependencies: + component-type "^1.2.1" + join-component "^1.1.0" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@*": + version "20.5.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.3.tgz#fa52c147f405d56b2f1dd8780d840aa87ddff629" + integrity sha512-ITI7rbWczR8a/S6qjAW7DMqxqFMjjTo61qZVWJ1ubPvbIQsL5D/TvwjYEalM8Kthpe3hTzOGrF2TGbAu2uyqeA== + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^15.0.0": + version "15.0.15" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" + integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^16.0.0": + version "16.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" + integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.50.0", "@typescript-eslint/eslint-plugin@^5.59.7": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.50.0", "@typescript-eslint/parser@^5.59.7": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@urql/core@2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-2.3.6.tgz#ee0a6f8fde02251e9560c5f17dce5cd90f948552" + integrity sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw== + dependencies: + "@graphql-typed-document-node/core" "^3.1.0" + wonka "^4.0.14" + +"@urql/core@>=2.3.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.1.1.tgz#b1312eb0ecbc91e315457a3ec14741321cbee1c7" + integrity sha512-iIoAy6BY+BUZZ7KIpnMT7C9q+ULf5ZCVxGe3/i7WZSJBrQa2h1QkIMhL+8fAKmOn9gt83jSIv5drWWnhZ9izEA== + dependencies: + "@0no-co/graphql.web" "^1.0.1" + wonka "^6.3.2" + +"@urql/exchange-retry@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz#13252108b5a111aab45f9982f4db18d1a286e423" + integrity sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg== + dependencies: + "@urql/core" ">=2.3.1" + wonka "^4.0.14" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +"@xmldom/xmldom@~0.7.0", "@xmldom/xmldom@~0.7.7": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3" + integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +absolute-path@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + integrity sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA== + +accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +anser@^1.4.9: + version "1.4.10" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" + integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-fragments@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" + integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== + dependencies: + colorette "^1.0.7" + slice-ansi "^2.0.0" + strip-ansi "^5.0.0" + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +appdirsjs@^1.2.4: + version "1.2.7" + resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3" + integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw== + +application-config-path@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.1.tgz#8b5ac64ff6afdd9bd70ce69f6f64b6998f5f756e" + integrity sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw== + +arg@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" + integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.findlastindex@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" + integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.3, asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +ast-types@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +await-lock@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/await-lock/-/await-lock-2.2.2.tgz#a95a9b269bfd2f69d22b17a321686f551152bcef" + integrity sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw== + +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.3.tgz#e62f6c38f3ec8c147244168ee18ef0b919f10348" + integrity sha512-1Ne93zZZEy5XmTa4Q+W5+zxBrDpExX8E3iy+xJJ+24ewlfo/T3qHfQJCzi/MMVFmBQDNxtRR/Gfd2dwb/0yrQw== + dependencies: + "@jest/transform" "^29.6.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + 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" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-module-resolver@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" + integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA== + dependencies: + find-babel-config "^1.2.0" + glob "^7.1.6" + pkg-up "^3.1.0" + reselect "^4.0.0" + resolve "^1.13.1" + +babel-plugin-module-resolver@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" + integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== + dependencies: + find-babel-config "^2.0.0" + glob "^8.0.3" + pkg-up "^3.1.0" + reselect "^4.1.7" + resolve "^1.22.1" + +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + +babel-plugin-react-native-web@~0.18.10: + version "0.18.12" + resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.18.12.tgz#3e9764484492ea612a16b40135b07c2d05b7969d" + integrity sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw== + +babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== + +babel-plugin-transform-flow-enums@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz#d1d0cc9bdc799c850ca110d0ddc9f21b9ec3ef25" + integrity sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ== + dependencies: + "@babel/plugin-syntax-flow" "^7.12.1" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-expo@^9.3.0: + version "9.5.2" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.5.2.tgz#5ed1756c8434ca972d7a940e4f13570a283641df" + integrity sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ== + dependencies: + "@babel/plugin-proposal-decorators" "^7.12.9" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-object-rest-spread" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/preset-env" "^7.20.0" + babel-plugin-module-resolver "^5.0.0" + babel-plugin-react-native-web "~0.18.10" + metro-react-native-babel-preset "0.76.8" + +babel-preset-expo@~9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.3.2.tgz#0fe408d8d816a3e10fde2e1d1f7aa51b112baf3a" + integrity sha512-BjyvjwjJG0MaaDBLP/esbXRrAItM76po9L9zfnLxeqgFsHCIPmD+6ir45coDLGAXwR8m9It3G1yqYM9JPyemsQ== + dependencies: + "@babel/plugin-proposal-decorators" "^7.12.9" + "@babel/plugin-proposal-object-rest-spread" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/preset-env" "^7.20.0" + babel-plugin-module-resolver "^4.1.0" + babel-plugin-react-native-web "~0.18.10" + metro-react-native-babel-preset "0.73.9" + +babel-preset-fbjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" + integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + 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" + +better-opn@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" + integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== + dependencies: + open "^8.0.4" + +big-integer@1.6.x: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blueimp-md5@^2.10.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== + +body-parser@^1.20.1: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bplist-creator@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== + dependencies: + stream-buffers "2.2.x" + +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== + dependencies: + big-integer "1.6.x" + +bplist-parser@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.2.tgz#3ac79d67ec52c4c107893e0237eb787cbacbced7" + integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ== + dependencies: + big-integer "1.6.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + 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" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10, browserslist@^4.21.9: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + 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" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001517: + version "1.0.30001522" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" + integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +charenc@0.0.2, charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0, ci-info@^3.3.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.0.0, cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.0.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.4, command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-versions@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" + integrity sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect@^3.6.5, connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +core-js-compat@^3.31.0: + version "3.32.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" + integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== + dependencies: + browserslist "^4.21.10" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2, crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +dag-map@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-1.0.2.tgz#e8379f041000ed561fc515475c1ed2c85eece8d7" + integrity sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw== + +dayjs@^1.8.15: + version "1.11.9" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" + integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" + integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecated-react-native-prop-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-3.0.1.tgz#a275f84cd8519cd1665e8df3c99e9067d57a23ec" + integrity sha512-J0jCJcsk4hMlIb7xwOZKLfMpuJn6l8UtrPEzzQV5ewz5gvKNYakhBuq9h2rWX7YwHHJZFhU5W8ye7dB9oN8VcQ== + dependencies: + "@react-native/normalize-color" "*" + invariant "*" + prop-types "*" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.477: + version "1.4.499" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.499.tgz#dc36b67f4c8e273524e8d2080c5203a6a76987b6" + integrity sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-editor@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" + integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== + +envinfo@^7.7.2: + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== + +eol@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" + integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +errorhandler@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" + integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== + dependencies: + accepts "~1.3.7" + escape-html "~1.0.3" + +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-iterator-helpers@^1.0.12: + version "1.0.13" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" + integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.3" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.0" + safe-array-concat "^1.0.0" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + +eslint-config-universe@^11.2.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-universe/-/eslint-config-universe-11.3.0.tgz#d6312bb96f9d4bb6c598ce3a46ce517b848efea0" + integrity sha512-CL6v7IxV+OJn0q1vqtFVtX+sNUdY7MiIy3/XD0dy96D7RsDvYBWWqs4S1AIB4AdVgraNnv829q1+asluAePSSw== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.50.0" + "@typescript-eslint/parser" "^5.50.0" + eslint-config-prettier "^8.5.0" + eslint-plugin-import "^2.26.0" + eslint-plugin-node "^11.1.0" + eslint-plugin-prettier "^4.2.1" + eslint-plugin-react "^7.31.11" + eslint-plugin-react-hooks "^4.6.0" + +eslint-import-resolver-node@^0.3.7: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.26.0: + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" + has "^1.0.3" + is-core-module "^2.13.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.31.11: + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.1" + string.prototype.matchall "^4.0.8" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.20.0: + version "8.47.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.47.0.tgz#c95f9b935463fb4fad7005e626c7621052e90806" + integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "^8.47.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + 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.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0, event-target-shim@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +exec-async@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301" + integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw== + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + 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" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + 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" + +expect@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.3.tgz#e74b57c35a81fd93ece6b570e371309c53dc4f54" + integrity sha512-x1vY4LlEMWUYVZQrFi4ZANXFwqYbJ/JNQspLVvzhW2BNY28aNcXMQH6imBbt+RBf5sVRTodYHXtSP/TLEU0Dxw== + dependencies: + "@jest/expect-utils" "^29.6.3" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.6.3" + jest-message-util "^29.6.3" + jest-util "^29.6.3" + +expo-application@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.1.1.tgz#5206bf0cf89cb0e32d1f5037a0481e5c86b951ab" + integrity sha512-aDatTcTTCdTbHw8h4/Tq2ilc6InM5ntF9xWCJdOcnUEcglxxGphVI/lzJKBaBF6mJECA8mEOjpVg2EGxOctTwg== + +expo-asset@~8.9.1: + version "8.9.2" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.9.2.tgz#07f32d29d4f0ef99c80ffc831e81d62238f759a9" + integrity sha512-aHMaZkIG5/UoguINEHm2ln/KviU2m/yuryslnhCKR3KXRxiLnMhxmrONLGbknuNE0O1iCaprrl1w3y71u01Rpw== + dependencies: + blueimp-md5 "^2.10.0" + expo-constants "~14.3.0" + expo-file-system "~15.3.0" + invariant "^2.2.4" + md5-file "^3.2.3" + path-browserify "^1.0.0" + url-parse "^1.5.9" + +expo-constants@~14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.2.1.tgz#b5b6b8079d2082c31ccf2cbc7cf97a0e83c229c3" + integrity sha512-DD5u4QmBds2U7uYo409apV7nX+XjudARcgqe7S9aRFJ/6kyftmuxvk1DpaU4X42Av8z/tfKwEpuxl+vl7HHx/Q== + dependencies: + "@expo/config" "~8.0.0" + uuid "^3.3.2" + +expo-constants@~14.3.0: + version "14.3.0" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.3.0.tgz#56478ddbbff990273174819528d218f9576ac147" + integrity sha512-O8b+mZlPXZGH4wLLd+jMihGD0ZSMJRSmSsmcG7T60jHU3Dw4yDIuzHM/wMoBoL1pxLIbEwvcwDj0w8c+Sn+1sQ== + dependencies: + "@expo/config" "~8.0.0" + uuid "^3.3.2" + +expo-file-system@~15.2.2: + version "15.2.2" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.2.2.tgz#a1ddf8aabf794f93888a146c4f5187e2004683a3" + integrity sha512-LFkOLcWwlmnjkURxZ3/0ukS35OswX8iuQknLHRHeyk8mUA8fpRPPelD/a1lS+yclqfqavMJmTXVKM1Nsq5XVMA== + dependencies: + uuid "^3.4.0" + +expo-file-system@~15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.3.0.tgz#fae2806bbedee6c0c3ecf1a0f9015963f4c4d1df" + integrity sha512-YUvNZzZJlF5TZM+FoRW9biJPB7qEgZbGYm8xJpqnxpj70FkFhwwoKiXVduZk+KVNiIs7d0q7e+Jdvmcr+Id3FQ== + dependencies: + uuid "^3.4.0" + +expo-font@~11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-11.1.1.tgz#268eed407e94f6e88083c01b68c357d010748d23" + integrity sha512-X+aICqYY69hiiDDtcNrjq8KutHrH2TrHuMqk0Rfq0P7hF6hMd+YefwLBNkvIrqrgmTAuqiLjMUwj2rHLqmgluw== + dependencies: + fontfaceobserver "^2.1.0" + +expo-keep-awake@~12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-12.0.1.tgz#19c5ab55391394ded3f6c262b0707c7140658a11" + integrity sha512-hqeCnb4033TyuZaXs93zTK7rjVJ3bywXATyMmKmKkLEsH2PKBAl/VmjlCOPQL/2Ncqz6aj7Wo//tjeJTARBD4g== + +expo-modules-autolinking@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.2.0.tgz#3ead115510a43fe196fc0498586b6133bd573209" + integrity sha512-QOPh/iXykNDCAzUual1imSrn2aDakzCGUp2QmxVREr0llajXygroUWlT9sQXh1zKzbNp+a+i/xK375ZeBFiNJA== + dependencies: + chalk "^4.1.0" + commander "^7.2.0" + fast-glob "^3.2.5" + find-up "^5.0.0" + fs-extra "^9.1.0" + +expo-modules-core@1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.2.7.tgz#c80627b13a8f1c94ae9da8eea41e1ef1df5788c8" + integrity sha512-sulqn2M8+tIdxi6QFkKppDEzbePAscgE2LEHocYoQOgHxJpeT7axE0Hkzc+81EeviQilZzGeFZMtNMGh3c9yJg== + dependencies: + compare-versions "^3.4.0" + invariant "^2.2.4" + +expo@^48.0.19: + version "48.0.20" + resolved "https://registry.yarnpkg.com/expo/-/expo-48.0.20.tgz#098a19b1eba81a15062fa853ae6941fdf9aef1f4" + integrity sha512-SDRlLRINWWqf/OIPaUr/BsFZLhR5oEj1u9Cn06h1mPeo8pqv6ei/QTSZql4e0ixHIu3PWMPrUx9k/47nnTyTpg== + dependencies: + "@babel/runtime" "^7.20.0" + "@expo/cli" "0.7.3" + "@expo/config" "8.0.5" + "@expo/config-plugins" "6.0.2" + "@expo/vector-icons" "^13.0.0" + babel-preset-expo "~9.3.2" + cross-spawn "^6.0.5" + expo-application "~5.1.1" + expo-asset "~8.9.1" + expo-constants "~14.2.1" + expo-file-system "~15.2.2" + expo-font "~11.1.1" + expo-keep-awake "~12.0.1" + expo-modules-autolinking "1.2.0" + expo-modules-core "1.2.7" + fbemitter "^3.0.0" + getenv "^1.0.0" + invariant "^2.2.4" + md5-file "^3.2.3" + node-fetch "^2.6.7" + pretty-format "^26.5.2" + uuid "^3.4.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + 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" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.5, fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + 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" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-xml-parser@^4.0.12: + version "4.2.7" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz#871f2ca299dc4334b29f8da3658c164e68395167" + integrity sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig== + dependencies: + strnum "^1.0.5" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^1.0.35" + +fetch-retry@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-4.1.1.tgz#fafe0bb22b54f4d0a9c788dff6dd7f8673ca63f3" + integrity sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + 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" + +find-babel-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + +find-babel-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" + integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== + dependencies: + json5 "^2.1.1" + path-exists "^4.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0, find-up@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +flow-parser@0.*: + version "0.215.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.215.0.tgz#9b153fa27ab238bcc0bb1ff73b63bdb15d3f277d" + integrity sha512-8bjwzy8vi+fNDy8YoTBNtQUSZa53i7UWJJTunJojOtjab9cMNhOCwohionuMgDQUU0y21QTTtPOX6OQEOQT72A== + +flow-parser@^0.185.0: + version "0.185.2" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.185.2.tgz#cb7ee57f77377d6c5d69a469e980f6332a15e492" + integrity sha512-2hJ5ACYeJCzNtiVULov6pljKOLygy0zddoqSI1fFetM+XRPpRshFdGEijtqlamA1XwyZ+7rhryI6FQFzvtLWUQ== + +fontfaceobserver@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz#5fb392116e75d5024b7ec8e4f2ce92106d1488c8" + integrity sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +form-data@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +freeport-async@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4" + integrity sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-extra@^8.1.0, fs-extra@~8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.1.2, fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getenv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" + integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + 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" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + 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" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql-tag@^2.10.1: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@15.8.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hermes-estree@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.8.0.tgz#530be27243ca49f008381c1f3e8b18fb26bf9ec0" + integrity sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q== + +hermes-parser@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.8.0.tgz#116dceaba32e45b16d6aefb5c4c830eaeba2d257" + integrity sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA== + dependencies: + hermes-estree "0.8.0" + +hermes-profile-transformer@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" + integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ== + dependencies: + source-map "^0.7.3" + +hosted-git-info@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" + integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-ip@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@*, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + +ip@^1.1.5: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.1, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.13.0, is-core-module@^2.9.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== + dependencies: + is-extglob "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-invalid-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + integrity sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ== + dependencies: + is-glob "^2.0.0" + +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2, is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-valid-path@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + integrity sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A== + dependencies: + is-invalid-path "^0.1.0" + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + 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" + +istanbul-lib-instrument@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8" + integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterator.prototype@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" + integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== + dependencies: + define-properties "^1.1.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + has-tostringtag "^1.0.0" + reflect.getprototypeof "^1.0.3" + +jest-changed-files@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.6.3.tgz#97cfdc93f74fb8af2a1acb0b78f836f1fb40c449" + integrity sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg== + dependencies: + execa "^5.0.0" + jest-util "^29.6.3" + p-limit "^3.1.0" + +jest-circus@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.3.tgz#c5ac37758bb9e78fd78ebd655ed1d28b220d6fd3" + integrity sha512-p0R5YqZEMnOpHqHLWRSjm2z/0p6RNsrNE/GRRT3eli8QGOAozj6Ys/3Tv+Ej+IfltJoSPwcQ6/hOCRkNlxLLCw== + dependencies: + "@jest/environment" "^29.6.3" + "@jest/expect" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.6.3" + jest-matcher-utils "^29.6.3" + jest-message-util "^29.6.3" + jest-runtime "^29.6.3" + jest-snapshot "^29.6.3" + jest-util "^29.6.3" + p-limit "^3.1.0" + pretty-format "^29.6.3" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.3.tgz#1e6520106e9d7443a481ebe07ffed46e1568a51f" + integrity sha512-KuPdXUPXQIf0t6DvmG8MV4QyhcjR1a6ruKl3YL7aGn/AQ8JkROwFkWzEpDIpt11Qy188dHbRm8WjwMsV/4nmnQ== + dependencies: + "@jest/core" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^29.6.3" + jest-util "^29.6.3" + jest-validate "^29.6.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.3.tgz#2d1490005a28291806022f7f95ec3debf55eaaf7" + integrity sha512-nb9bOq2aEqogbyL4F9mLkAeQGAgNt7Uz6U59YtQDIxFPiL7Ejgq0YIrp78oyEHD6H4CIV/k7mFrK7eFDzUJ69w== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.6.3" + "@jest/types" "^29.6.3" + babel-jest "^29.6.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.6.3" + jest-environment-node "^29.6.3" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.3" + jest-runner "^29.6.3" + jest-util "^29.6.3" + jest-validate "^29.6.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.6.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.3.tgz#365c6b037ea8e67d2f2af68bc018fc18d44311f0" + integrity sha512-3sw+AdWnwH9sSNohMRKA7JiYUJSRr/WS6+sEFfBuhxU5V5GlEVKfvUn8JuMHE0wqKowemR1C2aHy8VtXbaV8dQ== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.6.3" + +jest-docblock@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.6.3.tgz#293dca5188846c9f7c0c2b1bb33e5b11f21645f2" + integrity sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.3.tgz#1956f14f5f0cb8ae0b2e7cabc10bb03ec817c142" + integrity sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.6.3" + pretty-format "^29.6.3" + +jest-environment-node@^29.2.1, jest-environment-node@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.3.tgz#72217a00db2c26755406241c70ad73c334917e28" + integrity sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew== + dependencies: + "@jest/environment" "^29.6.3" + "@jest/fake-timers" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.6.3" + jest-util "^29.6.3" + +jest-expo@^47.0.1: + version "47.0.1" + resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-47.0.1.tgz#c6dd18d64b9e4ff69a74732225c349c73799573e" + integrity sha512-v/qq689LRqa6OPU2Z6mGHLpjNB0SBqWuwE9WdreCaSFurISD75ZlN3vEiq6ZojcHxYAX+4FW4xWd2CCJtubi4w== + dependencies: + "@expo/config" "~7.0.2" + "@jest/create-cache-key-function" "^27.0.1" + babel-jest "^26.6.3" + find-up "^5.0.0" + jest-watch-select-projects "^2.0.0" + jest-watch-typeahead "0.6.4" + json5 "^2.1.0" + lodash "^4.17.19" + react-test-renderer "~18.1.0" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + 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" + optionalDependencies: + fsevents "^2.1.2" + +jest-haste-map@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.3.tgz#a53ac35a137fd32d932039aab29d02a9dab30689" + integrity sha512-GecR5YavfjkhOytEFHAeI6aWWG3f/cOKNB1YJvj/B76xAmeVjy4zJUYobGF030cRmKaO1FBw3V8CZZ6KVh9ZSw== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.6.3" + jest-worker "^29.6.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz#b9661bc3aec8874e59aff361fa0c6d7cd507ea01" + integrity sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.6.3" + +jest-matcher-utils@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.3.tgz#a7574092b635d96a38fa0a22d015fb596b9c2efc" + integrity sha512-6ZrMYINZdwduSt5Xu18/n49O1IgXdjsfG7NEZaQws9k69eTKWKcVbJBw/MZsjOZe2sSyJFmuzh8042XWwl54Zg== + dependencies: + chalk "^4.0.0" + jest-diff "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.6.3" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf" + integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.6.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.3.tgz#433f3fd528c8ec5a76860177484940628bdf5e0a" + integrity sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.6.3" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-regex-util@^27.0.0, jest-regex-util@^27.0.6: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.3.tgz#fc58ac08f9ed992b10d5cfb0bbb1d89b98508ff3" + integrity sha512-iah5nhSPTwtUV7yzpTc9xGg8gP3Ch2VNsuFMsKoCkNCrQSbFtx5KRPemmPJ32AUhTSDqJXB6djPN6zAaUGV53g== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.6.3" + +jest-resolve@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.3.tgz#e3114e1514973c8f1607387c3042f4d2926f2d60" + integrity sha512-WMXwxhvzDeA/J+9jz1i8ZKGmbw/n+s988EiUvRI4egM+eTn31Hb5v10Re3slG3/qxntkBt2/6GkQVDGu6Bwyhw== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.3" + jest-pnp-resolver "^1.2.2" + jest-util "^29.6.3" + jest-validate "^29.6.3" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.3.tgz#162b1a549c4728265e716d75533b65b4c77e6b22" + integrity sha512-E4zsMhQnjhirFPhDTJgoLMWUrVCDij/KGzWlbslDHGuO8Hl2pVUfOiygMzVZtZq+BzmlqwEr7LYmW+WFLlmX8w== + dependencies: + "@jest/console" "^29.6.3" + "@jest/environment" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/transform" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.6.3" + jest-environment-node "^29.6.3" + jest-haste-map "^29.6.3" + jest-leak-detector "^29.6.3" + jest-message-util "^29.6.3" + jest-resolve "^29.6.3" + jest-runtime "^29.6.3" + jest-util "^29.6.3" + jest-watcher "^29.6.3" + jest-worker "^29.6.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.3.tgz#8bfa29447808419a7b5bed13beb0447a90344c65" + integrity sha512-VM0Z3a9xaqizGpEKwCOIhImkrINYzxgwk8oQAvrmAiXX8LNrJrRjyva30RkuRY0ETAotHLlUcd2moviCA1hgsQ== + dependencies: + "@jest/environment" "^29.6.3" + "@jest/fake-timers" "^29.6.3" + "@jest/globals" "^29.6.3" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.6.3" + "@jest/transform" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.3" + jest-message-util "^29.6.3" + jest-mock "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.6.3" + jest-snapshot "^29.6.3" + jest-util "^29.6.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-serializer@^27.0.6: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.3.tgz#2435b50881f7bffdc1a66e66c64a2602c8086281" + integrity sha512-66Iu7H1ojiveQMGFnKecHIZPPPBjZwfQEnF6wxqpxGf57sV3YSUtAb5/sTKM5TPa3OndyxZp1wxHFbmgVhc53w== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.6.3" + "@jest/transform" "^29.6.3" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.6.3" + graceful-fs "^4.2.9" + jest-diff "^29.6.3" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.6.3" + jest-message-util "^29.6.3" + jest-util "^29.6.3" + natural-compare "^1.4.0" + pretty-format "^29.6.3" + semver "^7.5.3" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + 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" + +jest-util@^27.2.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63" + integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^26.5.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-validate@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.3.tgz#a75fca774cfb1c5758c70d035d30a1f9c2784b4d" + integrity sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.6.3" + +jest-watch-select-projects@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jest-watch-select-projects/-/jest-watch-select-projects-2.0.0.tgz#4373d7e4de862aae28b46e036b669a4c913ea867" + integrity sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w== + dependencies: + ansi-escapes "^4.3.0" + chalk "^3.0.0" + prompts "^2.2.1" + +jest-watch-typeahead@0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz#ea70bf1bec34bd4f55b5b72d471b02d997899c3e" + integrity sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^27.0.0" + jest-watcher "^27.0.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^27.0.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.3.tgz#f5089852fc5f57ba1d956ec02d80cf2f6f34156d" + integrity sha512-NgpFjZ2U2MKusjidbi4Oiu7tfs+nrgdIxIEVROvH1cFmOei9Uj25lwkMsakqLnH/s0nEcvxO1ck77FiRlcnpZg== + dependencies: + "@jest/test-result" "^29.6.3" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.6.3" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.2.0: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.3.tgz#7b1a47bbb6559f3c0882d16595938590e63915d5" + integrity sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g== + dependencies: + "@types/node" "*" + jest-util "^29.6.3" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.2.1: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.3.tgz#118cf081d440d31b21989f61bfcd8b7797ca6a01" + integrity sha512-alueLuoPCDNHFcFGmgETR4KpQ+0ff3qVaiJwxQM4B5sC0CvXcgg4PEi7xrDkxuItDmdz/FVc7SSit4KEu8GRvw== + dependencies: + "@jest/core" "^29.6.3" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.6.3" + +jimp-compact@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3" + integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww== + +joi@^17.2.1: + version "17.9.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +join-component@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" + integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsc-android@^250231.0.0: + version "250231.0.0" + resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250231.0.0.tgz#91720f8df382a108872fa4b3f558f33ba5e95262" + integrity sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw== + +jsc-safe-url@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz#141c14fbb43791e88d5dc64e85a374575a83477a" + integrity sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q== + +jscodeshift@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.13.1.tgz#69bfe51e54c831296380585c6d9e733512aecdef" + integrity sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + babel-core "^7.0.0-bridge.0" + chalk "^4.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.20.4" + temp "^0.8.4" + write-file-atomic "^2.3.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-deref-sync@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz#cb08b4ff435a48b5a149652d7750fdd071009823" + integrity sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg== + dependencies: + clone "^2.1.2" + dag-map "~1.0.0" + is-valid-path "^0.1.1" + lodash "^4.17.13" + md5 "~2.2.0" + memory-cache "~0.2.0" + traverse "~0.6.6" + valid-url "~1.0.9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== + +json5@^1.0.1, json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.0, json5@^2.1.1, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + +lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +logkitty@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" + integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ== + dependencies: + ansi-fragments "^0.2.1" + dayjs "^1.8.15" + yargs "^15.1.0" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +md5-file@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" + integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw== + dependencies: + buffer-alloc "^1.1.0" + +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +md5@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ== + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +md5hex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8" + integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +memory-cache@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" + integrity sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +metro-babel-transformer@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.73.10.tgz#b27732fa3869f397246ee8ecf03b64622ab738c1" + integrity sha512-Yv2myTSnpzt/lTyurLvqYbBkytvUJcLHN8XD3t7W6rGiLTQPzmf1zypHQLphvcAXtCWBOXFtH7KLOSi2/qMg+A== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.8.0" + metro-source-map "0.73.10" + nullthrows "^1.1.1" + +metro-babel-transformer@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.73.9.tgz#bec8aaaf1bbdc2e469fde586fde455f8b2a83073" + integrity sha512-DlYwg9wwYIZTHtic7dyD4BP0SDftoltZ3clma76nHu43blMWsCnrImHeHsAVne3XsQ+RJaSRxhN5nkG2VyVHwA== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.8.0" + metro-source-map "0.73.9" + nullthrows "^1.1.1" + +metro-cache-key@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.73.10.tgz#8d63591187d295b62a80aed64a87864b1e9d67a2" + integrity sha512-JMVDl/EREDiUW//cIcUzRjKSwE2AFxVWk47cFBer+KA4ohXIG2CQPEquT56hOw1Y1s6gKNxxs1OlAOEsubrFjw== + +metro-cache@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.73.10.tgz#02e9cb7c1e42aab5268d2ecce35ad8f2c08891de" + integrity sha512-wPGlQZpdVlM404m7MxJqJ+hTReDr5epvfPbt2LerUAHY9RN99w61FeeAe25BMZBwgUgDtAsfGlJ51MBHg8MAqw== + dependencies: + metro-core "0.73.10" + rimraf "^3.0.2" + +metro-config@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.73.10.tgz#a9ec3d0a1290369e3f46c467a4c4f6dd43acc223" + integrity sha512-wIlybd1Z9I8K2KcStTiJxTB7OK529dxFgogNpKCTU/3DxkgAASqSkgXnZP6kVyqjh5EOWAKFe5U6IPic7kXDdQ== + dependencies: + cosmiconfig "^5.0.5" + jest-validate "^26.5.2" + metro "0.73.10" + metro-cache "0.73.10" + metro-core "0.73.10" + metro-runtime "0.73.10" + +metro-core@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.73.10.tgz#feb3c228aa8c0dde71d8e4cef614cc3a1dc3bbd7" + integrity sha512-5uYkajIxKyL6W45iz/ftNnYPe1l92CvF2QJeon1CHsMXkEiOJxEjo41l+iSnO/YodBGrmMCyupSO4wOQGUc0lw== + dependencies: + lodash.throttle "^4.1.1" + metro-resolver "0.73.10" + +metro-file-map@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.73.10.tgz#55bd906fb7c1bef8e1a31df4b29a3ef4b49f0b5a" + integrity sha512-XOMWAybeaXyD6zmVZPnoCCL2oO3rp4ta76oUlqWP0skBzhFxVtkE/UtDwApEMUY361JeBBago647gnKiARs+1g== + dependencies: + abort-controller "^3.0.0" + anymatch "^3.0.3" + debug "^2.2.0" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + invariant "^2.2.4" + jest-regex-util "^27.0.6" + jest-serializer "^27.0.6" + jest-util "^27.2.0" + jest-worker "^27.2.0" + micromatch "^4.0.4" + nullthrows "^1.1.1" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +metro-hermes-compiler@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.73.10.tgz#4525a7835c803a5d0b3b05c6619202e2273d630f" + integrity sha512-rTRWEzkVrwtQLiYkOXhSdsKkIObnL+Jqo+IXHI7VEK2aSLWRAbtGNqECBs44kbOUypDYTFFE+WLtoqvUWqYkWg== + +metro-inspector-proxy@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.73.10.tgz#752fed2ab88199c9dcc3369c3d59da6c5b954a51" + integrity sha512-CEEvocYc5xCCZBtGSIggMCiRiXTrnBbh8pmjKQqm9TtJZALeOGyt5pXUaEkKGnhrXETrexsg6yIbsQHhEvVfvQ== + dependencies: + connect "^3.6.5" + debug "^2.2.0" + ws "^7.5.1" + yargs "^17.5.1" + +metro-minify-terser@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.73.10.tgz#557eab3a512b90b7779350ff5d25a215c4dbe61f" + integrity sha512-uG7TSKQ/i0p9kM1qXrwbmY3v+6BrMItsOcEXcSP8Z+68bb+t9HeVK0T/hIfUu1v1PEnonhkhfzVsaP8QyTd5lQ== + dependencies: + terser "^5.15.0" + +metro-minify-uglify@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.73.10.tgz#4de79056d502479733854c90f2075374353ea154" + integrity sha512-eocnSeJKnLz/UoYntVFhCJffED7SLSgbCHgNvI6ju6hFb6EFHGJT9OLbkJWeXaWBWD3Zw5mYLS8GGqGn/CHZPA== + dependencies: + uglify-es "^3.1.9" + +metro-react-native-babel-preset@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.10.tgz#304b24bb391537d2c987732cc0a9774be227d3f6" + integrity sha512-1/dnH4EHwFb2RKEKx34vVDpUS3urt2WEeR8FYim+ogqALg4sTpG7yeQPxWpbgKATezt4rNfqAANpIyH19MS4BQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-preset@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.9.tgz#ef54637dd20f025197beb49e71309a9c539e73e2" + integrity sha512-AoD7v132iYDV4K78yN2OLgTPwtAKn0XlD2pOhzyBxiI8PeXzozhbKyPV7zUOJUPETj+pcEVfuYj5ZN/8+bhbCw== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-preset@0.76.8: + version "0.76.8" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.76.8.tgz#7476efae14363cbdfeeec403b4f01d7348e6c048" + integrity sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.4.0" + +metro-react-native-babel-transformer@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.10.tgz#4e20a9ce131b873cda0b5a44d3eb4002134a64b8" + integrity sha512-4G/upwqKdmKEjmsNa92/NEgsOxUWOygBVs+FXWfXWKgybrmcjh3NoqdRYrROo9ZRA/sB9Y/ZXKVkWOGKHtGzgg== + dependencies: + "@babel/core" "^7.20.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.8.0" + metro-babel-transformer "0.73.10" + metro-react-native-babel-preset "0.73.10" + metro-source-map "0.73.10" + nullthrows "^1.1.1" + +metro-react-native-babel-transformer@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.9.tgz#4f4f0cfa5119bab8b53e722fabaf90687d0cbff0" + integrity sha512-DSdrEHuQ22ixY7DyipyKkIcqhOJrt5s6h6X7BYJCP9AMUfXOwLe2biY3BcgJz5GOXv8/Akry4vTCvQscVS1otQ== + dependencies: + "@babel/core" "^7.20.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.8.0" + metro-babel-transformer "0.73.9" + metro-react-native-babel-preset "0.73.9" + metro-source-map "0.73.9" + nullthrows "^1.1.1" + +metro-resolver@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.73.10.tgz#c39a3bd8d33e5d78cb256110d29707d8d49ed0be" + integrity sha512-HeXbs+0wjakaaVQ5BI7eT7uqxlZTc9rnyw6cdBWWMgUWB++KpoI0Ge7Hi6eQAOoVAzXC3m26mPFYLejpzTWjng== + dependencies: + absolute-path "^0.0.0" + +metro-runtime@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.73.10.tgz#c3de19d17e75ffe1a145778d99422e7ffc208768" + integrity sha512-EpVKm4eN0Fgx2PEWpJ5NiMArV8zVoOin866jIIvzFLpmkZz1UEqgjf2JAfUJnjgv3fjSV3JqeGG2vZCaGQBTow== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" + +metro-runtime@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.73.9.tgz#0b24c0b066b8629ee855a6e5035b65061fef60d5" + integrity sha512-d5Hs83FpKB9r8q8Vb95+fa6ESpwysmPr4lL1I2rM2qXAFiO7OAPT9Bc23WmXgidkBtD0uUFdB2lG+H1ATz8rZg== + dependencies: + "@babel/runtime" "^7.0.0" + react-refresh "^0.4.0" + +metro-source-map@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.73.10.tgz#28e09a28f1a2f7a4f8d0845b845cbed74e2f48f9" + integrity sha512-NAGv14701p/YaFZ76KzyPkacBw/QlEJF1f8elfs23N1tC33YyKLDKvPAzFJiYqjdcFvuuuDCA8JCXd2TgLxNPw== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.73.10" + nullthrows "^1.1.1" + ob1 "0.73.10" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-source-map@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.73.9.tgz#89ca41f6346aeb12f7f23496fa363e520adafebe" + integrity sha512-l4VZKzdqafipriETYR6lsrwtavCF1+CMhCOY9XbyWeTrpGSNgJQgdeJpttzEZTHQQTLR0csQo0nD1ef3zEP6IQ== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.73.9" + nullthrows "^1.1.1" + ob1 "0.73.9" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-symbolicate@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.73.10.tgz#7853a9a8fbfd615a5c9db698fffc685441ac880f" + integrity sha512-PmCe3TOe1c/NVwMlB+B17me951kfkB3Wve5RqJn+ErPAj93od1nxicp6OJe7JT4QBRnpUP8p9tw2sHKqceIzkA== + dependencies: + invariant "^2.2.4" + metro-source-map "0.73.10" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-symbolicate@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.73.9.tgz#cb452299a36e5b86b2826e7426d51221635c48bf" + integrity sha512-4TUOwxRHHqbEHxRqRJ3wZY5TA8xq7AHMtXrXcjegMH9FscgYztsrIG9aNBUBS+VLB6g1qc6BYbfIgoAnLjCDyw== + dependencies: + invariant "^2.2.4" + metro-source-map "0.73.9" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-transform-plugins@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.73.10.tgz#1b762330cbbedb6c18438edc3d76b063c88882af" + integrity sha512-D4AgD3Vsrac+4YksaPmxs/0ocT67bvwTkFSIgWWeDvWwIG0U1iHzTS9f8Bvb4PITnXryDoFtjI6OWF7uOpGxpA== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + nullthrows "^1.1.1" + +metro-transform-worker@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.73.10.tgz#bb401dbd7b10a6fe443a5f7970cba38425efece0" + integrity sha512-IySvVubudFxahxOljWtP0QIMMpgUrCP0bW16cz2Enof0PdumwmR7uU3dTbNq6S+XTzuMHR+076aIe4VhPAWsIQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" + babel-preset-fbjs "^3.4.0" + metro "0.73.10" + metro-babel-transformer "0.73.10" + metro-cache "0.73.10" + metro-cache-key "0.73.10" + metro-hermes-compiler "0.73.10" + metro-source-map "0.73.10" + metro-transform-plugins "0.73.10" + nullthrows "^1.1.1" + +metro@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.73.10.tgz#d9a0efb1e403e3aee5cf5140e0a96a7220c23901" + integrity sha512-J2gBhNHFtc/Z48ysF0B/bfTwUwaRDLjNv7egfhQCc+934dpXcjJG2KZFeuybF+CvA9vo4QUi56G2U+RSAJ5tsA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + absolute-path "^0.0.0" + accepts "^1.3.7" + async "^3.2.2" + chalk "^4.0.0" + ci-info "^2.0.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + error-stack-parser "^2.0.6" + graceful-fs "^4.2.4" + hermes-parser "0.8.0" + image-size "^0.6.0" + invariant "^2.2.4" + jest-worker "^27.2.0" + jsc-safe-url "^0.2.2" + lodash.throttle "^4.1.1" + metro-babel-transformer "0.73.10" + metro-cache "0.73.10" + metro-cache-key "0.73.10" + metro-config "0.73.10" + metro-core "0.73.10" + metro-file-map "0.73.10" + metro-hermes-compiler "0.73.10" + metro-inspector-proxy "0.73.10" + metro-minify-terser "0.73.10" + metro-minify-uglify "0.73.10" + metro-react-native-babel-preset "0.73.10" + metro-resolver "0.73.10" + metro-runtime "0.73.10" + metro-source-map "0.73.10" + metro-symbolicate "0.73.10" + metro-transform-plugins "0.73.10" + metro-transform-worker "0.73.10" + mime-types "^2.1.27" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + rimraf "^3.0.2" + serialize-error "^2.1.0" + source-map "^0.5.6" + strip-ansi "^6.0.0" + temp "0.8.3" + throat "^5.0.0" + ws "^7.5.1" + yargs "^17.5.1" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + 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" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.1, mime@^2.4.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mv@~2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + 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" + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nested-error-stacks@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" + integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nocache@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" + integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== + +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + +node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: + version "2.6.13" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" + integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.2.1, node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +node-stream-zip@^1.9.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" + integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-package-arg@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5" + integrity sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g== + dependencies: + hosted-git-info "^3.0.2" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nullthrows@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + +ob1@0.73.10: + version "0.73.10" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.73.10.tgz#bf0a2e8922bb8687ddca82327c5cf209414a1bd4" + integrity sha512-aO6EYC+QRRCkZxVJhCWhLKgVjhNuD6Gu1riGjxrIm89CqLsmKgxzYDDEsktmKsoDeRdWGQM5EdMzXDl5xcVfsw== + +ob1@0.73.9: + version "0.73.9" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.73.9.tgz#d5677a0dd3e2f16ad84231278d79424436c38c59" + integrity sha512-kHOzCOFXmAM26fy7V/YuXNKne2TyRiXbFAvPBIbuedJCZZWQZHLdPzMeXJI4Egt6IcfDttRzN3jQ90wOwq1iNw== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.groupby@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" + integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.21.2" + get-intrinsic "^1.2.1" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^6.2.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +open@^8.0.4, open@^8.3.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/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" + +ora@3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + 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" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parse-png@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338" + integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ== + dependencies: + pngjs "^3.3.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +password-prompt@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== + dependencies: + ansi-escapes "^4.3.2" + cross-spawn "^7.0.3" + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.5, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +plist@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +pngjs@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +pretty-bytes@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^26.5.2, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7" + integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +promise@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@*, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pure-rand@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== + +qrcode-terminal@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e" + integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@~1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-devtools-core@^4.26.1: + version "4.28.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.0.tgz#3fa18709b24414adddadac33b6b9cea96db60f2f" + integrity sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg== + dependencies: + shell-quote "^1.6.1" + ws "^7" + +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0, react-is@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-native-codegen@^0.71.5: + version "0.71.5" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.71.5.tgz#454a42a891cd4ca5fc436440d301044dc1349c14" + integrity sha512-rfsuc0zkuUuMjFnrT55I1mDZ+pBRp2zAiRwxck3m6qeGJBGK5OV5JH66eDQ4aa+3m0of316CqrJDRzVlYufzIg== + dependencies: + "@babel/parser" "^7.14.0" + flow-parser "^0.185.0" + jscodeshift "^0.13.1" + nullthrows "^1.1.1" + +react-native-gradle-plugin@^0.71.18: + version "0.71.19" + resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.19.tgz#3379e28341fcd189bc1f4691cefc84c1a4d7d232" + integrity sha512-1dVk9NwhoyKHCSxcrM6vY6cxmojeATsBobDicX0ZKr7DgUF2cBQRTKsimQFvzH8XhOVXyH8p4HyDSZNIFI8OlQ== + +react-native@0.71.8: + version "0.71.8" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.71.8.tgz#4314145341c49448cf7465b93ced52a433a5e191" + integrity sha512-ftMAuhpgTkbHU9brrqsEyxcNrpYvXKeATY+if22Nfhhg1zW+6wn95w9otwTnA3xHkljPCbng8mUhmmERjGEl7g== + dependencies: + "@jest/create-cache-key-function" "^29.2.1" + "@react-native-community/cli" "10.2.2" + "@react-native-community/cli-platform-android" "10.2.0" + "@react-native-community/cli-platform-ios" "10.2.1" + "@react-native/assets" "1.0.0" + "@react-native/normalize-color" "2.1.0" + "@react-native/polyfills" "2.0.0" + abort-controller "^3.0.0" + anser "^1.4.9" + base64-js "^1.1.2" + deprecated-react-native-prop-types "^3.0.1" + event-target-shim "^5.0.1" + invariant "^2.2.4" + jest-environment-node "^29.2.1" + jsc-android "^250231.0.0" + memoize-one "^5.0.0" + metro-react-native-babel-transformer "0.73.9" + metro-runtime "0.73.9" + metro-source-map "0.73.9" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + pretty-format "^26.5.2" + promise "^8.3.0" + react-devtools-core "^4.26.1" + react-native-codegen "^0.71.5" + react-native-gradle-plugin "^0.71.18" + react-refresh "^0.4.0" + react-shallow-renderer "^16.15.0" + regenerator-runtime "^0.13.2" + scheduler "^0.23.0" + stacktrace-parser "^0.1.3" + use-sync-external-store "^1.0.0" + whatwg-fetch "^3.0.0" + ws "^6.2.2" + +react-refresh@^0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" + integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== + +react-shallow-renderer@^16.15.0: + version "16.15.0" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" + integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== + dependencies: + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0 || ^18.0.0" + +react-test-renderer@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" + integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== + dependencies: + react-is "^18.2.0" + react-shallow-renderer "^16.15.0" + scheduler "^0.23.0" + +react-test-renderer@~18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.1.0.tgz#35b75754834cf9ab517b6813db94aee0a6b545c3" + integrity sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg== + dependencies: + react-is "^18.1.0" + react-shallow-renderer "^16.15.0" + scheduler "^0.22.0" + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readline@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== + +recast@^0.20.4: + version "0.20.5" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" + integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== + dependencies: + ast-types "0.14.2" + esprima "~4.0.0" + source-map "~0.6.1" + tslib "^2.0.1" + +reflect.getprototypeof@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" + integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.2: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + +remove-trailing-slash@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" + integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requireg@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.2.2.tgz#437e77a5316a54c9bcdbbf5d1f755fe093089830" + integrity sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg== + dependencies: + nested-error-stacks "~2.0.1" + rc "~1.2.7" + resolve "~1.7.1" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^4.0.0, reselect@^4.1.7: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@~1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw== + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg== + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + 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" + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" + integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== + dependencies: + loose-envify "^1.1.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0, send@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-6.0.0.tgz#ccfb887a1dd1c48d6d52d7863b92544331fd752b" + integrity sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA== + dependencies: + type-fest "^0.12.0" + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw== + +serve-static@^1.13.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1, shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-plist@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== + dependencies: + bplist-creator "0.1.0" + bplist-parser "0.3.1" + plist "^3.0.5" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slugify@^1.3.4: + version "1.6.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== + +snack-babel-standalone@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/snack-babel-standalone/-/snack-babel-standalone-2.2.2.tgz#2154855c482c112036261171ed32f7892102be60" + integrity sha512-kYYfIsktDfJeYrByF184YO/x55U7rPzfXThsownEGCNBn8d1xZ8AD7NyuLS5aA1n2rk9yKQ1CZxIRHwoNkootQ== + +"snack-require-context@file:../snack-require-context": + version "0.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + 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" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + 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" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.16, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-parser@^0.1.3: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stream-buffers@2.2.x: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^5.0.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +structured-headers@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/structured-headers/-/structured-headers-0.4.1.tgz#77abd9410622c6926261c09b9d16cf10592694d1" + integrity sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg== + +sucrase@^3.20.0: + version "3.34.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +sudo-prompt@9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" + integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== + +sudo-prompt@^8.2.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" + integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw== + +sudo-prompt@^9.0.0: + version "9.2.1" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" + integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar@^6.0.2, tar@^6.0.5: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +temp@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw== + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +temp@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + +tempy@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +tempy@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.7.1.tgz#5a654e6dbd1747cdd561efb112350b55cd9c1d46" + integrity sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg== + dependencies: + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser@^5.15.0: + version "5.19.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" + integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +traverse@~0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.12.0.tgz#f57a27ab81c68d136a51fd71467eff94157fa1ee" + integrity sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^1.0.35: + version "1.0.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" + integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== + +uglify-es@^3.1.9: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== + dependencies: + crypto-random-string "^1.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-join@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + integrity sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA== + +url-parse@^1.5.9: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +uuid@^8.0.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +valid-url@~1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vlq@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" + integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== + +walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-fetch@^3.0.0: + version "3.6.17" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" + integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + 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" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wonka@^4.0.14: + version "4.0.15" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.15.tgz#9aa42046efa424565ab8f8f451fcca955bf80b89" + integrity sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg== + +wonka@^6.3.2: + version "6.3.4" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" + integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@^7, ws@^7.5.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.12.1: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xcode@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== + dependencies: + simple-plist "^1.1.0" + uuid "^7.0.3" + +xml2js@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c" + integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg== + +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.1.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.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 "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.3.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + 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.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 9190c9dab01edf721385dabc71b955ed85829c98 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 23 Aug 2023 16:40:32 +0200 Subject: [PATCH 02/31] chore: add continuous integration for `snack-runtime` --- .github/workflows/packages.yml | 4 ++++ packages/snack-runtime/package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index 6bbe1242..1d3f4303 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -26,6 +26,7 @@ jobs: review: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: package: - snack-babel-standalone @@ -33,6 +34,7 @@ jobs: - snack-eslint-standalone - snack-proxies - snack-require-context + - snack-runtime - snack-sdk - snack-term include: @@ -40,6 +42,8 @@ jobs: local-install: true - package: snack-eslint-standalone local-install: true + - package: snack-runtime + local-install: true steps: - name: 🏗 Setup repository uses: actions/checkout@v3 diff --git a/packages/snack-runtime/package.json b/packages/snack-runtime/package.json index eaee4de6..dc48e9c3 100644 --- a/packages/snack-runtime/package.json +++ b/packages/snack-runtime/package.json @@ -23,6 +23,7 @@ "scripts": { "test": "jest", "lint": "eslint . --ext js,jsx,ts,tsx", + "build": "echo 'This package ships TypeScript for Metro to compile.'", "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { From a1e60ab241ddfefe7aec7e922bb230c3d2c38655 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Thu, 24 Aug 2023 14:05:22 +0200 Subject: [PATCH 03/31] refactor(snack-runtime): fix linting issues --- packages/snack-runtime/src/Modules.tsx | 2 +- packages/snack-runtime/src/aliases/index.tsx | 2 +- packages/snack-runtime/src/aliases/index.web.tsx | 2 +- .../src/transports/RuntimeTrafficMirroringTransport.ts | 2 +- .../snack-runtime/src/transports/RuntimeTransportImplPubNub.ts | 2 +- .../src/transports/RuntimeTransportImplSocketIO.ts | 2 +- .../src/transports/RuntimeTransportImplWebPlayer.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/snack-runtime/src/Modules.tsx b/packages/snack-runtime/src/Modules.tsx index d69e7d9b..b8cec421 100644 --- a/packages/snack-runtime/src/Modules.tsx +++ b/packages/snack-runtime/src/Modules.tsx @@ -23,13 +23,13 @@ import * as context from 'snack-require-context'; // web-assembly which is not yet supported on react-native. import { SourceMapConsumer, RawSourceMap } from 'source-map'; -import System from '../vendor/system.src'; import * as Files from './Files'; import * as Logger from './Logger'; import AssetRegistry from './NativeModules/AssetRegistry'; import FileSystem from './NativeModules/FileSystem'; import * as Profiling from './Profiling'; import aliases from './aliases'; +import System from '../vendor/system.src'; type Dependencies = { [key: string]: { resolved?: string; version: string; handle?: string }; diff --git a/packages/snack-runtime/src/aliases/index.tsx b/packages/snack-runtime/src/aliases/index.tsx index d3694727..e924f991 100644 --- a/packages/snack-runtime/src/aliases/index.tsx +++ b/packages/snack-runtime/src/aliases/index.tsx @@ -1,5 +1,5 @@ -import AssetRegistry from '../NativeModules/AssetRegistry'; import common from './common'; +import AssetRegistry from '../NativeModules/AssetRegistry'; const aliases: { [key: string]: any } = { ...common, diff --git a/packages/snack-runtime/src/aliases/index.web.tsx b/packages/snack-runtime/src/aliases/index.web.tsx index b363a667..0d94a786 100644 --- a/packages/snack-runtime/src/aliases/index.web.tsx +++ b/packages/snack-runtime/src/aliases/index.web.tsx @@ -1,5 +1,5 @@ -import AssetRegistry from '../NativeModules/AssetRegistry'; import common from './common'; +import AssetRegistry from '../NativeModules/AssetRegistry'; const aliases: { [key: string]: any } = { ...common, diff --git a/packages/snack-runtime/src/transports/RuntimeTrafficMirroringTransport.ts b/packages/snack-runtime/src/transports/RuntimeTrafficMirroringTransport.ts index d7741a1e..6236d47f 100644 --- a/packages/snack-runtime/src/transports/RuntimeTrafficMirroringTransport.ts +++ b/packages/snack-runtime/src/transports/RuntimeTrafficMirroringTransport.ts @@ -1,9 +1,9 @@ import AwaitLock from 'await-lock'; -import * as Logger from '../Logger'; import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; import RuntimeTransportImplPubNub from './RuntimeTransportImplPubNub'; import RuntimeTransportImplSocketIO from './RuntimeTransportImplSocketIO'; +import * as Logger from '../Logger'; const FALLBACK_ALWAYS_AFTER_MISSED_THRESHOLD = 5; const FALLBACK_ACK_WAIT_MS = 3000; diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts index 44d2e6ca..27bd56b1 100644 --- a/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplPubNub.ts @@ -2,8 +2,8 @@ import PubNub from 'pubnub'; -import * as Logger from '../Logger'; import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; +import * as Logger from '../Logger'; const PRESENCE_TIMEOUT = 600; const HEARTBEAT_INTERVAL = 60; diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts index e3f8c741..d8538687 100644 --- a/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplSocketIO.ts @@ -2,8 +2,8 @@ import Constants from 'expo-constants'; import { io } from 'socket.io-client'; import type { Socket } from 'socket.io-client'; -import * as Logger from '../Logger'; import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; +import * as Logger from '../Logger'; const SNACKPUB_URL_STAGING = 'https://staging-snackpub.expo.dev'; const SNACKPUB_URL_PRODUCTION = 'https://snackpub.expo.dev'; diff --git a/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts b/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts index bb47dc29..62b5e828 100644 --- a/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts +++ b/packages/snack-runtime/src/transports/RuntimeTransportImplWebPlayer.ts @@ -1,5 +1,5 @@ -import * as Logger from '../Logger'; import type { Device, RuntimeMessagePayload, RuntimeTransport } from './RuntimeTransport'; +import * as Logger from '../Logger'; /** * The Snack web-player is served directly from S3. This means that anyone From 2949bcff2edfa2841da43d034b1cef7e649d5188 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Thu, 24 Aug 2023 14:53:15 +0200 Subject: [PATCH 04/31] fix(snack-runtime): add missing dependencies --- packages/snack-runtime/assets/favicon.png | Bin 1466 -> 0 bytes packages/snack-runtime/index.ts | 1 + packages/snack-runtime/package.json | 48 +- packages/snack-runtime/yarn.lock | 1861 +++++++++++++-------- 4 files changed, 1203 insertions(+), 707 deletions(-) delete mode 100644 packages/snack-runtime/assets/favicon.png diff --git a/packages/snack-runtime/assets/favicon.png b/packages/snack-runtime/assets/favicon.png deleted file mode 100644 index e75f697b1801871ad8cd9309b05e8ffe8c6b6d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy diff --git a/packages/snack-runtime/index.ts b/packages/snack-runtime/index.ts index e69de29b..a5449f45 100644 --- a/packages/snack-runtime/index.ts +++ b/packages/snack-runtime/index.ts @@ -0,0 +1 @@ +export { default as SnackRuntime } from './src/App'; diff --git a/packages/snack-runtime/package.json b/packages/snack-runtime/package.json index dc48e9c3..84dc8d52 100644 --- a/packages/snack-runtime/package.json +++ b/packages/snack-runtime/package.json @@ -2,10 +2,12 @@ "name": "snack-runtime", "version": "0.3.0-rc.0", "description": "Load and run Expo Snacks in any React Native app", - "main": "./index.ts", + "main": "index.ts", "files": [ - "build", - "types" + "assets", + "src", + "types", + "vendor" ], "repository": { "type": "git", @@ -27,9 +29,17 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { + "@babel/polyfill": "^7.8.3", + "@react-native-async-storage/async-storage": "1.17.11", "await-lock": "^2.2.2", - "snack-babel-standalone": "^2.2.2", - "snack-require-context": "file:../snack-require-context" + "canvaskit-wasm": "0.38.0", + "diff": "^5.0.0", + "escape-string-regexp": "^5.0.0", + "pubnub": "^7.2.0", + "snack-babel-standalone": "file:../snack-babel-standalone", + "snack-require-context": "file:../snack-require-context", + "socket.io-client": "~4.5.4", + "source-map": "0.6.1" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.59.7", @@ -38,16 +48,38 @@ "eslint": "^8.20.0", "eslint-config-universe": "^11.2.0", "expo": "^48.0.19", + "expo-asset": "~8.9.0", + "expo-barcode-scanner": "~12.3.0", + "expo-constants": "~14.2.0", + "expo-file-system": "~15.2.0", + "expo-keep-awake": "~12.0.0", + "expo-random": "~13.1.0", + "expo-splash-screen": "~0.18.0", + "expo-status-bar": "~1.4.0", + "expo-updates": "~0.16.0", "react": "18.2.0", "react-test-renderer": "18.2.0", "react-native": "0.71.8", + "react-native-gesture-handler": "~2.9.0", + "react-native-view-shot": "3.5.0", "jest": "^29.2.1", - "jest-expo": "^47.0.1" + "jest-expo": "^48.0.0" }, "peerDependencies": { "expo": "^48.0.0", - "react": "18.2.0", - "react-native": "0.71.8" + "expo-asset": "~8.9.0", + "expo-barcode-scanner": "~12.3.0", + "expo-constants": "~14.2.0", + "expo-file-system": "~15.2.0", + "expo-keep-awake": "~12.0.0", + "expo-random": "~13.1.0", + "expo-splash-screen": "~0.18.0", + "expo-status-bar": "~1.4.0", + "expo-updates": "~0.16.0", + "react": "~18.2.0", + "react-native": "~0.71.8", + "react-native-gesture-handler": "~2.9.0", + "react-native-view-shot": "~3.5.0" }, "jest": { "preset": "jest-expo" diff --git a/packages/snack-runtime/yarn.lock b/packages/snack-runtime/yarn.lock index f28ab154..ad641687 100644 --- a/packages/snack-runtime/yarn.lock +++ b/packages/snack-runtime/yarn.lock @@ -35,30 +35,30 @@ "@babel/highlight" "^7.22.10" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.11.tgz#8033acaa2aa24c3f814edaaa057f3ce0ba559c24" + integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.10" "@babel/generator" "^7.22.10" "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" + "@babel/helpers" "^7.22.11" + "@babel/parser" "^7.22.11" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.2" + json5 "^2.2.3" semver "^6.3.1" "@babel/generator@^7.20.0", "@babel/generator@^7.22.10", "@babel/generator@^7.7.2": @@ -96,10 +96,10 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" - integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" + integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" @@ -251,14 +251,14 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" -"@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== +"@babel/helpers@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a" + integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" "@babel/highlight@^7.10.4", "@babel/highlight@^7.22.10": version "7.22.10" @@ -269,10 +269,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" - integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905" + integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -561,9 +561,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-async-generator-functions@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" - integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649" + integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -602,11 +602,11 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-class-static-block@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" - integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" + integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -656,9 +656,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dynamic-import@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" - integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" + integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" @@ -672,9 +672,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-export-namespace-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" - integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" + integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" @@ -704,9 +704,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-json-strings@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" - integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" + integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -719,9 +719,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" - integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" + integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -741,22 +741,22 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" - integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.11", "@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" + integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" "@babel/plugin-transform-modules-systemjs@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" - integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" @@ -784,28 +784,28 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" - integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" + integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-transform-numeric-separator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" - integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" + integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" - integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62" + integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.22.5" @@ -819,17 +819,17 @@ "@babel/helper-replace-supers" "^7.22.5" "@babel/plugin-transform-optional-catch-binding@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" - integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" + integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" - integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.11.tgz#062f0071f777aa06b31332cd90318d6b76444b74" + integrity sha512-7X2vGqH2ZKu7Imx0C+o5OysRwtF/wzdCAqmcD1N1v2Ww8CtOSC+p+VoV76skm47DLvBZ8kBFic+egqxM9S/p4g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -851,12 +851,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-private-property-in-object@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" - integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" + integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" @@ -962,13 +962,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.5", "@babel/plugin-transform-typescript@^7.5.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" - integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== +"@babel/plugin-transform-typescript@^7.22.11", "@babel/plugin-transform-typescript@^7.5.0": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz#9f27fb5e51585729374bb767ab6a6d9005a23329" + integrity sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.10" + "@babel/helper-create-class-features-plugin" "^7.22.11" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" @@ -1003,6 +1003,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/polyfill@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" + integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + "@babel/preset-env@^7.20.0": version "7.22.10" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" @@ -1108,15 +1116,15 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.13.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" - integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz#f218cd0345524ac888aa3dc32f029de5b064b575" + integrity sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-typescript" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.11" + "@babel/plugin-transform-typescript" "^7.22.11" "@babel/register@^7.13.16": version "7.22.5" @@ -1135,9 +1143,9 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.0.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.8.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== dependencies: regenerator-runtime "^0.14.0" @@ -1150,10 +1158,10 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" - integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== +"@babel/traverse@^7.20.0", "@babel/traverse@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c" + integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== dependencies: "@babel/code-frame" "^7.22.10" "@babel/generator" "^7.22.10" @@ -1161,15 +1169,15 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.10" - "@babel/types" "^7.22.10" + "@babel/parser" "^7.22.11" + "@babel/types" "^7.22.11" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" + integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" @@ -1180,13 +1188,12 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== +"@egjs/hammerjs@^2.0.17": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" + integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A== dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "@types/hammerjs" "^2.0.36" "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -1326,32 +1333,6 @@ xcode "^3.0.1" xml2js "0.4.23" -"@expo/config-plugins@~5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-5.0.4.tgz#216fea6558fe66615af1370de55193f4181cb23e" - integrity sha512-vzUcVpqOMs3h+hyRdhGwk+eGIOhXa5xYdd92yO17RMNHav3v/+ekMbs7XA2c3lepMO8Yd4/5hqmRw9ZTL6jGzg== - dependencies: - "@expo/config-types" "^47.0.0" - "@expo/json-file" "8.2.36" - "@expo/plist" "0.0.18" - "@expo/sdk-runtime-versions" "^1.0.0" - "@react-native/normalize-color" "^2.0.0" - chalk "^4.1.2" - debug "^4.3.1" - find-up "~5.0.0" - getenv "^1.0.0" - glob "7.1.6" - resolve-from "^5.0.0" - semver "^7.3.5" - slash "^3.0.0" - xcode "^3.0.1" - xml2js "0.4.23" - -"@expo/config-types@^47.0.0": - version "47.0.0" - resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-47.0.0.tgz#99eeabe0bba7a776e0f252b78beb0c574692c38d" - integrity sha512-r0pWfuhkv7KIcXMUiNACJmJKKwlTBGMw9VZHNdppS8/0Nve8HZMTkNRFQzTHW1uH3pBj8jEXpyw/2vSWDHex9g== - "@expo/config-types@^48.0.0": version "48.0.0" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-48.0.0.tgz#15a46921565ffeda3c3ba010701398f05193d5b3" @@ -1374,22 +1355,19 @@ slugify "^1.3.4" sucrase "^3.20.0" -"@expo/config@~7.0.2": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.3.tgz#c9c634e76186de25e296485e51418f1e52966e6e" - integrity sha512-joVtB5o+NF40Tmsdp65UzryRtbnCuMbXkVO4wJnNJO4aaK0EYLdHCYSewORVqNcDfGN0LphQr8VTG2npbd9CJA== +"@expo/configure-splash-screen@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.6.0.tgz#07d97ee512fd859fcc09506ba3762fd6263ebc39" + integrity sha512-4DyPoNXJqx9bN4nEwF3HQreo//ECu7gDe1Xor3dnnzFm9P/VDxAKdbEhA0n+R6fgkNfT2onVHWijqvdpTS3Xew== dependencies: - "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "~5.0.3" - "@expo/config-types" "^47.0.0" - "@expo/json-file" "8.2.36" - getenv "^1.0.0" - glob "7.1.6" - require-from-string "^2.0.2" - resolve-from "^5.0.0" - semver "7.3.2" - slugify "^1.3.4" - sucrase "^3.20.0" + color-string "^1.5.3" + commander "^5.1.0" + fs-extra "^9.0.0" + glob "^7.1.6" + lodash "^4.17.15" + pngjs "^5.0.0" + xcode "^3.0.0" + xml-js "^1.6.11" "@expo/dev-server@0.3.0": version "0.3.0" @@ -1449,15 +1427,6 @@ semver "7.3.2" tempy "0.3.0" -"@expo/json-file@8.2.36": - version "8.2.36" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.36.tgz#62a505cb7f30a34d097386476794680a3f7385ff" - integrity sha512-tOZfTiIFA5KmMpdW9KF7bc6CFiGjb0xnbieJhTGlHrLL+ps2G0OkqmuZ3pFEXBOMnJYUVpnSy++52LFxvpa5ZQ== - dependencies: - "@babel/code-frame" "~7.10.4" - json5 "^1.0.1" - write-file-atomic "^2.3.0" - "@expo/json-file@^8.2.37", "@expo/json-file@~8.2.37": version "8.2.37" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.37.tgz#9c02d3b42134907c69cc0a027b18671b69344049" @@ -1505,15 +1474,6 @@ split "^1.0.1" sudo-prompt "9.1.1" -"@expo/plist@0.0.18": - version "0.0.18" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.18.tgz#9abcde78df703a88f6d9fa1a557ee2f045d178b0" - integrity sha512-+48gRqUiz65R21CZ/IXa7RNBXgAI/uPSdvJqoN9x1hfL44DNbUoWHgHiEXTx7XelcATpDwNTz6sHLfy0iNqf+w== - dependencies: - "@xmldom/xmldom" "~0.7.0" - base64-js "^1.2.3" - xmlbuilder "^14.0.0" - "@expo/plist@^0.0.20": version "0.0.20" resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.0.20.tgz#a6b3124438031c02b762bad5a47b70584d3c0072" @@ -1643,22 +1603,10 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/console@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.3.tgz#55ad945087c27e380d6d9fcbb85181ed802543f3" - integrity sha512-ukZbHAdDH4ktZIOKvWs1juAXhiVAdvCyM8zv4S/7Ii3vJSDvMW5k+wOVGMQmHLHUFw3Ko63ZQNy7NI6PSlsD5w== +"@jest/console@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.4.tgz#a7e2d84516301f986bba0dd55af9d5fe37f46527" + integrity sha512-wNK6gC0Ha9QeEPSkeJedQuTQqxZYnDPuDcDhVuVatRvMkL4D0VTvFVZj+Yuh6caG2aOfzkUZ36KtCmLNtR02hw== dependencies: "@jest/types" "^29.6.3" "@types/node" "*" @@ -1667,15 +1615,15 @@ jest-util "^29.6.3" slash "^3.0.0" -"@jest/core@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.3.tgz#bccee53680762e1bdef2a0038f123cc8d7ba4ab8" - integrity sha512-skV1XrfNxfagmjRUrk2FyN5/2YwIzdWVVBa/orUfbLvQUANXxERq2pTvY0I+FinWHjDKB2HRmpveUiph4X0TJw== +"@jest/core@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.4.tgz#265ebee05ec1ff3567757e7a327155c8d6bdb126" + integrity sha512-U/vq5ccNTSVgYH7mHnodHmCffGWHJnz/E1BEWlLuK5pM4FZmGfBn/nrJGLjUsSmyx3otCeqc1T31F4y08AMDLg== dependencies: - "@jest/console" "^29.6.3" - "@jest/reporters" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/console" "^29.6.4" + "@jest/reporters" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" @@ -1684,30 +1632,23 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.6.3" - jest-config "^29.6.3" - jest-haste-map "^29.6.3" + jest-config "^29.6.4" + jest-haste-map "^29.6.4" jest-message-util "^29.6.3" jest-regex-util "^29.6.3" - jest-resolve "^29.6.3" - jest-resolve-dependencies "^29.6.3" - jest-runner "^29.6.3" - jest-runtime "^29.6.3" - jest-snapshot "^29.6.3" + jest-resolve "^29.6.4" + jest-resolve-dependencies "^29.6.4" + jest-runner "^29.6.4" + jest-runtime "^29.6.4" + jest-snapshot "^29.6.4" jest-util "^29.6.3" jest-validate "^29.6.3" - jest-watcher "^29.6.3" + jest-watcher "^29.6.4" micromatch "^4.0.4" pretty-format "^29.6.3" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/create-cache-key-function@^27.0.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" - integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== - dependencies: - "@jest/types" "^27.5.1" - "@jest/create-cache-key-function@^29.2.1": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.6.3.tgz#e16da2139246403fb359fd65fced012eb32aa2b1" @@ -1715,35 +1656,35 @@ dependencies: "@jest/types" "^29.6.3" -"@jest/environment@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.3.tgz#bb02535c729393a0345b8d2c5eef94d34f7b35a3" - integrity sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA== +"@jest/environment@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.4.tgz#78ec2c9f8c8829a37616934ff4fea0c028c79f4f" + integrity sha512-sQ0SULEjA1XUTHmkBRl7A1dyITM9yb1yb3ZNKPX3KlTd6IG7mWUe3e2yfExtC2Zz1Q+mMckOLHmL/qLiuQJrBQ== dependencies: - "@jest/fake-timers" "^29.6.3" + "@jest/fake-timers" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" jest-mock "^29.6.3" -"@jest/expect-utils@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.3.tgz#5ef1a9689fdaa348da837c8be8d1219f56940ea3" - integrity sha512-nvOEW4YoqRKD9HBJ9OJ6przvIvP9qilp5nAn1462P5ZlL/MM9SgPEZFyjTGPfs7QkocdUsJa6KjHhyRn4ueItA== +"@jest/expect-utils@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.4.tgz#17c7dfe6cec106441f218b0aff4b295f98346679" + integrity sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg== dependencies: jest-get-type "^29.6.3" -"@jest/expect@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.3.tgz#d54e1e7134982166f62653add0d4b8262dd72db9" - integrity sha512-Ic08XbI2jlg6rECy+CGwk/8NDa6VE7UmIG6++9OTPAMnQmNGY28hu69Nf629CWv6T7YMODLbONxDFKdmQeI9FA== +"@jest/expect@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.4.tgz#1d6ae17dc68d906776198389427ab7ce6179dba6" + integrity sha512-Warhsa7d23+3X5bLbrbYvaehcgX5TLYhI03JKoedTiI8uJU4IhqYBWF7OSSgUyz4IgLpUYPkK0AehA5/fRclAA== dependencies: - expect "^29.6.3" - jest-snapshot "^29.6.3" + expect "^29.6.4" + jest-snapshot "^29.6.4" -"@jest/fake-timers@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.3.tgz#7e780b05b14ad59dca68bdc188f6cf085552a0e8" - integrity sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA== +"@jest/fake-timers@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.4.tgz#45a27f093c43d5d989362a3e7a8c70c83188b4f6" + integrity sha512-6UkCwzoBK60edXIIWb0/KWkuj7R7Qq91vVInOe3De6DSpaEiqjKcJw4F7XUet24Wupahj9J6PlR09JqJ5ySDHw== dependencies: "@jest/types" "^29.6.3" "@sinonjs/fake-timers" "^10.0.2" @@ -1752,25 +1693,25 @@ jest-mock "^29.6.3" jest-util "^29.6.3" -"@jest/globals@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.3.tgz#fe9e302bc20683ba8feb683b8804e38a9913b783" - integrity sha512-RB+uI+CZMHntzlnOPlll5x/jgRff3LEPl/td/jzMXiIgR0iIhKq9qm1HLU+EC52NuoVy/1swit/sDGjVn4bc6A== +"@jest/globals@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.4.tgz#4f04f58731b062b44ef23036b79bdb31f40c7f63" + integrity sha512-wVIn5bdtjlChhXAzVXavcY/3PEjf4VqM174BM3eGL5kMxLiZD5CLnbmkEyA1Dwh9q8XjP6E8RwjBsY/iCWrWsA== dependencies: - "@jest/environment" "^29.6.3" - "@jest/expect" "^29.6.3" + "@jest/environment" "^29.6.4" + "@jest/expect" "^29.6.4" "@jest/types" "^29.6.3" jest-mock "^29.6.3" -"@jest/reporters@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.3.tgz#e5071915d74f43e0f49982fa518ca3283a9f4c5a" - integrity sha512-kGz59zMi0GkVjD2CJeYWG9k6cvj7eBqt9aDAqo2rcCLRTYlvQ62Gu/n+tOmJMBHGjzeijjuCENjzTyYBgrtLUw== +"@jest/reporters@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.4.tgz#9d6350c8a2761ece91f7946e97ab0dabc06deab7" + integrity sha512-sxUjWxm7QdchdrD3NfWKrL8FBsortZeibSJv4XLjESOOjSUOkjQcb0ZHJwfhEGIvBvTluTzfG2yZWZhkrXJu8g== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/console" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" "@jest/types" "^29.6.3" "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" @@ -1786,7 +1727,7 @@ istanbul-reports "^3.1.3" jest-message-util "^29.6.3" jest-util "^29.6.3" - jest-worker "^29.6.3" + jest-worker "^29.6.4" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1808,61 +1749,30 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.3.tgz#1da4c6749c16a71c108644624d9cd0d17206aa2b" - integrity sha512-k7ZZaNvOSMBHPZYiy0kuiaFoyansR5QnTwDux1EjK3kD5iWpRVyJIJ0RAIV39SThafchuW59vra7F8mdy5Hfgw== +"@jest/test-result@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.4.tgz#adf5c79f6e1fb7405ad13d67d9e2b6ff54b54c6b" + integrity sha512-uQ1C0AUEN90/dsyEirgMLlouROgSY+Wc/JanVVk0OiUKa5UFh7sJpMEM3aoUBAz2BRNvUJ8j3d294WFuRxSyOQ== dependencies: - "@jest/console" "^29.6.3" + "@jest/console" "^29.6.4" "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.3.tgz#e59f422bc3786d79fac504c16979a5f1b999a932" - integrity sha512-/SmijaAU2TY9ComFGIYa6Z+fmKqQMnqs2Nmwb0P/Z/tROdZ7M0iruES1EaaU9PBf8o9uED5xzaJ3YPFEIcDgAg== +"@jest/test-sequencer@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.4.tgz#86aef66aaa22b181307ed06c26c82802fb836d7b" + integrity sha512-E84M6LbpcRq3fT4ckfKs9ryVanwkaIB0Ws9bw3/yP4seRLg/VaCZ/LgW0MCq5wwk4/iP/qnilD41aj2fsw2RMg== dependencies: - "@jest/test-result" "^29.6.3" + "@jest/test-result" "^29.6.4" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" + jest-haste-map "^29.6.4" slash "^3.0.0" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - 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" - -"@jest/transform@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.3.tgz#e8e376f56fffe827b529bf03a9881e58d152c14b" - integrity sha512-dPIc3DsvMZ/S8ut4L2ViCj265mKO0owB0wfzBv2oGzL9pQ+iRvJewHqLBmsGb7XFb5UotWIEtvY5A/lnylaIoQ== +"@jest/transform@^29.6.4": + version "29.6.4" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.4.tgz#a6bc799ef597c5d85b2e65a11fd96b6b239bab5a" + integrity sha512-8thgRSiXUqtr/pPGY/OsyHuMjGyhVnWrFAwoxmIemlBuiMyU1WFs0tXoNxzcr4A4uErs/ABre76SGmrr5ab/AA== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^29.6.3" @@ -1872,7 +1782,7 @@ convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" + jest-haste-map "^29.6.4" jest-regex-util "^29.6.3" jest-util "^29.6.3" micromatch "^4.0.4" @@ -1991,6 +1901,13 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@react-native-async-storage/async-storage@1.17.11": + version "1.17.11" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.17.11.tgz#7ec329c1b9f610e344602e806b04d7c928a2341d" + integrity sha512-bzs45n5HNcDq6mxXnSsOHysZWn1SbbebNxldBXCQs8dSvF8Aor9KCdpm+TpnnGweK3R6diqsT8lFhX77VX0NFw== + dependencies: + merge-options "^3.0.4" + "@react-native-community/cli-clean@^10.1.1": version "10.1.1" resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-10.1.1.tgz#4c73ce93a63a24d70c0089d4025daac8184ff504" @@ -2224,7 +2141,22 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": +"@socket.io/component-emitter@~3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + +"@types/babel__core@^7.1.14": version "7.20.1" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== @@ -2257,13 +2189,18 @@ dependencies: "@babel/types" "^7.20.7" -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": +"@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" +"@types/hammerjs@^2.0.36": + version "2.0.41" + resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa" + integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -2283,6 +2220,15 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@^7.0.9": version "7.0.12" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" @@ -2294,9 +2240,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@*": - version "20.5.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.3.tgz#fa52c147f405d56b2f1dd8780d840aa87ddff629" - integrity sha512-ITI7rbWczR8a/S6qjAW7DMqxqFMjjTo61qZVWJ1ubPvbIQsL5D/TvwjYEalM8Kthpe3hTzOGrF2TGbAu2uyqeA== + version "20.5.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.4.tgz#4666fb40f9974d60c53c4ff554315860ba4feab8" + integrity sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA== "@types/semver@^7.3.12": version "7.5.0" @@ -2308,6 +2254,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -2447,11 +2398,16 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== -"@xmldom/xmldom@~0.7.0", "@xmldom/xmldom@~0.7.7": +"@xmldom/xmldom@~0.7.7": version "0.7.13" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3" integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -2472,12 +2428,25 @@ accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.34" negotiator "0.6.3" +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.2, acorn@^8.9.0: +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.10.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== @@ -2489,6 +2458,20 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -2512,13 +2495,20 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" +ansi-escapes@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== + dependencies: + type-fest "^3.0.0" + ansi-fragments@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" @@ -2538,6 +2528,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -2562,14 +2557,6 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@^3.0.3: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2720,6 +2707,13 @@ ast-types@0.14.2: dependencies: tslib "^2.0.1" +ast-types@^0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2772,26 +2766,12 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.3.tgz#e62f6c38f3ec8c147244168ee18ef0b919f10348" - integrity sha512-1Ne93zZZEy5XmTa4Q+W5+zxBrDpExX8E3iy+xJJ+24ewlfo/T3qHfQJCzi/MMVFmBQDNxtRR/Gfd2dwb/0yrQw== +babel-jest@^29.2.1, babel-jest@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.4.tgz#98dbc45d1c93319c82a8ab4a478b670655dd2585" + integrity sha512-meLj23UlSLddj6PC+YTOFRgDAtjnZom8w/ACsrx0gtPtv5cJZk0A5Unk5bV4wixD7XaPCN1fQvpww8czkZURmw== dependencies: - "@jest/transform" "^29.6.3" + "@jest/transform" "^29.6.4" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^29.6.3" @@ -2799,7 +2779,7 @@ babel-jest@^29.6.3: graceful-fs "^4.2.9" slash "^3.0.0" -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -2810,16 +2790,6 @@ babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" @@ -2971,14 +2941,6 @@ babel-preset-fbjs@^3.4.0: "@babel/plugin-transform-template-literals" "^7.0.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-jest@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" @@ -2992,7 +2954,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: +base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3010,6 +2972,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +basic-ftp@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228" + integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g== + better-opn@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" @@ -3161,6 +3128,14 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -3262,12 +3237,20 @@ caniuse-lite@^1.0.30001517: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" +canvaskit-wasm@0.38.0: + version "0.38.0" + resolved "https://registry.yarnpkg.com/canvaskit-wasm/-/canvaskit-wasm-0.38.0.tgz#83e6c46f3015c2ff3f6503157f47453af76a7be7" + integrity sha512-ZEG6lucpbQ4Ld+mY8C1Ng+PMLVP+/AX02jS0Sdl28NyMxuKSa9uKB8oGd1BYp1XWPyO2Jgr7U8pdyjJ/F3xR5Q== + +cbor-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cbor-js/-/cbor-js-0.1.0.tgz#c80ce6120f387e8faa74370dfda21d965b8fc7f9" + integrity sha512-7sQ/TvDZPl7csT1Sif9G0+MA0I0JOVah8+wWlJVQdVEgIbCzlN/ab3x+uvMNsc34TUvO6osQTAmB2ls80JX6tw== + +cbor-sync@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cbor-sync/-/cbor-sync-1.0.4.tgz#5a11a1ab75c2a14d1af1b237fd84aa8c1593662f" + integrity sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA== chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" @@ -3299,6 +3282,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +char-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" + integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== + charenc@0.0.2, charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -3432,11 +3420,19 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.5.3: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + colorette@^1.0.7: version "1.4.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" @@ -3464,6 +3460,11 @@ commander@^4.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -3489,7 +3490,7 @@ compare-versions@^3.4.0: resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -3539,7 +3540,7 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -3549,6 +3550,11 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +cookiejar@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -3561,6 +3567,11 @@ core-js-compat@^3.31.0: dependencies: browserslist "^4.21.10" +core-js@^2.6.5: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -3618,11 +3629,42 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + dag-map@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-1.0.2.tgz#e8379f041000ed561fc515475c1ed2c85eece8d7" integrity sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw== +data-uri-to-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c" + integrity sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg== + +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + dayjs@^1.8.15: version "1.11.9" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" @@ -3635,7 +3677,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3654,6 +3696,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -3734,6 +3781,15 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + del@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -3787,6 +3843,11 @@ diff-sequences@^29.6.3: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3808,15 +3869,22 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.477: - version "1.4.499" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.499.tgz#dc36b67f4c8e273524e8d2080c5203a6a76987b6" - integrity sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw== + version "1.4.500" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.500.tgz#7dd05fdfbe02ed34b9f6099cfe01407b473d5af7" + integrity sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A== emittery@^0.13.1: version "0.13.1" @@ -3840,6 +3908,27 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +engine.io-client@~6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.2.3.tgz#a8cbdab003162529db85e9de31575097f6d29458" + integrity sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.0.3" + ws "~8.2.3" + xmlhttprequest-ssl "~2.0.0" + +engine.io-parser@~5.0.3: + version "5.0.7" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.7.tgz#ed5eae76c71f398284c578ab6deafd3ba7e4e4f6" + integrity sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ== + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-editor@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" @@ -3992,6 +4081,22 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escodegen@^2.0.0, escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + eslint-config-prettier@^8.5.0: version "8.10.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" @@ -4189,7 +4294,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4238,11 +4343,6 @@ exec-async@^2.2.0: resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301" integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw== -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -4289,14 +4389,14 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.3.tgz#e74b57c35a81fd93ece6b570e371309c53dc4f54" - integrity sha512-x1vY4LlEMWUYVZQrFi4ZANXFwqYbJ/JNQspLVvzhW2BNY28aNcXMQH6imBbt+RBf5sVRTodYHXtSP/TLEU0Dxw== +expect@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.4.tgz#a6e6f66d4613717859b2fe3da98a739437b6f4b8" + integrity sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA== dependencies: - "@jest/expect-utils" "^29.6.3" + "@jest/expect-utils" "^29.6.4" jest-get-type "^29.6.3" - jest-matcher-utils "^29.6.3" + jest-matcher-utils "^29.6.4" jest-message-util "^29.6.3" jest-util "^29.6.3" @@ -4305,7 +4405,7 @@ expo-application@~5.1.1: resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.1.1.tgz#5206bf0cf89cb0e32d1f5037a0481e5c86b951ab" integrity sha512-aDatTcTTCdTbHw8h4/Tq2ilc6InM5ntF9xWCJdOcnUEcglxxGphVI/lzJKBaBF6mJECA8mEOjpVg2EGxOctTwg== -expo-asset@~8.9.1: +expo-asset@~8.9.0, expo-asset@~8.9.1: version "8.9.2" resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.9.2.tgz#07f32d29d4f0ef99c80ffc831e81d62238f759a9" integrity sha512-aHMaZkIG5/UoguINEHm2ln/KviU2m/yuryslnhCKR3KXRxiLnMhxmrONLGbknuNE0O1iCaprrl1w3y71u01Rpw== @@ -4318,7 +4418,14 @@ expo-asset@~8.9.1: path-browserify "^1.0.0" url-parse "^1.5.9" -expo-constants@~14.2.1: +expo-barcode-scanner@~12.3.0: + version "12.3.2" + resolved "https://registry.yarnpkg.com/expo-barcode-scanner/-/expo-barcode-scanner-12.3.2.tgz#d0023e8c9a3a8cef769bbc2080b5c275188affe8" + integrity sha512-6s8r7/H2pP1sscCm4gwIaVaqOTPBn3qDbh0d27Q79Ix5/p+yPVd/hkD0GGooDLHHcdOWTweQzrlRCxOdSVh8ZQ== + dependencies: + expo-image-loader "~4.1.0" + +expo-constants@~14.2.0, expo-constants@~14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.2.1.tgz#b5b6b8079d2082c31ccf2cbc7cf97a0e83c229c3" integrity sha512-DD5u4QmBds2U7uYo409apV7nX+XjudARcgqe7S9aRFJ/6kyftmuxvk1DpaU4X42Av8z/tfKwEpuxl+vl7HHx/Q== @@ -4334,7 +4441,12 @@ expo-constants@~14.3.0: "@expo/config" "~8.0.0" uuid "^3.3.2" -expo-file-system@~15.2.2: +expo-eas-client@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/expo-eas-client/-/expo-eas-client-0.5.1.tgz#3ef80dbbde13abe35be4e2a2e29b73d2f7fdf27a" + integrity sha512-i3L/iwhI6cFhSUpVsCxSU5qehNznL/rQFYoof6qUIh3CMyijCuTEwjEhwbw2a5W6obPBzQUXbomMSFDO6D5/0Q== + +expo-file-system@~15.2.0, expo-file-system@~15.2.2: version "15.2.2" resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.2.2.tgz#a1ddf8aabf794f93888a146c4f5187e2004683a3" integrity sha512-LFkOLcWwlmnjkURxZ3/0ukS35OswX8iuQknLHRHeyk8mUA8fpRPPelD/a1lS+yclqfqavMJmTXVKM1Nsq5XVMA== @@ -4355,11 +4467,28 @@ expo-font@~11.1.1: dependencies: fontfaceobserver "^2.1.0" -expo-keep-awake@~12.0.1: +expo-image-loader@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.1.1.tgz#efadbb17de1861106864820194900f336dd641b6" + integrity sha512-ciEHVokU0f6w0eTxdRxLCio6tskMsjxWIoV92+/ZD37qePUJYMfEphPhu1sruyvMBNR8/j5iyOvPFVGTfO8oxA== + +expo-json-utils@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.5.1.tgz#fcb01050b8aa66592eea2024a48979f2d090c6f9" + integrity sha512-Y5boshyf40vPjwxNnOIfacZPNkOymecZRQ1k+TSXlq6gnw5XRsnM5hnP0VLVYhdv8x+9CX6E1fDsDUNvsK38Dg== + +expo-keep-awake@~12.0.0, expo-keep-awake@~12.0.1: version "12.0.1" resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-12.0.1.tgz#19c5ab55391394ded3f6c262b0707c7140658a11" integrity sha512-hqeCnb4033TyuZaXs93zTK7rjVJ3bywXATyMmKmKkLEsH2PKBAl/VmjlCOPQL/2Ncqz6aj7Wo//tjeJTARBD4g== +expo-manifests@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/expo-manifests/-/expo-manifests-0.5.2.tgz#60f91ad196cd5a37248c28c6f307df806c5a27ad" + integrity sha512-WnsTlE2le3pV/B/AJPKTOSjb2K9AT1mPDCfQxTQ/KMCwF95saoXYt2OPF3hxZNaMAV6VIAhXgd5Y6wpcH9ruPQ== + dependencies: + expo-json-utils "~0.5.0" + expo-modules-autolinking@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.2.0.tgz#3ead115510a43fe196fc0498586b6133bd573209" @@ -4379,6 +4508,53 @@ expo-modules-core@1.2.7: compare-versions "^3.4.0" invariant "^2.2.4" +expo-random@~13.1.0: + version "13.1.2" + resolved "https://registry.yarnpkg.com/expo-random/-/expo-random-13.1.2.tgz#f1e7ac440e64d5ad4124aac6125ce26e9a9a710e" + integrity sha512-0Yph3FTS1Xyo+rGHlndE3guphch7aO7mdo7mUBjyjZT45iZ2rBDYkK+DdeJMGXUsnMCXMRwzKqMnuVkxDtR6/Q== + dependencies: + base64-js "^1.3.0" + +expo-splash-screen@~0.18.0: + version "0.18.2" + resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.18.2.tgz#dde246204da875785ba40c7143a70013cdefdbb6" + integrity sha512-fsiKmyn/lbJtV6Uor6wSvl21fScOidFzmB/HHShQJJOu2TBN/vqMvhPu/r0bF5NVk8Wi64r98hiWY1EEsbW03w== + dependencies: + "@expo/configure-splash-screen" "^0.6.0" + "@expo/prebuild-config" "6.0.1" + +expo-status-bar@~1.4.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.4.4.tgz#6874ccfda5a270d66f123a9f220735a76692d114" + integrity sha512-5DV0hIEWgatSC3UgQuAZBoQeaS9CqeWRZ3vzBR9R/+IUD87Adbi4FGhU10nymRqFXOizGsureButGZIXPs7zEA== + +expo-structured-headers@~3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/expo-structured-headers/-/expo-structured-headers-3.1.2.tgz#ac2ec100349a398f5d4fcc450d9b963b9a6efcff" + integrity sha512-UjVKwKeq6Ya4FWweDyfeaB2a2FY6BzrgF/c2uRMUDRVbUZIkhmc6BNYHKmfS2bnYWOc3bqp/REX5YFLSQfqvOg== + +expo-updates-interface@~0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/expo-updates-interface/-/expo-updates-interface-0.9.3.tgz#32caf6fe48b517c904be901dac46d2c964ca8407" + integrity sha512-zBkJmLP5Bmcz2s14PZDcHFzRjnyiG/TwlQfIvpnV4NS+EYyR4vgbC0J3zUEi7Vvhm5m4gjsTpU6X1oKn6br+HQ== + +expo-updates@~0.16.0: + version "0.16.4" + resolved "https://registry.yarnpkg.com/expo-updates/-/expo-updates-0.16.4.tgz#6d05438cf7304add03645a598211ac4ef3cc4f64" + integrity sha512-hEUotP10sBiYn6dvkYC2rIa+kAmsBuaMp32sIVNAYEwKMQJqEwqNAKTU6CpJ4Aoc//BYL2Hv8qNo/UsT4rATRg== + dependencies: + "@expo/code-signing-certificates" "0.0.5" + "@expo/config" "~8.0.0" + "@expo/config-plugins" "~6.0.0" + "@expo/metro-config" "~0.7.0" + arg "4.1.0" + expo-eas-client "~0.5.0" + expo-manifests "~0.5.0" + expo-structured-headers "~3.1.0" + expo-updates-interface "~0.9.0" + fbemitter "^3.0.0" + resolve-from "^5.0.0" + expo@^48.0.19: version "48.0.20" resolved "https://registry.yarnpkg.com/expo/-/expo-48.0.20.tgz#098a19b1eba81a15062fa853ae6941fdf9aef1f4" @@ -4467,6 +4643,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fast-xml-parser@^4.0.12: version "4.2.7" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz#871f2ca299dc4334b29f8da3658c164e68395167" @@ -4624,9 +4805,9 @@ flatted@^3.1.0: integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flow-parser@0.*: - version "0.215.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.215.0.tgz#9b153fa27ab238bcc0bb1ff73b63bdb15d3f277d" - integrity sha512-8bjwzy8vi+fNDy8YoTBNtQUSZa53i7UWJJTunJojOtjab9cMNhOCwohionuMgDQUU0y21QTTtPOX6OQEOQT72A== + version "0.215.1" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.215.1.tgz#a14007f404db46ac829bb6db3a22a7956d9e298f" + integrity sha512-qq3rdRToqwesrddyXf+Ml8Tuf7TdoJS+EMbJgC6fHAVoBCXjb4mHelNd3J+jD8ts0bSHX81FG3LN7Qn/dcl6pA== flow-parser@^0.185.0: version "0.185.2" @@ -4650,7 +4831,7 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== -form-data@^3.0.1: +form-data@^3.0.0, form-data@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== @@ -4659,6 +4840,20 @@ form-data@^3.0.1: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^1.2.2: + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -4717,7 +4912,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.1.2, fsevents@^2.3.2: +fsevents@^2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -4792,6 +4987,16 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-uri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c" + integrity sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^5.0.1" + debug "^4.3.4" + fs-extra "^8.1.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -5018,6 +5223,13 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hosted-git-info@^3.0.2: version "3.0.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" @@ -5025,6 +5237,13 @@ hosted-git-info@^3.0.2: dependencies: lru-cache "^6.0.0" +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -5041,6 +5260,23 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -5049,11 +5285,26 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" +https-proxy-agent@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz#0277e28f13a07d45c663633841e20a40aaafe0ab" + integrity sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5061,7 +5312,14 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13: +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -5162,11 +5420,16 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== -ip@^1.1.5: +ip@^1.1.5, ip@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -5200,6 +5463,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-async-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" @@ -5232,13 +5500,6 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.13.0, is-core-module@^2.9.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" @@ -5411,6 +5672,11 @@ is-path-inside@^3.0.2, is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -5418,6 +5684,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -5474,11 +5745,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -5628,14 +5894,14 @@ jest-changed-files@^29.6.3: jest-util "^29.6.3" p-limit "^3.1.0" -jest-circus@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.3.tgz#c5ac37758bb9e78fd78ebd655ed1d28b220d6fd3" - integrity sha512-p0R5YqZEMnOpHqHLWRSjm2z/0p6RNsrNE/GRRT3eli8QGOAozj6Ys/3Tv+Ej+IfltJoSPwcQ6/hOCRkNlxLLCw== +jest-circus@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.4.tgz#f074c8d795e0cc0f2ebf0705086b1be6a9a8722f" + integrity sha512-YXNrRyntVUgDfZbjXWBMPslX1mQ8MrSG0oM/Y06j9EYubODIyHWP8hMUbjbZ19M3M+zamqEur7O80HODwACoJw== dependencies: - "@jest/environment" "^29.6.3" - "@jest/expect" "^29.6.3" - "@jest/test-result" "^29.6.3" + "@jest/environment" "^29.6.4" + "@jest/expect" "^29.6.4" + "@jest/test-result" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" @@ -5643,10 +5909,10 @@ jest-circus@^29.6.3: dedent "^1.0.0" is-generator-fn "^2.0.0" jest-each "^29.6.3" - jest-matcher-utils "^29.6.3" + jest-matcher-utils "^29.6.4" jest-message-util "^29.6.3" - jest-runtime "^29.6.3" - jest-snapshot "^29.6.3" + jest-runtime "^29.6.4" + jest-snapshot "^29.6.4" jest-util "^29.6.3" p-limit "^3.1.0" pretty-format "^29.6.3" @@ -5654,44 +5920,44 @@ jest-circus@^29.6.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.3.tgz#1e6520106e9d7443a481ebe07ffed46e1568a51f" - integrity sha512-KuPdXUPXQIf0t6DvmG8MV4QyhcjR1a6ruKl3YL7aGn/AQ8JkROwFkWzEpDIpt11Qy188dHbRm8WjwMsV/4nmnQ== +jest-cli@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.4.tgz#ad52f2dfa1b0291de7ec7f8d7c81ac435521ede0" + integrity sha512-+uMCQ7oizMmh8ZwRfZzKIEszFY9ksjjEQnTEMTaL7fYiL3Kw4XhqT9bYh+A4DQKUb67hZn2KbtEnDuHvcgK4pQ== dependencies: - "@jest/core" "^29.6.3" - "@jest/test-result" "^29.6.3" + "@jest/core" "^29.6.4" + "@jest/test-result" "^29.6.4" "@jest/types" "^29.6.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.6.3" + jest-config "^29.6.4" jest-util "^29.6.3" jest-validate "^29.6.3" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.3.tgz#2d1490005a28291806022f7f95ec3debf55eaaf7" - integrity sha512-nb9bOq2aEqogbyL4F9mLkAeQGAgNt7Uz6U59YtQDIxFPiL7Ejgq0YIrp78oyEHD6H4CIV/k7mFrK7eFDzUJ69w== +jest-config@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.4.tgz#eff958ee41d4e1ee7a6106d02b74ad9fc427d79e" + integrity sha512-JWohr3i9m2cVpBumQFv2akMEnFEPVOh+9L2xIBJhJ0zOaci2ZXuKJj0tgMKQCBZAKA09H049IR4HVS/43Qb19A== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.6.3" + "@jest/test-sequencer" "^29.6.4" "@jest/types" "^29.6.3" - babel-jest "^29.6.3" + babel-jest "^29.6.4" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.6.3" - jest-environment-node "^29.6.3" + jest-circus "^29.6.4" + jest-environment-node "^29.6.4" jest-get-type "^29.6.3" jest-regex-util "^29.6.3" - jest-resolve "^29.6.3" - jest-runner "^29.6.3" + jest-resolve "^29.6.4" + jest-runner "^29.6.4" jest-util "^29.6.3" jest-validate "^29.6.3" micromatch "^4.0.4" @@ -5700,10 +5966,10 @@ jest-config@^29.6.3: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.3.tgz#365c6b037ea8e67d2f2af68bc018fc18d44311f0" - integrity sha512-3sw+AdWnwH9sSNohMRKA7JiYUJSRr/WS6+sEFfBuhxU5V5GlEVKfvUn8JuMHE0wqKowemR1C2aHy8VtXbaV8dQ== +jest-diff@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.4.tgz#85aaa6c92a79ae8cd9a54ebae8d5b6d9a513314a" + integrity sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw== dependencies: chalk "^4.0.0" diff-sequences "^29.6.3" @@ -5728,32 +5994,47 @@ jest-each@^29.6.3: jest-util "^29.6.3" pretty-format "^29.6.3" -jest-environment-node@^29.2.1, jest-environment-node@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.3.tgz#72217a00db2c26755406241c70ad73c334917e28" - integrity sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew== +jest-environment-jsdom@^29.2.1: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.6.4.tgz#0daf44454041f9e1ef7fa82eb1bd43426a82eb1c" + integrity sha512-K6wfgUJ16DoMs02JYFid9lOsqfpoVtyJxpRlnTxUHzvZWBnnh2VNGRB9EC1Cro96TQdq5TtSjb3qUjNaJP9IyA== + dependencies: + "@jest/environment" "^29.6.4" + "@jest/fake-timers" "^29.6.4" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.6.3" + jest-util "^29.6.3" + jsdom "^20.0.0" + +jest-environment-node@^29.2.1, jest-environment-node@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.4.tgz#4ce311549afd815d3cafb49e60a1e4b25f06d29f" + integrity sha512-i7SbpH2dEIFGNmxGCpSc2w9cA4qVD+wfvg2ZnfQ7XVrKL0NA5uDVBIiGH8SR4F0dKEv/0qI5r+aDomDf04DpEQ== dependencies: - "@jest/environment" "^29.6.3" - "@jest/fake-timers" "^29.6.3" + "@jest/environment" "^29.6.4" + "@jest/fake-timers" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" jest-mock "^29.6.3" jest-util "^29.6.3" -jest-expo@^47.0.1: - version "47.0.1" - resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-47.0.1.tgz#c6dd18d64b9e4ff69a74732225c349c73799573e" - integrity sha512-v/qq689LRqa6OPU2Z6mGHLpjNB0SBqWuwE9WdreCaSFurISD75ZlN3vEiq6ZojcHxYAX+4FW4xWd2CCJtubi4w== +jest-expo@^48.0.0: + version "48.0.2" + resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-48.0.2.tgz#eedab424e29e9bec2cf17a2fe1a653096ec82b04" + integrity sha512-hxppv3I3/WgtswladHpPlcEHCv+5/6OG8nOuR3VqtS0h7ZJYuyQCMpXbsKZiA4R/sT4fHS0BUj9BBsdhrk/zXg== dependencies: - "@expo/config" "~7.0.2" - "@jest/create-cache-key-function" "^27.0.1" - babel-jest "^26.6.3" + "@expo/config" "~8.0.0" + "@jest/create-cache-key-function" "^29.2.1" + babel-jest "^29.2.1" find-up "^5.0.0" + jest-environment-jsdom "^29.2.1" jest-watch-select-projects "^2.0.0" - jest-watch-typeahead "0.6.4" + jest-watch-typeahead "2.2.1" json5 "^2.1.0" lodash "^4.17.19" - react-test-renderer "~18.1.0" + react-test-renderer "18.2.0" jest-get-type@^26.3.0: version "26.3.0" @@ -5765,31 +6046,10 @@ jest-get-type@^29.6.3: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - 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" - optionalDependencies: - fsevents "^2.1.2" - -jest-haste-map@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.3.tgz#a53ac35a137fd32d932039aab29d02a9dab30689" - integrity sha512-GecR5YavfjkhOytEFHAeI6aWWG3f/cOKNB1YJvj/B76xAmeVjy4zJUYobGF030cRmKaO1FBw3V8CZZ6KVh9ZSw== +jest-haste-map@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.4.tgz#97143ce833829157ea7025204b08f9ace609b96a" + integrity sha512-12Ad+VNTDHxKf7k+M65sviyynRoZYuL1/GTuhEVb8RYsNSNln71nANRb/faSyWvx0j+gHcivChXHIoMJrGYjog== dependencies: "@jest/types" "^29.6.3" "@types/graceful-fs" "^4.1.3" @@ -5799,7 +6059,7 @@ jest-haste-map@^29.6.3: graceful-fs "^4.2.9" jest-regex-util "^29.6.3" jest-util "^29.6.3" - jest-worker "^29.6.3" + jest-worker "^29.6.4" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: @@ -5813,31 +6073,16 @@ jest-leak-detector@^29.6.3: jest-get-type "^29.6.3" pretty-format "^29.6.3" -jest-matcher-utils@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.3.tgz#a7574092b635d96a38fa0a22d015fb596b9c2efc" - integrity sha512-6ZrMYINZdwduSt5Xu18/n49O1IgXdjsfG7NEZaQws9k69eTKWKcVbJBw/MZsjOZe2sSyJFmuzh8042XWwl54Zg== +jest-matcher-utils@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.4.tgz#327db7ababea49455df3b23e5d6109fe0c709d24" + integrity sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ== dependencies: chalk "^4.0.0" - jest-diff "^29.6.3" + jest-diff "^29.6.4" jest-get-type "^29.6.3" pretty-format "^29.6.3" -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf" @@ -5867,37 +6112,32 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-regex-util@^27.0.0, jest-regex-util@^27.0.6: +jest-regex-util@^27.0.6: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-regex-util@^29.6.3: +jest-regex-util@^29.0.0, jest-regex-util@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.3.tgz#fc58ac08f9ed992b10d5cfb0bbb1d89b98508ff3" - integrity sha512-iah5nhSPTwtUV7yzpTc9xGg8gP3Ch2VNsuFMsKoCkNCrQSbFtx5KRPemmPJ32AUhTSDqJXB6djPN6zAaUGV53g== +jest-resolve-dependencies@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.4.tgz#20156b33c7eacbb6bb77aeba4bed0eab4a3f8734" + integrity sha512-7+6eAmr1ZBF3vOAJVsfLj1QdqeXG+WYhidfLHBRZqGN24MFRIiKG20ItpLw2qRAsW/D2ZUUmCNf6irUr/v6KHA== dependencies: jest-regex-util "^29.6.3" - jest-snapshot "^29.6.3" + jest-snapshot "^29.6.4" -jest-resolve@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.3.tgz#e3114e1514973c8f1607387c3042f4d2926f2d60" - integrity sha512-WMXwxhvzDeA/J+9jz1i8ZKGmbw/n+s988EiUvRI4egM+eTn31Hb5v10Re3slG3/qxntkBt2/6GkQVDGu6Bwyhw== +jest-resolve@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.4.tgz#e34cb06f2178b429c38455d98d1a07572ac9faa3" + integrity sha512-fPRq+0vcxsuGlG0O3gyoqGTAxasagOxEuyoxHeyxaZbc9QNek0AmJWSkhjlMG+mTsj+8knc/mWb3fXlRNVih7Q== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" + jest-haste-map "^29.6.4" jest-pnp-resolver "^1.2.2" jest-util "^29.6.3" jest-validate "^29.6.3" @@ -5905,44 +6145,44 @@ jest-resolve@^29.6.3: resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.3.tgz#162b1a549c4728265e716d75533b65b4c77e6b22" - integrity sha512-E4zsMhQnjhirFPhDTJgoLMWUrVCDij/KGzWlbslDHGuO8Hl2pVUfOiygMzVZtZq+BzmlqwEr7LYmW+WFLlmX8w== +jest-runner@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.4.tgz#b3b8ccb85970fde0fae40c73ee11eb75adccfacf" + integrity sha512-SDaLrMmtVlQYDuG0iSPYLycG8P9jLI+fRm8AF/xPKhYDB2g6xDWjXBrR5M8gEWsK6KVFlebpZ4QsrxdyIX1Jaw== dependencies: - "@jest/console" "^29.6.3" - "@jest/environment" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/console" "^29.6.4" + "@jest/environment" "^29.6.4" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" jest-docblock "^29.6.3" - jest-environment-node "^29.6.3" - jest-haste-map "^29.6.3" + jest-environment-node "^29.6.4" + jest-haste-map "^29.6.4" jest-leak-detector "^29.6.3" jest-message-util "^29.6.3" - jest-resolve "^29.6.3" - jest-runtime "^29.6.3" + jest-resolve "^29.6.4" + jest-runtime "^29.6.4" jest-util "^29.6.3" - jest-watcher "^29.6.3" - jest-worker "^29.6.3" + jest-watcher "^29.6.4" + jest-worker "^29.6.4" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.3.tgz#8bfa29447808419a7b5bed13beb0447a90344c65" - integrity sha512-VM0Z3a9xaqizGpEKwCOIhImkrINYzxgwk8oQAvrmAiXX8LNrJrRjyva30RkuRY0ETAotHLlUcd2moviCA1hgsQ== +jest-runtime@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.4.tgz#b0bc495c9b6b12a0a7042ac34ca9bb85f8cd0ded" + integrity sha512-s/QxMBLvmwLdchKEjcLfwzP7h+jsHvNEtxGP5P+Fl1FMaJX2jMiIqe4rJw4tFprzCwuSvVUo9bn0uj4gNRXsbA== dependencies: - "@jest/environment" "^29.6.3" - "@jest/fake-timers" "^29.6.3" - "@jest/globals" "^29.6.3" + "@jest/environment" "^29.6.4" + "@jest/fake-timers" "^29.6.4" + "@jest/globals" "^29.6.4" "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/test-result" "^29.6.4" + "@jest/transform" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" @@ -5950,24 +6190,16 @@ jest-runtime@^29.6.3: collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.6.3" + jest-haste-map "^29.6.4" jest-message-util "^29.6.3" jest-mock "^29.6.3" jest-regex-util "^29.6.3" - jest-resolve "^29.6.3" - jest-snapshot "^29.6.3" + jest-resolve "^29.6.4" + jest-snapshot "^29.6.4" jest-util "^29.6.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - jest-serializer@^27.0.6: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" @@ -5976,45 +6208,33 @@ jest-serializer@^27.0.6: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.3.tgz#2435b50881f7bffdc1a66e66c64a2602c8086281" - integrity sha512-66Iu7H1ojiveQMGFnKecHIZPPPBjZwfQEnF6wxqpxGf57sV3YSUtAb5/sTKM5TPa3OndyxZp1wxHFbmgVhc53w== +jest-snapshot@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.4.tgz#9833eb6b66ff1541c7fd8ceaa42d541f407b4876" + integrity sha512-VC1N8ED7+4uboUKGIDsbvNAZb6LakgIPgAF4RSpF13dN6YaMokfRqO+BaqK4zIh6X3JffgwbzuGqDEjHm/MrvA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.6.3" - "@jest/transform" "^29.6.3" + "@jest/expect-utils" "^29.6.4" + "@jest/transform" "^29.6.4" "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.6.3" + expect "^29.6.4" graceful-fs "^4.2.9" - jest-diff "^29.6.3" + jest-diff "^29.6.4" jest-get-type "^29.6.3" - jest-matcher-utils "^29.6.3" + jest-matcher-utils "^29.6.4" jest-message-util "^29.6.3" jest-util "^29.6.3" natural-compare "^1.4.0" pretty-format "^29.6.3" semver "^7.5.3" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - 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" - -jest-util@^27.2.0, jest-util@^27.5.1: +jest-util@^27.2.0: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== @@ -6071,38 +6291,25 @@ jest-watch-select-projects@^2.0.0: chalk "^3.0.0" prompts "^2.2.1" -jest-watch-typeahead@0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz#ea70bf1bec34bd4f55b5b72d471b02d997899c3e" - integrity sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - jest-regex-util "^27.0.0" - jest-watcher "^27.0.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - -jest-watcher@^27.0.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== +jest-watch-typeahead@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-2.2.1.tgz#36601520a2a30fd561788552dbda9c76bb44814a" + integrity sha512-jYpYmUnTzysmVnwq49TAxlmtOAwp8QIqvZyoofQFn8fiWhEDZj33ZXzg3JA4nGnzWFm1hbWf3ADpteUokvXgFA== dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" + ansi-escapes "^6.0.0" chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - -jest-watcher@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.3.tgz#f5089852fc5f57ba1d956ec02d80cf2f6f34156d" - integrity sha512-NgpFjZ2U2MKusjidbi4Oiu7tfs+nrgdIxIEVROvH1cFmOei9Uj25lwkMsakqLnH/s0nEcvxO1ck77FiRlcnpZg== - dependencies: - "@jest/test-result" "^29.6.3" + jest-regex-util "^29.0.0" + jest-watcher "^29.0.0" + slash "^5.0.0" + string-length "^5.0.1" + strip-ansi "^7.0.1" + +jest-watcher@^29.0.0, jest-watcher@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.4.tgz#633eb515ae284aa67fd6831f1c9d1b534cf0e0ba" + integrity sha512-oqUWvx6+On04ShsT00Ir9T4/FvBeEh2M9PTubgITPxDa739p4hoQweWPRGyYeaojgT0xTpZKF0Y/rSY1UgMxvQ== + dependencies: + "@jest/test-result" "^29.6.4" "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" @@ -6111,15 +6318,6 @@ jest-watcher@^29.6.3: jest-util "^29.6.3" string-length "^4.0.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^27.2.0: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -6129,10 +6327,10 @@ jest-worker@^27.2.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.3.tgz#7b1a47bbb6559f3c0882d16595938590e63915d5" - integrity sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g== +jest-worker@^29.6.4: + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.4.tgz#f34279f4afc33c872b470d4af21b281ac616abd3" + integrity sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q== dependencies: "@types/node" "*" jest-util "^29.6.3" @@ -6140,14 +6338,14 @@ jest-worker@^29.6.3: supports-color "^8.0.0" jest@^29.2.1: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.3.tgz#118cf081d440d31b21989f61bfcd8b7797ca6a01" - integrity sha512-alueLuoPCDNHFcFGmgETR4KpQ+0ff3qVaiJwxQM4B5sC0CvXcgg4PEi7xrDkxuItDmdz/FVc7SSit4KEu8GRvw== + version "29.6.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.4.tgz#7c48e67a445ba264b778253b5d78d4ebc9d0a622" + integrity sha512-tEFhVQFF/bzoYV1YuGyzLPZ6vlPrdfvDmmAxudA1dLEuiztqg2Rkx20vkKY32xiDROcD2KXlgZ7Cu8RPeEHRKw== dependencies: - "@jest/core" "^29.6.3" + "@jest/core" "^29.6.4" "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.6.3" + jest-cli "^29.6.4" jimp-compact@0.16.1: version "0.16.1" @@ -6225,6 +6423,38 @@ jscodeshift@^0.13.1: temp "^0.8.4" write-file-atomic "^2.3.0" +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -6274,14 +6504,14 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== -json5@^1.0.1, json5@^1.0.2: +json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.1, json5@^2.2.2: +json5@^2.1.0, json5@^2.1.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -6354,6 +6584,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lil-uuid@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/lil-uuid/-/lil-uuid-0.1.1.tgz#f9edcf23f00e42bf43f0f843d98d8b53f3341f16" + integrity sha512-GhWI8f61tBlMeqULZ1QWhFiiyFIFdPlg//S8Udq1wjq1FJhpFKTfnbduSxAQjueofeUtpr7UvQ/lIK/sKUF8dg== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -6396,7 +6631,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.4: +lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6446,6 +6681,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6525,6 +6765,13 @@ memory-cache@~0.2.0: resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" integrity sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA== +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -6535,6 +6782,11 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + metro-babel-transformer@0.73.10: version "0.73.10" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.73.10.tgz#b27732fa3869f397246ee8ecf03b64622ab738c1" @@ -6959,7 +7211,7 @@ metro@0.73.10: ws "^7.5.1" yargs "^17.5.1" -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7003,7 +7255,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.1, mime@^2.4.4: +mime@^2.4.1, mime@^2.4.4, mime@^2.4.6: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -7032,7 +7284,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -7115,7 +7367,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -7185,6 +7437,11 @@ nested-error-stacks@~2.0.1: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -7203,9 +7460,9 @@ node-dir@^0.1.17: minimatch "^3.0.2" node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: - version "2.6.13" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" - integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" @@ -7229,13 +7486,6 @@ node-stream-zip@^1.9.1: resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -7270,6 +7520,11 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== +nwsapi@^2.2.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + ob1@0.73.10: version "0.73.10" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.73.10.tgz#bf0a2e8922bb8687ddca82327c5cf209414a1bd4" @@ -7538,6 +7793,29 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.0.tgz#db42120c64292685dafaf2bd921e223c56bfb13b" + integrity sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.1" + +pac-resolver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" + integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== + dependencies: + degenerator "^5.0.0" + ip "^1.1.8" + netmask "^2.0.2" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -7570,6 +7848,13 @@ parse-png@^2.1.0: dependencies: pngjs "^3.3.0" +parse5@^7.0.0, parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -7683,6 +7968,11 @@ pngjs@^3.3.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -7715,15 +8005,6 @@ pretty-format@^26.5.2, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - pretty-format@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7" @@ -7770,7 +8051,7 @@ prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@*, prop-types@^15.8.1: +prop-types@*, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7779,6 +8060,43 @@ prop-types@*, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-agent@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.0.tgz#72f7bb20eb06049db79f7f86c49342c34f9ba08d" + integrity sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.0" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pubnub@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pubnub/-/pubnub-7.3.1.tgz#d5b9542489bb919e843fc81c8f2540dfd6025bdc" + integrity sha512-9RSTT7zndeZY2Rkz+lm8YCiwJQVUjbpUIzuoxj7aAHoWBrcpdcGyN72ij4uoynW7bPRd4ccyR8zkzQbOtZzG6Q== + dependencies: + agentkeepalive "^3.5.2" + buffer "^6.0.3" + cbor-js "^0.1.0" + cbor-sync "^1.0.4" + lil-uuid "^0.1.1" + proxy-agent "^6.3.0" + superagent "^6.1.0" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -7787,7 +8105,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== @@ -7809,6 +8127,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@^6.9.4: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -7852,12 +8177,12 @@ react-devtools-core@^4.26.1: shell-quote "^1.6.1" ws "^7" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.1.0, react-is@^18.2.0: +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7877,11 +8202,27 @@ react-native-codegen@^0.71.5: jscodeshift "^0.13.1" nullthrows "^1.1.1" +react-native-gesture-handler@~2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.9.0.tgz#2f63812e523c646f25b9ad660fc6f75948e51241" + integrity sha512-a0BcH3Qb1tgVqUutc6d3VuWQkI1AM3+fJx8dkxzZs9t06qA27QgURYFoklpabuWpsUTzuKRpxleykp25E8m7tg== + dependencies: + "@egjs/hammerjs" "^2.0.17" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + lodash "^4.17.21" + prop-types "^15.7.2" + react-native-gradle-plugin@^0.71.18: version "0.71.19" resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.19.tgz#3379e28341fcd189bc1f4691cefc84c1a4d7d232" integrity sha512-1dVk9NwhoyKHCSxcrM6vY6cxmojeATsBobDicX0ZKr7DgUF2cBQRTKsimQFvzH8XhOVXyH8p4HyDSZNIFI8OlQ== +react-native-view-shot@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.5.0.tgz#129e92b893aca25918c6ecddc08ff44f29d70c27" + integrity sha512-+/a0zcEcCzAwuzQTU7CmwR1/bDcuy3Yj7093xI3Dhcjccb3FwxNiRyIBonsMSj3fQMmBcqV5d8DGCAeOJ5Ij3A== + react-native@0.71.8: version "0.71.8" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.71.8.tgz#4314145341c49448cf7465b93ced52a433a5e191" @@ -7944,15 +8285,6 @@ react-test-renderer@18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" -react-test-renderer@~18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.1.0.tgz#35b75754834cf9ab517b6813db94aee0a6b545c3" - integrity sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg== - dependencies: - react-is "^18.1.0" - react-shallow-renderer "^16.15.0" - scheduler "^0.22.0" - react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -7960,7 +8292,7 @@ react@18.2.0: dependencies: loose-envify "^1.1.0" -readable-stream@^3.4.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -8021,7 +8353,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.2: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== @@ -8079,11 +8411,6 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - remove-trailing-slash@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" @@ -8249,11 +8576,6 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8302,37 +8624,22 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - 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" - -sax@>=0.6.0: +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: - loose-envify "^1.1.0" + xmlchars "^2.2.0" scheduler@^0.23.0: version "0.23.0" @@ -8356,7 +8663,7 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -8488,6 +8795,13 @@ simple-plist@^1.1.0: bplist-parser "0.3.1" plist "^3.0.5" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -8498,6 +8812,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -8512,10 +8831,13 @@ slugify@^1.3.4: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== -snack-babel-standalone@^2.2.2: +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +"snack-babel-standalone@file:../snack-babel-standalone": version "2.2.2" - resolved "https://registry.yarnpkg.com/snack-babel-standalone/-/snack-babel-standalone-2.2.2.tgz#2154855c482c112036261171ed32f7892102be60" - integrity sha512-kYYfIsktDfJeYrByF184YO/x55U7rPzfXThsownEGCNBn8d1xZ8AD7NyuLS5aA1n2rk9yKQ1CZxIRHwoNkootQ== "snack-require-context@file:../snack-require-context": version "0.0.0" @@ -8550,6 +8872,41 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socket.io-client@~4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.5.4.tgz#d3cde8a06a6250041ba7390f08d2468ccebc5ac9" + integrity sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.2.3" + socket.io-parser "~4.2.1" + +socket.io-parser@~4.2.1: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socks-proxy-agent@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz#ffc5859a66dac89b0c4dab90253b96705f3e7120" + integrity sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ== + dependencies: + agent-base "^7.0.1" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -8582,16 +8939,16 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" @@ -8673,6 +9030,14 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-length@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" + integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== + dependencies: + char-regex "^2.0.0" + strip-ansi "^7.0.1" + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8751,6 +9116,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -8819,6 +9191,23 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== +superagent@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" + integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.2" + debug "^4.1.1" + fast-safe-stringify "^2.0.7" + form-data "^3.0.0" + formidable "^1.2.2" + methods "^1.1.2" + mime "^2.4.6" + qs "^6.9.4" + readable-stream "^3.6.0" + semver "^7.3.2" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8853,6 +9242,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + tar@^6.0.2, tar@^6.0.5: version "6.1.15" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" @@ -9028,6 +9422,23 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tough-cookie@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -9112,6 +9523,11 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +type-fest@^3.0.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9159,13 +9575,6 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - ua-parser-js@^1.0.35: version "1.0.35" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" @@ -9255,6 +9664,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" @@ -9303,7 +9717,7 @@ url-join@4.0.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" integrity sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA== -url-parse@^1.5.9: +url-parse@^1.5.3, url-parse@^1.5.9: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -9377,7 +9791,14 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -9396,11 +9817,36 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + whatwg-fetch@^3.0.0: version "3.6.17" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -9520,16 +9966,6 @@ write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" @@ -9550,12 +9986,17 @@ ws@^7, ws@^7.5.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.12.1: +ws@^8.11.0, ws@^8.12.1: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -xcode@^3.0.1: +ws@~8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" + integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== + +xcode@^3.0.0, xcode@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== @@ -9563,6 +10004,18 @@ xcode@^3.0.1: simple-plist "^1.1.0" uuid "^7.0.3" +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xml2js@0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" @@ -9586,6 +10039,16 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xmlhttprequest-ssl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== + xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From 55c02ad2c3fe7569fd85a78ca39476f4ef85440d Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Thu, 24 Aug 2023 15:24:43 +0200 Subject: [PATCH 05/31] feature(runtime-shell): add new shell-like app that consumes `snack-runtime` --- runtime-shell/.eslintignore | 8 + runtime-shell/.eslintrc.js | 4 + runtime-shell/.gitignore | 2 + runtime-shell/README.md | 48 + runtime-shell/app.config.js | 8 + runtime-shell/app.json | 29 + runtime-shell/assets/favicon.png | Bin 0 -> 1466 bytes runtime-shell/assets/splash.png | Bin 0 -> 13071 bytes runtime-shell/babel.config.js | 7 + runtime-shell/index.js | 16 + runtime-shell/metro.config.js | 4 + runtime-shell/package.json | 77 + .../patches/react-native+0.71.8.patch | 22 + .../react-native-reanimated+2.14.4.patch | 800 ++ .../patches/react-native-web+0.18.12.patch | 13 + runtime-shell/src/App.tsx | 7 + runtime-shell/tsconfig.json | 20 + runtime-shell/web/deploy-script.js | 92 + runtime-shell/web/index.html | 117 + runtime-shell/web/register-service-worker.js | 14 + runtime-shell/web/serve.json | 13 + runtime-shell/yarn.lock | 10897 ++++++++++++++++ 22 files changed, 12198 insertions(+) create mode 100644 runtime-shell/.eslintignore create mode 100644 runtime-shell/.eslintrc.js create mode 100644 runtime-shell/.gitignore create mode 100644 runtime-shell/README.md create mode 100644 runtime-shell/app.config.js create mode 100644 runtime-shell/app.json create mode 100644 runtime-shell/assets/favicon.png create mode 100644 runtime-shell/assets/splash.png create mode 100644 runtime-shell/babel.config.js create mode 100644 runtime-shell/index.js create mode 100644 runtime-shell/metro.config.js create mode 100644 runtime-shell/package.json create mode 100644 runtime-shell/patches/react-native+0.71.8.patch create mode 100644 runtime-shell/patches/react-native-reanimated+2.14.4.patch create mode 100644 runtime-shell/patches/react-native-web+0.18.12.patch create mode 100644 runtime-shell/src/App.tsx create mode 100644 runtime-shell/tsconfig.json create mode 100644 runtime-shell/web/deploy-script.js create mode 100644 runtime-shell/web/index.html create mode 100644 runtime-shell/web/register-service-worker.js create mode 100644 runtime-shell/web/serve.json create mode 100644 runtime-shell/yarn.lock diff --git a/runtime-shell/.eslintignore b/runtime-shell/.eslintignore new file mode 100644 index 00000000..919838b9 --- /dev/null +++ b/runtime-shell/.eslintignore @@ -0,0 +1,8 @@ +# Ignore all node_modules +**/node_modules/** + +# Ignore all build ouput +**/build/** + +# Ignore example app for now +example/ diff --git a/runtime-shell/.eslintrc.js b/runtime-shell/.eslintrc.js new file mode 100644 index 00000000..e3b203f5 --- /dev/null +++ b/runtime-shell/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['universe/native'], +}; diff --git a/runtime-shell/.gitignore b/runtime-shell/.gitignore new file mode 100644 index 00000000..c613cb5f --- /dev/null +++ b/runtime-shell/.gitignore @@ -0,0 +1,2 @@ +.expo/ +web-build/ diff --git a/runtime-shell/README.md b/runtime-shell/README.md new file mode 100644 index 00000000..24e7bfa1 --- /dev/null +++ b/runtime-shell/README.md @@ -0,0 +1,48 @@ +# Snack Runtime + +The Snack runtime is an Expo App that loads and runs the Snack code from https://snack.expo.dev or from any other app using the [snack-sdk](../packages/snack-sdk). The Snack runtime exists in two flavours: +- A native runtime for Expo Go +- A web-player for running Snacks in the browser + + +## Development + +To start the runtime in development mode, install the dependencies and start it as a regular Expo app. + +- `cd runtime` +- `yarn install` +- `expo start` + +### Web player development + +Start the runtime as a web-player by using `expo start --web` or choosing `Run in web browser` after running `expo start`. + +In the Snack website, select the `localhost` option from the Expo version picker at the bottom. This will cause the development web-player to load within the "Web" iframe of `http://snack.expo.test`. + +### Native runtime development + +Use `expo start` to start the runtime and scan the QR-code with your device. + +This loads the runtime into Expo Go and displays another QR-code scanner. Now, use this QR-code scanner to load any Snack by scanning the QR-code from the `My Device` tab. This will cause the Snack to load using the development runtime. By shaking your device and choosing "Reload" you can return to the runtime QR-code scanner. + + +## Deployment + +The runtime is auto-deployed to Staging upon mergin to main. +To deploy to production, run the `deploy` dispatch trigger of the `RuntimeProduction` Github Action workflow. + +To manually deploy or learn more about deploying, see the [Deployment guide](./__internal__/DEPLOYING.md). + + +## Loading states + +| Visible state | Process state | +| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| Blank screen (web-only) | The web-player has not loaded index.html or the logo image (this may indicate a slow network connection or a hosting error) | +| Snack logo (non blinking) | The runtime is being loaded | +| Snack logo (blinking) | Runtime has loaded | +| Update indicator `Connecting...` | Runtime is waiting for the snack code | +| Update indicator `Loading...` | Code has been received and is being loaded for the first time | +| Update indicator `Updating...` | New code has been received, runtime is applying updates | + +> Update indicators are only shown when the operation takes too long (after 3 seconds) diff --git a/runtime-shell/app.config.js b/runtime-shell/app.config.js new file mode 100644 index 00000000..0f9d708c --- /dev/null +++ b/runtime-shell/app.config.js @@ -0,0 +1,8 @@ +export default ({ config }) => { + return { + ...config, + extra: { + cloudEnv: process.env.CLOUD_ENV, + }, + }; +}; diff --git a/runtime-shell/app.json b/runtime-shell/app.json new file mode 100644 index 00000000..9f37612b --- /dev/null +++ b/runtime-shell/app.json @@ -0,0 +1,29 @@ +{ + "name": "Snack", + "expo": { + "name": "Snack", + "description": "Write code in Expo's online editor and instantly use it on your phone", + "scheme": "snack", + "owner": "exponent", + "slug": "snack", + "version": "1.0.0", + "primaryColor": "#000", + "icon": "https://s3.amazonaws.com/exp-brand-assets/SnackIcon_200.png", + "notification": { + "icon": "https://s3.amazonaws.com/exp-us-standard/placeholder-push-icon-blue-circle.png", + "color": "#000000" + }, + "splash": { + "image": "./assets/splash.png" + }, + "developmentClient": { + "silentLaunch": true + }, + "platforms": ["android", "ios", "web"], + "assetBundlePatterns": ["**/*"], + "web": { + "favicon": "./assets/favicon.png", + "bundler": "metro" + } + } +} diff --git a/runtime-shell/assets/favicon.png b/runtime-shell/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e75f697b1801871ad8cd9309b05e8ffe8c6b6d01 GIT binary patch literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy literal 0 HcmV?d00001 diff --git a/runtime-shell/assets/splash.png b/runtime-shell/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..def9ff1ab7dffaf356882a5ad7cc523b4ff92361 GIT binary patch literal 13071 zcmeHtc{r5c|Mw6H*(#I>V<$_N$&!6A$i8K-ga(t!z6)vWhO#foAbT=K_9e+SgBj}# z3fYaFWPPU3^ZW04uJ3bQ-#?%0bN)KlIq&!Dyw2;q&-*_2eV-U(LmdV>4mtn;z@Q5O zn*sn-1OR|G>e2;r%dd;OssO+Rfbo5Et@HEq-QC^L&`?oP(VI7KK6&!w=g*&KXJ*L3di;IhoA3vs`piov;#$vI5{``rHi@SXJ zG9@LYi;K(Z>S|3*4IdvLGc$8iQquA9@#yHNrlzK(q@;m?fryC6moHy7Ha1?octJ%) zb?w@<)YR0Ilat2AMlmrlLqkI%k(ia0b+wSs~I zD=RA?5Lj7RIW#n+qN38%(-R&Ze(BOBdV2b(sHj`FZaF$SmX?-sa&p?*+8!Jn(9zK` zFfhc##9%NOB_*ZV*;xw<3x0n7&!0c9tgN`Yx?aD2Jufe>qoYGdM`vto?C9u-k&)5I z$LI9)G(A0ib8}NjNa+6k`_t3YFc^%Lm34A*Qcq8>sj2DCojaYKo!i^nzP`TH)YR40 z)ejy#n46npV`IB;;lld*`r+Z>>({R%A|ihO{@vBpB`qzjuC6{jJiM^5U}tB?&COk2 zUOqoR&%?v>{rh)0IXN{owdUsL;^N}W%*^=scrP!njEoE<5;-$70s?_JIXTtU)yc@nSXx>pCMLdm^~&1XT2N4MYHA9NMk^{R4h#$! z85!y7>bADFe*OA2B_#!q#|H)mE-x=fM@Nf`ix(Ca4h{~!eEIUnj~}L{rtjas=iuPT z&CPxI@L@|!OK@=Tl`B`4mX;6*#Kgn|iA3V%<+ZV~85tSD;c&9DvfbU?o}Qj*X=xP| z6<4obZEI`O*4EC>&K4FH{`BcnNlD4p*4Bp)ANudBNYik7r1pNH`%+1XoJ$e)n z5a8_Wtg5Qo(9i&dLUVF*q@<)GBO}Yo%AP)b>fqp@p`jr!FW=waub`k15)y(!p`JZ^ zmY<*h?%liR&!2mEc-Y(9!{PAQ*w~qi%U1vZ$v$1My174Ly@P^+9P{DHXVn{*D9N?| zvV>1YUib?H;5i@HHYP{ge_JO0#rcoY{j1M^l*i& zJv&$0ABx}J_?A0O{okbO@O*+toP7gRc(D0CuXrLx1Ry<}hhN1}t1%wUW~p?G0M4dK zXAsB5B{9Iv`t-5a+tC{|Tb>`B_vv}nB0IDaXlr=W1*oZ6;`KnR!r33yE~Wj{h}A}1 zM`iGn5fZ@#KywM^x`f(E-3njc5qvJZE6$rhc7E&X+T%{=|q21Z)^7E z(s#eboPfpC*-WoRg(ZbN-)(_=n%JTSW|r-WW){?rWZ`}SB^>UL@96~Mge7Pnnu}C= zCPu^Izp1*frD_i^@C{4+j^)H%SK81cn++TW+gL4hWJpaJaV#0_se`*TkL(S~*Ezgj zl6+9oLgWT9>Apy$$#$iOx7=YMt|#jr6%d#w}J&*jpKxmM`n(a=c~n3|q3FtH8{n>rj`D6-f9g4qevvcPOdleZ5Qe zMAEH34e_JEK0d3|LcSnoNP)pA#-}8d-liJWPSuCHEkih*KU?dEJAC%+cuv|zen$29Z=*)^_X>6hf0(Ix}7EqQIU~|h#EHFXtw+5JBp~Bw4efk=hbgcTm zE>s{e&65=J`}~tn`-RslUvEtrZzY%A0M0$NW&;SQ0;x*dZzg-@8+YEvT!#RrPUZK`6oNE)PZM!M#a~ zg`Iq+u=maTucu+P4g&+cO@Yu0VC1HM0DWbnatt(Pug~F2#gFp!ipM`bjawGP#W|dR zORM?=TfWJRXyqlP6Lp=4pKQLYG^-~ z?0Ly<`{p5Y(r{ZzjhFXZg>5F;SQ-tm>2ORXYUexO?2N7YT2h$C`hkQ17wa45I^}P& zk@P%35!YY&agf5pQ>nmCnl%WY`@U$`Q!jy)33-}3{%*o6PyMd}Q*0=iLLnSl^;jJy zXoC`%gS9`4CGKiAu&j z$g$wvAB8|nZ!XF=UI#g|j~|Zx!T>Teh=Ti1WjpSscF$_6>=n1=e~@c&jM^R_8otQ> zcF5!o4RFr6E(t^4kE*z#{?Fy2x`knZ7lF^S5-T5lna%fpvRc**Pd8|Y8Y`zyrb_f_ z%nI{X#g>I9X1RR<7QRgkQwKM%CVbs)lUitfm5CCq9d22?@kHs|{kg6K92>Q%4!*a7 zujf!2(-ENHXZYbNhpb_qCK`N~|Kf6s%ZHhTi7u@9t?cJk`9x$2IzpRyT5&Ajqy8C( z-BoPCu8~AE+#kEvKiT`YdyP%e&OlRVC4-J-JEJKr*?#&^Aw}z2DiE;b#nf)k)ZvJHbSAe%ruHmxK?1v87J|5t$mzx|mC2iOB zIfzvswW`HF^6(kLpxHgX_}O9&4r_KbaPu4?%n#;%yrW`Mauzvb5fU2@tTRB)1E${U za@g_$XQXD^LUH~_VJb_+kES+CMjzO71q=0H=dPP)PUWIZQi-ZEJ(yybo~JGSz0LRo31~&6 z0k`gp2d+24{J2$>{1;+-ul~prsU?Sf-c!HIVs|}*mM5il>rJ3yGZWRoz}p8!mN?d?Cz2#8JNEFM|- zCr2=z?;x|nv$fw^9=SA4y zPf(xO3y~(?fkXCAwt-AZ-cLNMMQ77-yr08SB;JG{UyCJECTAkyU`#va2Gd-XrzZAu zy_IAqyKQd-&Nuti?|RPQBSn+}f0i5LX{NV1mmR#>{NBdyftxEU{e2=M&i@wM{?M#j zG#uPl?Tg>X)F)T3lScDE4}2cUSwAI&s&n{tZDUJbQkC!m5zmiw8_xnbZXJGU34BHe6@q<3BBJD$UhuzT zMqHZMkD0w@Ab%y2<_uQ-SQ%M~GT=*)p4h46*TG$4p|#&GdB($4`eUy%noPfW?dRk% zEkU0sje~TgOvrH#kMjZ_9gj2HCr#1Yk_jyA&g%YP!#yS#YjLoCnrGJWRRQzcd7h?J zZKyn`3vqfyEEkAGPNSxcIPkYa{1`YV!Ei_hqa#6G@xb2lLK7LnsBQU?g|iZ@R=1EE zv}d>^>|KU{WDs0XsfpNp#`ab+jX@?prtGq(sxZ8`O3s}(P#Zotxc`IgisHWe;S=4M z64Gd&FYXO0BuQ4VBf`^5Rs;@tu<<3gD!rAG=^m__jhEfPUDpxkD*|m!>O7VEHhe!E z9#se(`wr3h`c8kgx?9d0=HBr|g}uZGdQ1!T(CWD5R-(UD7Xt>*d*E2|@zg)WgMdk- z(J~iYH7ewltb}$!{{da&SZjou2X@LKw|!XEAT1I@o8ELI&(%~o$kgq-6STUE|D{r4wn zIcOm^;QdC)D2EMaIHR6g9g2lb?N?z39*$={7JtdqOaO4sZ^|m$&t-Z_$wcDo`>>XP#6nNEJ%_3p%Gi9+_dBt4L zjB_F6P7fZgdI^mvj~O;5KA1d&qxT-)xto~G@(2@RXn*KV2*-zoz9-kA#2o&FmLAQ1 zz5&c-I7AAal6Wvq1fp?dCt==%Lzy0nl{X@bF5F;#9`2VDJ4!4p`$AVQi@@$$Ai6i` zejzuS8<3%>7_dC7`_(8sJoZdlx&k%JgWu>C>1eAIWUz-`jmd}{zy$|eBQ1|^y6ewT zl)$!ibourz;+OVju6eOLQnAp2U<}@s0jvdOEjd*kdH^kUnrzS%234RKU$oKlWO3md zS#9oQ?eim-M$6{-p^;N@r=oLzYFw2By(~=r8wz%Pv^`VbbikUWm`&QJMXwqG&N>08~|FX7{*gvuPui#YqpojY}8xLS*F%x>{I{21+mz2Lkb5!L{b-HYw3)Pf6nHY)6uP-l9aOwBeSFFiGh~h2rIE*`31->X^J<72x#mpx zb$aamJTC3QjRi)%5-kshccp`_Nq#78^t}4vvj;ck!uWf3$pDrj1|_2>;a7w-!N7eb zoWjN0wn&%dOW?;rLZ=2R>5j}Mgy$iO?Vn+<;9c)PwN8wfvG2@{EsoCXqb+qTAx8lr zve2(5i|u^}^l(TQV=DIMa$t#0D5mLLB&zIW!g2jumV+uhG~r_`KkU#mqT>MtOU&C4 zHh+c2vL?7-OBuy%zzYUUzDl^H(^V5BgA66qcFqhAnS#pf=9jEY#3xUo`q! z%GxFY>CMRfeQntfK^`Ja@UFSS*57Td)_QnfcFNryk+jQ<)34S?ETYrNX(Q8mCrtyq za~rmpD4mtXaH%W9Y-z~lR^C)pMMw&rGVFS*V28)Ob5}UTE*gQgU7qeV%o>Te{Iy|B zgK1Ghq=xwy6k+ZU0^j$#^8&XU^1aVuTALjWYCXkY?sYiJ4&HlZ_bxpu5A=5Y?F+SL zpKKoBpDfU>wz$EP@2`imnU=JMbS`3cS|LxNGT**uFWY(@UxY&{40&^>m%m44(h`(@ zm$&qo&X0UUl_u-J!i~!+1cX?oo!@3Qpsq1rIP|XW~ihzDi_K~%a zWc}J^J&L+qaVV#;{m^;>DzoGm>OUMN=x3fps9&r-$Sl_;L-*as1u%xf&P6aEvuE+k zSF&z;sy!_})XRonYc|q#4NP-<*s?6N^=RtB;4PDLXBG`}t5Q@91O(NbZ>u!liykfD zW|+tO2E1HRxHPFOQe*&5OvMIWPj0M~T~WGuWQZZkmRRvnx(4ZG_dKkR@b-Neer9R3 zTdOl%z907#dq_1bENMajzeiaUF3yEn$gYhQ>gcoald^EotIV0Pfkg&SjLUg*N3VYw zv#0IXdf9Qs+f3H8(Ecaploz<~U<$ozLP$>7PlbZ8Vj5P}T<`xJ27@;=$!=SLuf4T- zl*II*jLp%PZ@OJM$X>OEe@%}0%VeKV7%XT=08wv`R z`n%gZF2@1eBidaX3wr+>DQce97r(cz{_8b{tj&|;fN*aYUMqCeIBHXU=E3SPf88qx z7`p4Z%kQ#$NZHyY6||7RMZ+TEk)DigV~!e>N#A1BahOcIF|!xRz>Ls1@WWZhs9lDZ zlqwfo4=AjPvTs0yvX~G~^bjs1O+8oNDEoRX+=4?oj+9rLW5SV{rB7sc+V>RJb@Adf zyg+I<_LUrVL&9>1EaM&GOvlX0PNg;+j$6D7qj`#(zsby}6cJZ^B$!oR6%D`kAxPI1 z_6e$#(Gc~Uw8;w+lB>xERh$^4vsnEdvWVe}^5g;}>H%j~*DVx9Wt-k42Eo4C<%j6p z)xlY_c@sQntGS-AHq2Vp=)j(XnmY%4UII-Y-V)07qcqB{b(L=7ROKkWBS(9X2U@DS zAS;m7a>axYT#U(lSKM%X5&Sfmb<&Suj0$q<7HS~(i3poPmXr#R7zG(8+RbfGJ|IyW zaax2?a8)<0wE|N2faDxFED4`}3ucXw#Nlew)K7juWmw~6g9LWM4mLLHRuvQH4})Zt zw>qcZI+d%(JGp-gZJfY~8@Tt!<-D!5X^6WMVPeC6C+6Ll)@@egRxxGW(;+>EfiX*y zZo0xp#R#EJXLUI9&C0IN;_Kr}kC!mNhZK~!qw~E~me%(VFSMo`wQilZs&E%$RA3bK ztQwU^4mro=*Guum-Thx$fPLyr6y4VBP_uX9#tiz?)ny*IVxW(}lmp8hSS=(QOqnm% zU!pi&Rpx;&<{0$z3etM(+{9VVzR^lHh&N+{QchL>oj&H;-MVI zjT)RosZy2r;<eoSfXS!gbI zJAj(ijsKm_sWyevJ#nZR-|_pt?%c|b5Wgy0WWZJW#>RJI^e?;K zdaL~BL0Vm?$zp>*2L{g0Ac?`@|LL$Ni{_j^4wy&m6&ZvCTr4A{B}ZDk3nBcS>YZ_l z?gQ^)1M$^J(Fe;9Eu3@F=EU-M|L80TODm>)vlZGp(NWeX4J)m;qW|k6$PRGg*Mz2C zbuwN%7y0aH(QrST5agOc6ayBECxhIFH9n37iCbAP;?e?xMhD4+$0q2mZ#wh9%BpDH zP}43J3p_AOVtK${UNK96d2d0yAVTw%roW^Qp`vW6#6UbO{(r!NcJ&JyeSINU67&H= z&|30YHbf2H6Xq0N12lu0jo*sQnz&8dGL*1aY>+Tc7T~SL7@#{cQ$PEtl+$ft9#k&+ z8)}A_|7SYVH=?AGoDveha{GHEq}LOfTK^u~-28HD1VQqL}X;C^1lO zp(*?250-Q_v?Z*Q-}Ww%;}wneQzy}XO+uAEl{DW>(g3S)0OHe6A=!Ezc#z#G<@V9xp=7f?-r`3hc$Y_i z8Um>pE|IYqKJJv>%tT+)&>=E!eqcs~1+o~|l*dAAkL|5a1;M}a&ERH%Sx|kqO_@h0 zgSU8rj`%btpTUy*wi?PtvV5-`$e^55@yiI8F4@y2>- z``KN`fnq80!eqD-z`O*D^#g$1mJ*)rlXEn^D~OimkL%Tkb^_YV%dT+R&2u<3o2~S= z`pc_ikxDQUm~OEFBhzCSZhDqKCD)`Z z<2WW61kg+AyXxk5)7 z^FdmSOC?a))TEog0tu_-Tv15jd_>r zKGI9+%=Sl+tV|nCF1j@xiX&WP>9rsXR9(y>CQ@gkW4Udfnz~2A50`{j9#k*ZuSa$r ztj_tU7gs)aX4kLbAhUJADZtN7PDE;2Y=*Bo5G+ZLploX39rD>!W$-{W17%@vg}Gv& z20qzkT&XY$IqX7PJwjqEEdVAW zEa$g*bMNr9#3qnCWTyWZ5UZwd|KJCAsbY|Ln$+%zB3T*FU$U?e$vgCQ%m@I^Mdsx$ zp(eP9%qjEwYci);@4P78(v3J9?Bw3IHx_4k=o@jP;R2Zi7jl>OzMEzY$>KaV?_LpU zPbMSNix;Sl#BhctFQ(girJ~CQ%QAB<$%}(VU^U(@u8CxokNx6<6;=+I(t!Cnew9@TjniTtoAcvL1xX78rK`Ca7~$VvdqHdX{__BtMwvX~cC2(e`XcPZH;cNL_i z`;f;pK!`0Dm_H3Qc~GW&i1N_{H`k_nGd{^iZ4agq$!(KOZR2HY@`>}C>b|SF zv@26vvLlsgUN72#k{qckZ+Y`{A;KCuI^t897f-KXO@`vHMEDf;&w{+2?&7a#oxHxx zYS$r(Qls{(U3KBJ)=-rw9K`(oYK`&n!yfM{4}Ry~Y6c^>Qcgpr0`!Yk2WYNGa%%nr*Ko>tOj#}+SF=h>B;rW>77WCK{kWo9D^m=DEv}sjf z--bAsj8>s|h?TY|;rE25_PtXemKRQL;n9wOWDufpDV1YVX6#BJ0Zj|AJ)td|Jvn<0 z%do88HU0?=G9{aQ|5K^kQfseXLMjGGl~|7kfPO$z_pHb$kt^Zkgbt8ex?v%d`v!$+ zYoWUfTcQF$`(J!CYgvgl#vjB2q+AQj@Fp44mi=FINTZ33Qur}Jz`zYtpBc#!ez{}o zCT+`R%Nvggtycj^(vQG4W6#GH;m~7U@+2%rMI_Y-&97+pZGs~8ZQlWSU|v1J3Lg=5 zO|`FzNQq=R_M^Sm1Yr(Z*n_gL+brgUDms9dn?-J)MiHi|)u9DD&s#*gK%qvsCilt!#b>0W^l}D`y&6aG?CF-1Onb z!7^ntYZge-i@eYbX22|j{8K9TX^<9SQ5w|*21FGtnpA2#gvx0V&I%iC0Z~g>k$s0| zFu~(Ic#WoxzPoi6BZe5FL87g<>3c#a!?j4#ti9S4Rg1iT_=Kt=&0xqsQxw(p= zc03Z^i`m&+8n%@PF@f0U1ty_yEfujT51u`#h|$vhq8MYB%>Cz1Z`R}TUTO{vS&=z6 z#F(Cb<)EKWx59C7+mFHDyCEuP@TKXs)5N}mRX0~z9D19fBo07auxvnE9h8WB1(yQg z69=pI13M^Kn*?COVe%dNTNAa~ldjMvv=zFzvMCF%r506h_1zRyEPh&P1po&I?f18$ z#Do6FdY?oYPI~vbb_GN3c}h-Y)d00uq)|0_yzkFMfZ8l+bRlo6h!os! zNfAE0bGmvU`UKj4kH81mswRzA7#G3DttrAa@^a$EI#bXwj?{qepHn18TY}+Wt`I;9 zJ#%&C5bpMU59NG!{VG7%H^|wSu=s;qa}IKTMsRbW1)S8|nQ2cuWM-l>4HPKCAHVf9 zLtE)E+_!xx%nLBCX!Ke==u1YG=6?aar>c<{Kj=fE43640{Q*UyX7yGwrp3t0GZnI; z@j68D{mpkbph^}JfcKt3`+@pf(BoEJfZE!DsPY%72^8t+f;S7mo>*RS^jq``N{+FW z9dPMoP?0LE-j5EjY;Jp%yQWG8j%sP)0lW_hDmrO7%KWVa^TIxFycEuUMUzZq9OdjP z$qv}+M$!2MEjSVqIj;e>T!Sno=Zy$?Tx@_X^T{h@ipQwRlNv`r`#5P-C<&kDp~4Sf z{&k=iMi5=40tC<9Hm$c}a3~_ZU?=mYLbtg2G(&7p)0+Wm$waYJXw!rs;Aflf_<^1$ zL1Ld4knyPnmyRw=PXvUs5X*bBaASub)B){pNuvoATu|bP34rHe4eRPbnNu^g$yW=| zjv|e6A8bqrtdh^0hhCA8HUkz$eojRi+MKM&_)F>?3sc_ASOw0m8i9!RFdh!Z$j&fz z6QnMOsk-_z38?SDx92Cf{QUF!H;?D{kN8xG#{tjQk}}b`Mq(7kjFrAP2L>frDxcAX z_xDr;Nu$s42dlz>KB9wtg>o=qW{^g0z)`hZ_U z4)&+ly$LEgG-@%hTl}O^9{jhrHY|K^|nGX_vJZ>avJ j@rbiF-{}9_mCtZ%)~QaIYGhvgUo%}TLvWSG!-)R{Hyr<| literal 0 HcmV?d00001 diff --git a/runtime-shell/babel.config.js b/runtime-shell/babel.config.js new file mode 100644 index 00000000..aba222a2 --- /dev/null +++ b/runtime-shell/babel.config.js @@ -0,0 +1,7 @@ +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + plugins: ['@babel/plugin-proposal-export-namespace-from', 'react-native-reanimated/plugin'], + }; +}; diff --git a/runtime-shell/index.js b/runtime-shell/index.js new file mode 100644 index 00000000..cecaaf3c --- /dev/null +++ b/runtime-shell/index.js @@ -0,0 +1,16 @@ +import { registerRootComponent } from 'expo'; + +try { + const App = require('./src/App').default; + // import App from './src/App'; + + console.log('app', App); + + // registerRootComponent calls AppRegistry.registerComponent('main', () => App); + // It also ensures that whether you load the app in Expo Go or in a native build, + // the environment is set up appropriately + registerRootComponent(App); +} catch (error) { + console.error(error); + throw error; +} diff --git a/runtime-shell/metro.config.js b/runtime-shell/metro.config.js new file mode 100644 index 00000000..efb3e786 --- /dev/null +++ b/runtime-shell/metro.config.js @@ -0,0 +1,4 @@ +// Learn more https://docs.expo.dev/guides/customizing-metro +const { getDefaultConfig } = require('expo/metro-config'); + +module.exports = getDefaultConfig(__dirname); diff --git a/runtime-shell/package.json b/runtime-shell/package.json new file mode 100644 index 00000000..533beee0 --- /dev/null +++ b/runtime-shell/package.json @@ -0,0 +1,77 @@ +{ + "name": "snack", + "version": "0.0.0", + "description": "Playground for Expo!", + "author": "exponent.team@gmail.com", + "private": true, + "main": "index.js", + "owner": "exponent", + "scripts": { + "start": "expo start", + "web": "expo start --web", + "postinstall": "patch-package", + "lint": "eslint ./src ./types", + "typescript": "tsc", + "test": "jest", + "deploy:staging": "EXPO_STAGING=1 expo-cli publish --clear", + "deploy:prod": "CLOUD_ENV=production NODE_ENV=production expo-cli publish --clear", + "deploy:web:staging": "node ./web/deploy-script.js", + "deploy:web:prod": "CLOUD_ENV=production NODE_ENV=production node ./web/deploy-script.js" + }, + "dependencies": { + "@react-navigation/drawer": "^6.6.2", + "@react-navigation/native": "^6.1.6", + "expo": "^48.0.19", + "expo-analytics-amplitude": "~11.3.0", + "expo-asset": "~8.9.1", + "expo-barcode-scanner": "~12.3.2", + "expo-constants": "~14.2.1", + "expo-file-system": "~15.2.2", + "expo-font": "~11.1.1", + "expo-keep-awake": "~12.0.1", + "expo-linking": "~4.0.1", + "expo-random": "~13.1.1", + "expo-router": "^1.5.3", + "expo-splash-screen": "~0.18.2", + "expo-status-bar": "~1.4.4", + "expo-updates": "~0.16.4", + "path": "^0.12.7", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-native": "0.71.8", + "react-native-gesture-handler": "~2.9.0", + "react-native-reanimated": "~2.14.4", + "react-native-safe-area-context": "4.5.0", + "react-native-screens": "~3.20.0", + "react-native-view-shot": "3.5.0", + "react-native-web": "~0.18.10", + "snack-runtime": "file:../packages/snack-runtime" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@expo/spawn-async": "^1.7.2", + "@types/diff": "^5.0.0", + "@types/jest": "^29.5.4", + "@types/pubnub": "^7.2.0", + "@types/react": "~18.0.27", + "@types/react-dom": "~18.0.10", + "@types/react-native": "~0.70.6", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", + "babel-preset-expo": "^9.3.0", + "eslint": "^8.20.0", + "eslint-config-universe": "^11.2.0", + "jest": "^29.2.1", + "jest-expo": "^47.0.1", + "patch-package": "^6.4.7", + "postinstall-postinstall": "^2.1.0", + "prettier": "^2.4.1", + "s3-deploy": "^1.4.0", + "semver": "^7.5.1", + "typescript": "^4.9.4" + }, + "jest": { + "preset": "jest-expo" + } +} diff --git a/runtime-shell/patches/react-native+0.71.8.patch b/runtime-shell/patches/react-native+0.71.8.patch new file mode 100644 index 00000000..5b8fcaed --- /dev/null +++ b/runtime-shell/patches/react-native+0.71.8.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js b/node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js +index 7402bbf..0ba2338 100644 +--- a/node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js ++++ b/node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js +@@ -29,4 +29,16 @@ const requireNativeComponent = (uiViewClassName: string): HostComponent => + getNativeComponentAttributes(uiViewClassName), + ): any): HostComponent); + +-module.exports = requireNativeComponent; ++ ++/** ++ * Cache React components to prevent "ViewManager is already loaded" errors ++ * when loading a different version of a package, with Snack. ++ */ ++ ++const cache: any = {}; ++const requireNativeComponentCached = (uiViewClassName: string): HostComponent => { ++ cache[uiViewClassName] = cache[uiViewClassName] || requireNativeComponent(uiViewClassName); ++ return cache[uiViewClassName]; ++}; ++ ++module.exports = requireNativeComponentCached; diff --git a/runtime-shell/patches/react-native-reanimated+2.14.4.patch b/runtime-shell/patches/react-native-reanimated+2.14.4.patch new file mode 100644 index 00000000..699ea37d --- /dev/null +++ b/runtime-shell/patches/react-native-reanimated+2.14.4.patch @@ -0,0 +1,800 @@ +diff --git a/node_modules/react-native-reanimated/plugin-standalone.js b/node_modules/react-native-reanimated/plugin-standalone.js +new file mode 100644 +index 0000000..3d3cebc +--- /dev/null ++++ b/node_modules/react-native-reanimated/plugin-standalone.js +@@ -0,0 +1,794 @@ ++'use strict'; ++ ++// const generate = require('@babel/generator').default; ++const hash = require('string-hash-64'); ++// const traverse = require('@babel/traverse').default; ++// const { transformSync } = require('@babel/core'); ++ ++// All babel imports should be used from `snack-babel-standalone` when running this plugin inside Snack runtime ++const { generate, traverse, transformSync } = require('snack-babel-standalone'); ++ ++/** ++ * holds a map of function names as keys and array of argument indexes as values which should be automatically workletized(they have to be functions)(starting from 0) ++ */ ++const functionArgsToWorkletize = new Map([ ++ ['useFrameCallback', [0]], ++ ['useAnimatedStyle', [0]], ++ ['useAnimatedProps', [0]], ++ ['createAnimatedPropAdapter', [0]], ++ ['useDerivedValue', [0]], ++ ['useAnimatedScrollHandler', [0]], ++ ['useAnimatedReaction', [0, 1]], ++ ['useWorkletCallback', [0]], ++ // animations' callbacks ++ ['withTiming', [2]], ++ ['withSpring', [2]], ++ ['withDecay', [1]], ++ ['withRepeat', [3]], ++]); ++ ++const objectHooks = new Set([ ++ 'useAnimatedGestureHandler', ++ 'useAnimatedScrollHandler', ++]); ++ ++const globals = new Set([ ++ 'this', ++ 'console', ++ 'performance', ++ '_setGlobalConsole', ++ '_chronoNow', ++ 'Date', ++ 'Array', ++ 'ArrayBuffer', ++ 'Int8Array', ++ 'Int16Array', ++ 'Int32Array', ++ 'Uint8Array', ++ 'Uint8ClampedArray', ++ 'Uint16Array', ++ 'Uint32Array', ++ 'Float32Array', ++ 'Float64Array', ++ 'Date', ++ 'HermesInternal', ++ 'JSON', ++ 'Math', ++ 'Number', ++ 'Object', ++ 'String', ++ 'Symbol', ++ 'undefined', ++ 'null', ++ 'UIManager', ++ 'requestAnimationFrame', ++ '_WORKLET', ++ 'arguments', ++ 'Boolean', ++ 'parseInt', ++ 'parseFloat', ++ 'Map', ++ 'Set', ++ '_log', ++ '_updateProps', ++ 'RegExp', ++ 'Error', ++ 'global', ++ '_measure', ++ '_scrollTo', ++ '_setGestureState', ++ '_getCurrentTime', ++ '_eventTimestamp', ++ '_frameTimestamp', ++ 'isNaN', ++ 'LayoutAnimationRepository', ++ '_stopObservingProgress', ++ '_startObservingProgress', ++]); ++ ++// leaving way to avoid deep capturing by adding 'stopCapturing' to the blacklist ++const blacklistedFunctions = new Set([ ++ 'stopCapturing', ++ 'toString', ++ 'map', ++ 'filter', ++ 'findIndex', ++ 'forEach', ++ 'valueOf', ++ 'toPrecision', ++ 'toExponential', ++ 'constructor', ++ 'toFixed', ++ 'toLocaleString', ++ 'toSource', ++ 'charAt', ++ 'charCodeAt', ++ 'concat', ++ 'indexOf', ++ 'lastIndexOf', ++ 'localeCompare', ++ 'length', ++ 'match', ++ 'replace', ++ 'search', ++ 'slice', ++ 'split', ++ 'substr', ++ 'substring', ++ 'toLocaleLowerCase', ++ 'toLocaleUpperCase', ++ 'toLowerCase', ++ 'toUpperCase', ++ 'every', ++ 'join', ++ 'pop', ++ 'push', ++ 'reduce', ++ 'reduceRight', ++ 'reverse', ++ 'shift', ++ 'slice', ++ 'some', ++ 'sort', ++ 'splice', ++ 'unshift', ++ 'hasOwnProperty', ++ 'isPrototypeOf', ++ 'propertyIsEnumerable', ++ 'bind', ++ 'apply', ++ 'call', ++ '__callAsync', ++ 'includes', ++]); ++ ++const possibleOptFunction = new Set(['interpolate']); ++ ++const gestureHandlerGestureObjects = new Set([ ++ // from https://github.com/software-mansion/react-native-gesture-handler/blob/new-api/src/handlers/gestures/gestureObjects.ts ++ 'Tap', ++ 'Pan', ++ 'Pinch', ++ 'Rotation', ++ 'Fling', ++ 'LongPress', ++ 'ForceTouch', ++ 'Native', ++ 'Manual', ++ 'Race', ++ 'Simultaneous', ++ 'Exclusive', ++]); ++ ++const gestureHandlerBuilderMethods = new Set([ ++ 'onBegin', ++ 'onStart', ++ 'onEnd', ++ 'onFinalize', ++ 'onUpdate', ++ 'onChange', ++ 'onTouchesDown', ++ 'onTouchesMove', ++ 'onTouchesUp', ++ 'onTouchesCancelled', ++]); ++ ++class ClosureGenerator { ++ constructor() { ++ this.trie = [{}, false]; ++ } ++ ++ mergeAns(oldAns, newAns) { ++ const [purePath, node] = oldAns; ++ const [purePathUp, nodeUp] = newAns; ++ if (purePathUp.length !== 0) { ++ return [purePath.concat(purePathUp), nodeUp]; ++ } else { ++ return [purePath, node]; ++ } ++ } ++ ++ findPrefixRec(path) { ++ const notFound = [[], null]; ++ if (!path || path.node.type !== 'MemberExpression') { ++ return notFound; ++ } ++ const memberExpressionNode = path.node; ++ if (memberExpressionNode.property.type !== 'Identifier') { ++ return notFound; ++ } ++ if ( ++ memberExpressionNode.computed || ++ memberExpressionNode.property.name === 'value' || ++ blacklistedFunctions.has(memberExpressionNode.property.name) ++ ) { ++ // a.b[w] -> a.b.w in babel nodes ++ // a.v.value ++ // sth.map(() => ) ++ return notFound; ++ } ++ if ( ++ path.parent && ++ path.parent.type === 'AssignmentExpression' && ++ path.parent.left === path.node ++ ) { ++ /// captured.newProp = 5; ++ return notFound; ++ } ++ const purePath = [memberExpressionNode.property.name]; ++ const node = memberExpressionNode; ++ const upAns = this.findPrefixRec(path.parentPath); ++ return this.mergeAns([purePath, node], upAns); ++ } ++ ++ findPrefix(base, babelPath) { ++ const purePath = [base]; ++ const node = babelPath.node; ++ const upAns = this.findPrefixRec(babelPath.parentPath); ++ return this.mergeAns([purePath, node], upAns); ++ } ++ ++ addPath(base, babelPath) { ++ const [purePath, node] = this.findPrefix(base, babelPath); ++ let parent = this.trie; ++ let index = -1; ++ for (const current of purePath) { ++ index++; ++ if (parent[1]) { ++ continue; ++ } ++ if (!parent[0][current]) { ++ parent[0][current] = [{}, false]; ++ } ++ if (index === purePath.length - 1) { ++ parent[0][current] = [node, true]; ++ } ++ parent = parent[0][current]; ++ } ++ } ++ ++ generateNodeForBase(t, current, parent) { ++ const currentNode = parent[0][current]; ++ if (currentNode[1]) { ++ return currentNode[0]; ++ } ++ return t.objectExpression( ++ Object.keys(currentNode[0]).map((propertyName) => ++ t.objectProperty( ++ t.identifier(propertyName), ++ this.generateNodeForBase(t, propertyName, currentNode), ++ false, ++ true ++ ) ++ ) ++ ); ++ } ++ ++ generate(t, variables, names) { ++ const arrayOfKeys = [...names]; ++ return t.objectExpression( ++ variables.map((variable, index) => ++ t.objectProperty( ++ t.identifier(variable.name), ++ this.generateNodeForBase(t, arrayOfKeys[index], this.trie), ++ false, ++ true ++ ) ++ ) ++ ); ++ } ++} ++ ++function buildWorkletString(t, fun, closureVariables, name) { ++ function prependClosureVariablesIfNecessary(closureVariables, body) { ++ if (closureVariables.length === 0) { ++ return body; ++ } ++ ++ return t.blockStatement([ ++ t.variableDeclaration('const', [ ++ t.variableDeclarator( ++ t.objectPattern( ++ closureVariables.map((variable) => ++ t.objectProperty( ++ t.identifier(variable.name), ++ t.identifier(variable.name), ++ false, ++ true ++ ) ++ ) ++ ), ++ t.memberExpression(t.identifier('jsThis'), t.identifier('_closure')) ++ ), ++ ]), ++ body, ++ ]); ++ } ++ ++ traverse(fun, { ++ enter(path) { ++ t.removeComments(path.node); ++ }, ++ }); ++ ++ const expression = fun.program.body.find( ++ ({ type }) => type === 'ExpressionStatement' ++ ).expression; ++ ++ const workletFunction = t.functionExpression( ++ t.identifier(name), ++ expression.params, ++ prependClosureVariablesIfNecessary(closureVariables, expression.body) ++ ); ++ ++ return generate(workletFunction, { compact: true }).code; ++} ++ ++function makeWorkletName(t, fun) { ++ if (t.isObjectMethod(fun)) { ++ return fun.node.key.name; ++ } ++ if (t.isFunctionDeclaration(fun)) { ++ return fun.node.id.name; ++ } ++ if (t.isFunctionExpression(fun) && t.isIdentifier(fun.node.id)) { ++ return fun.node.id.name; ++ } ++ return '_f'; // fallback for ArrowFunctionExpression and unnamed FunctionExpression ++} ++ ++function makeWorklet(t, fun, state) { ++ // Returns a new FunctionExpression which is a workletized version of provided ++ // FunctionDeclaration, FunctionExpression, ArrowFunctionExpression or ObjectMethod. ++ ++ const functionName = makeWorkletName(t, fun); ++ ++ const closure = new Map(); ++ const outputs = new Set(); ++ const closureGenerator = new ClosureGenerator(); ++ const options = {}; ++ ++ // remove 'worklet'; directive before calling .toString() ++ fun.traverse({ ++ DirectiveLiteral(path) { ++ if (path.node.value === 'worklet' && path.getFunctionParent() === fun) { ++ path.parentPath.remove(); ++ } ++ }, ++ }); ++ ++ // We use copy because some of the plugins don't update bindings and ++ // some even break them ++ ++ const code = ++ '\n(' + (t.isObjectMethod(fun) ? 'function ' : '') + fun.toString() + '\n)'; ++ ++ const transformed = transformSync(code, { ++ filename: state.file.opts.filename, ++ presets: ['@babel/preset-typescript'], ++ plugins: [ ++ '@babel/plugin-transform-shorthand-properties', ++ '@babel/plugin-transform-arrow-functions', ++ '@babel/plugin-proposal-optional-chaining', ++ '@babel/plugin-proposal-nullish-coalescing-operator', ++ ['@babel/plugin-transform-template-literals', { loose: true }], ++ ], ++ ast: true, ++ babelrc: false, ++ configFile: false, ++ }); ++ if ( ++ fun.parent && ++ fun.parent.callee && ++ fun.parent.callee.name === 'useAnimatedStyle' ++ ) { ++ options.optFlags = isPossibleOptimization(transformed.ast); ++ } ++ traverse(transformed.ast, { ++ ReferencedIdentifier(path) { ++ const name = path.node.name; ++ if (globals.has(name) || (fun.node.id && fun.node.id.name === name)) { ++ return; ++ } ++ ++ const parentNode = path.parent; ++ ++ if ( ++ parentNode.type === 'MemberExpression' && ++ parentNode.property === path.node && ++ !parentNode.computed ++ ) { ++ return; ++ } ++ ++ if ( ++ parentNode.type === 'ObjectProperty' && ++ path.parentPath.parent.type === 'ObjectExpression' && ++ path.node !== parentNode.value ++ ) { ++ return; ++ } ++ ++ let currentScope = path.scope; ++ ++ while (currentScope != null) { ++ if (currentScope.bindings[name] != null) { ++ return; ++ } ++ currentScope = currentScope.parent; ++ } ++ closure.set(name, path.node); ++ closureGenerator.addPath(name, path); ++ }, ++ AssignmentExpression(path) { ++ // test for .value = expressions ++ const left = path.node.left; ++ if ( ++ t.isMemberExpression(left) && ++ t.isIdentifier(left.object) && ++ t.isIdentifier(left.property, { name: 'value' }) ++ ) { ++ outputs.add(left.object.name); ++ } ++ }, ++ }); ++ ++ const variables = Array.from(closure.values()); ++ ++ const privateFunctionId = t.identifier('_f'); ++ const clone = t.cloneNode(fun.node); ++ let funExpression; ++ if (clone.body.type === 'BlockStatement') { ++ funExpression = t.functionExpression(null, clone.params, clone.body); ++ } else { ++ funExpression = clone; ++ } ++ const funString = buildWorkletString( ++ t, ++ transformed.ast, ++ variables, ++ functionName ++ ); ++ const workletHash = hash(funString); ++ ++ let location = state.file.opts.filename; ++ if (state.opts && state.opts.relativeSourceLocation) { ++ const path = require('path'); ++ location = path.relative(state.cwd, location); ++ } ++ ++ const loc = fun && fun.node && fun.node.loc && fun.node.loc.start; ++ if (loc) { ++ const { line, column } = loc; ++ if (typeof line === 'number' && typeof column === 'number') { ++ location = `${location} (${line}:${column})`; ++ } ++ } ++ ++ const statements = [ ++ t.variableDeclaration('const', [ ++ t.variableDeclarator(privateFunctionId, funExpression), ++ ]), ++ t.expressionStatement( ++ t.assignmentExpression( ++ '=', ++ t.memberExpression(privateFunctionId, t.identifier('_closure'), false), ++ closureGenerator.generate(t, variables, closure.keys()) ++ ) ++ ), ++ t.expressionStatement( ++ t.assignmentExpression( ++ '=', ++ t.memberExpression(privateFunctionId, t.identifier('asString'), false), ++ t.stringLiteral(funString) ++ ) ++ ), ++ t.expressionStatement( ++ t.assignmentExpression( ++ '=', ++ t.memberExpression( ++ privateFunctionId, ++ t.identifier('__workletHash'), ++ false ++ ), ++ t.numericLiteral(workletHash) ++ ) ++ ), ++ t.expressionStatement( ++ t.assignmentExpression( ++ '=', ++ t.memberExpression( ++ privateFunctionId, ++ t.identifier('__location'), ++ false ++ ), ++ t.stringLiteral(location) ++ ) ++ ), ++ ]; ++ ++ if (options && options.optFlags) { ++ statements.push( ++ t.expressionStatement( ++ t.assignmentExpression( ++ '=', ++ t.memberExpression( ++ privateFunctionId, ++ t.identifier('__optimalization'), ++ false ++ ), ++ t.numericLiteral(options.optFlags) ++ ) ++ ) ++ ); ++ } ++ ++ statements.push(t.returnStatement(privateFunctionId)); ++ ++ const newFun = t.functionExpression(fun.id, [], t.blockStatement(statements)); ++ ++ return newFun; ++} ++ ++function processWorkletFunction(t, fun, state) { ++ // Replaces FunctionDeclaration, FunctionExpression or ArrowFunctionExpression ++ // with a workletized version of itself. ++ ++ if (!t.isFunctionParent(fun)) { ++ return; ++ } ++ ++ const newFun = makeWorklet(t, fun, state); ++ ++ const replacement = t.callExpression(newFun, []); ++ ++ // we check if function needs to be assigned to variable declaration. ++ // This is needed if function definition directly in a scope. Some other ways ++ // where function definition can be used is for example with variable declaration: ++ // const ggg = function foo() { } ++ // ^ in such a case we don't need to define variable for the function ++ const needDeclaration = ++ t.isScopable(fun.parent) || t.isExportNamedDeclaration(fun.parent); ++ fun.replaceWith( ++ fun.node.id && needDeclaration ++ ? t.variableDeclaration('const', [ ++ t.variableDeclarator(fun.node.id, replacement), ++ ]) ++ : replacement ++ ); ++} ++ ++function processWorkletObjectMethod(t, path, state) { ++ // Replaces ObjectMethod with a workletized version of itself. ++ ++ if (!t.isFunctionParent(path)) { ++ return; ++ } ++ ++ const newFun = makeWorklet(t, path, state); ++ ++ const replacement = t.objectProperty( ++ t.identifier(path.node.key.name), ++ t.callExpression(newFun, []) ++ ); ++ ++ path.replaceWith(replacement); ++} ++ ++function processIfWorkletNode(t, fun, state) { ++ fun.traverse({ ++ DirectiveLiteral(path) { ++ const value = path.node.value; ++ if (value === 'worklet' && path.getFunctionParent() === fun) { ++ // make sure "worklet" is listed among directives for the fun ++ // this is necessary as because of some bug, babel will attempt to ++ // process replaced function if it is nested inside another function ++ const directives = fun.node.body.directives; ++ if ( ++ directives && ++ directives.length > 0 && ++ directives.some( ++ (directive) => ++ t.isDirectiveLiteral(directive.value) && ++ directive.value.value === 'worklet' ++ ) ++ ) { ++ processWorkletFunction(t, fun, state); ++ } ++ } ++ }, ++ }); ++} ++ ++function processIfGestureHandlerEventCallbackFunctionNode(t, fun, state) { ++ // Auto-workletizes React Native Gesture Handler callback functions. ++ // Detects `Gesture.Tap().onEnd()` or similar, but skips `something.onEnd()`. ++ // Supports method chaining as well, e.g. `Gesture.Tap().onStart().onUpdate().onEnd()`. ++ ++ // Example #1: `Gesture.Tap().onEnd()` ++ /* ++ CallExpression( ++ callee: MemberExpression( ++ object: CallExpression( ++ callee: MemberExpression( ++ object: Identifier('Gesture') ++ property: Identifier('Tap') ++ ) ++ ) ++ property: Identifier('onEnd') ++ ) ++ arguments: [fun] ++ ) ++ */ ++ ++ // Example #2: `Gesture.Tap().onStart().onUpdate().onEnd()` ++ /* ++ CallExpression( ++ callee: MemberExpression( ++ object: CallExpression( ++ callee: MemberExpression( ++ object: CallExpression( ++ callee: MemberExpression( ++ object: CallExpression( ++ callee: MemberExpression( ++ object: Identifier('Gesture') ++ property: Identifier('Tap') ++ ) ++ ) ++ property: Identifier('onStart') ++ ) ++ arguments: [fun1] ++ ) ++ property: Identifier('onUpdate') ++ ) ++ arguments: [fun2] ++ ) ++ property: Identifier('onEnd') ++ ) ++ arguments: [fun3] ++ ) ++ */ ++ ++ if ( ++ t.isCallExpression(fun.parent) && ++ isGestureObjectEventCallbackMethod(t, fun.parent.callee) ++ ) { ++ processWorkletFunction(t, fun, state); ++ } ++} ++ ++function isGestureObjectEventCallbackMethod(t, node) { ++ // Checks if node matches the pattern `Gesture.Foo()[*].onBar` ++ // where `[*]` represents any number of method calls. ++ return ( ++ t.isMemberExpression(node) && ++ t.isIdentifier(node.property) && ++ gestureHandlerBuilderMethods.has(node.property.name) && ++ containsGestureObject(t, node.object) ++ ); ++} ++ ++function containsGestureObject(t, node) { ++ // Checks if node matches the pattern `Gesture.Foo()[*]` ++ // where `[*]` represents any number of chained method calls, like `.something(42)`. ++ ++ // direct call ++ if (isGestureObject(t, node)) { ++ return true; ++ } ++ ++ // method chaining ++ if ( ++ t.isCallExpression(node) && ++ t.isMemberExpression(node.callee) && ++ containsGestureObject(t, node.callee.object) ++ ) { ++ return true; ++ } ++ ++ return false; ++} ++ ++function isGestureObject(t, node) { ++ // Checks if node matches `Gesture.Tap()` or similar. ++ /* ++ node: CallExpression( ++ callee: MemberExpression( ++ object: Identifier('Gesture') ++ property: Identifier('Tap') ++ ) ++ ) ++ */ ++ return ( ++ t.isCallExpression(node) && ++ t.isMemberExpression(node.callee) && ++ t.isIdentifier(node.callee.object) && ++ node.callee.object.name === 'Gesture' && ++ t.isIdentifier(node.callee.property) && ++ gestureHandlerGestureObjects.has(node.callee.property.name) ++ ); ++} ++ ++function processWorklets(t, path, state) { ++ const callee = ++ path.node.callee.type === 'SequenceExpression' ++ ? path.node.callee.expressions[path.node.callee.expressions.length - 1] ++ : path.node.callee; ++ ++ const name = ++ callee.type === 'MemberExpression' ? callee.property.name : callee.name; ++ ++ if ( ++ objectHooks.has(name) && ++ path.get('arguments.0').type === 'ObjectExpression' ++ ) { ++ const properties = path.get('arguments.0.properties'); ++ for (const property of properties) { ++ if (t.isObjectMethod(property)) { ++ processWorkletObjectMethod(t, property, state); ++ } else { ++ const value = property.get('value'); ++ processWorkletFunction(t, value, state); ++ } ++ } ++ } else { ++ const indexes = functionArgsToWorkletize.get(name); ++ if (Array.isArray(indexes)) { ++ indexes.forEach((index) => { ++ processWorkletFunction(t, path.get(`arguments.${index}`), state); ++ }); ++ } ++ } ++} ++ ++const FUNCTIONLESS_FLAG = 0b00000001; ++const STATEMENTLESS_FLAG = 0b00000010; ++ ++function isPossibleOptimization(fun) { ++ let isFunctionCall = false; ++ let isStatement = false; ++ traverse(fun, { ++ CallExpression(path) { ++ if (!possibleOptFunction.has(path.node.callee.name)) { ++ isFunctionCall = true; ++ } ++ }, ++ IfStatement() { ++ isStatement = true; ++ }, ++ }); ++ let flags = 0; ++ if (!isFunctionCall) { ++ flags = flags | FUNCTIONLESS_FLAG; ++ } ++ if (!isStatement) { ++ flags = flags | STATEMENTLESS_FLAG; ++ } ++ return flags; ++} ++ ++module.exports = function ({ types: t }) { ++ return { ++ pre() { ++ // allows adding custom globals such as host-functions ++ if (this.opts != null && Array.isArray(this.opts.globals)) { ++ this.opts.globals.forEach((name) => { ++ globals.add(name); ++ }); ++ } ++ }, ++ visitor: { ++ CallExpression: { ++ enter(path, state) { ++ processWorklets(t, path, state); ++ }, ++ }, ++ 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression': { ++ enter(path, state) { ++ processIfWorkletNode(t, path, state); ++ processIfGestureHandlerEventCallbackFunctionNode(t, path, state); ++ }, ++ }, ++ }, ++ }; ++}; diff --git a/runtime-shell/patches/react-native-web+0.18.12.patch b/runtime-shell/patches/react-native-web+0.18.12.patch new file mode 100644 index 00000000..562227e3 --- /dev/null +++ b/runtime-shell/patches/react-native-web+0.18.12.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/react-native-web/dist/exports/Image/index.js b/node_modules/react-native-web/dist/exports/Image/index.js +index 1a19d21..4c93470 100644 +--- a/node_modules/react-native-web/dist/exports/Image/index.js ++++ b/node_modules/react-native-web/dist/exports/Image/index.js +@@ -132,7 +132,7 @@ function resolveAssetUri(source) { + } + + var scaleSuffix = scale !== 1 ? "@" + scale + "x" : ''; +- uri = asset ? asset.httpServerLocation + "/" + asset.name + scaleSuffix + "." + asset.type : ''; ++ uri = asset ? asset.httpServerLocation + "/" + asset.name + scaleSuffix + (asset.type ? ("." + asset.type) : '') : ''; + } else if (typeof source === 'string') { + uri = source; + } else if (source && typeof source.uri === 'string') { diff --git a/runtime-shell/src/App.tsx b/runtime-shell/src/App.tsx new file mode 100644 index 00000000..2ae0709f --- /dev/null +++ b/runtime-shell/src/App.tsx @@ -0,0 +1,7 @@ +import { SnackRuntime } from 'snack-runtime'; + +// TODO: Configure the aliased modules through context + +export default function Snack() { + return ; +} diff --git a/runtime-shell/tsconfig.json b/runtime-shell/tsconfig.json new file mode 100644 index 00000000..99ba74ac --- /dev/null +++ b/runtime-shell/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "lib": [ + "esnext", + "dom" + ], + "module": "esnext", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "useUnknownInCatchVariables": false, + "strict": true, + }, + "extends": "expo/tsconfig.base" +} diff --git a/runtime-shell/web/deploy-script.js b/runtime-shell/web/deploy-script.js new file mode 100644 index 00000000..b2bd5164 --- /dev/null +++ b/runtime-shell/web/deploy-script.js @@ -0,0 +1,92 @@ +const spawnAsync = require('@expo/spawn-async'); +const expoVersion = require('expo/package.json').version; +const fs = require('fs/promises'); +const path = require('path'); +const semver = require('semver'); + +/* eslint-env node */ +run(); + +/** Export, patch, and upload Snack Runtime web */ +async function run() { + const workingDir = path.resolve(__dirname, '../'); + const exportDir = './web-build'; + + await exportWeb({ workingDir, exportDir }); + await patchBundleImportPath({ workingDir, exportDir }); + await uploadWeb({ workingDir, exportDir }); +} + +/** + * Export the Snack Runtime to deploy to S3. + * + * @param {object} options + * @param {string} options.workingDir + * @param {string} options.exportDir + */ +async function exportWeb(options) { + await spawnAsync( + 'yarn', + ['expo', 'export', '--platform=web', `--output-dir=${options.exportDir}`], + { + cwd: options.workingDir, + stdio: process.env.CI ? 'inherit' : 'ignore', + } + ); + console.log( + `✅ Exported the Snack Runtime to: ${path.join(options.workingDir, options.exportDir)}` + ); +} + +/** + * Fix the bundle path import in the `dist/index.html` export. + * This is required because the Snack Runtime is hosted in S3 under subfolders. + * We need to convert `