From 2d0b49c365fb45d0274d02168a11fbb58427f4c0 Mon Sep 17 00:00:00 2001 From: Mathias Uhl Date: Mon, 23 Mar 2026 00:01:01 +0100 Subject: [PATCH] Add Nextcloud extension Search files, contacts, calendar events, and mail in a Nextcloud instance. Details are lazy-loaded on selection (vCards for contacts, ICS for calendar events, full message body for mail). Co-Authored-By: Claude Sonnet 4.6 --- extensions/nextcloud/README.md | 42 + extensions/nextcloud/assets/command-icon.png | Bin 0 -> 26502 bytes extensions/nextcloud/package-lock.json | 4089 +++++++++++++++++ extensions/nextcloud/package.json | 55 + extensions/nextcloud/src/search-nextcloud.tsx | 567 +++ extensions/nextcloud/tsconfig.json | 15 + 6 files changed, 4768 insertions(+) create mode 100644 extensions/nextcloud/README.md create mode 100644 extensions/nextcloud/assets/command-icon.png create mode 100644 extensions/nextcloud/package-lock.json create mode 100644 extensions/nextcloud/package.json create mode 100644 extensions/nextcloud/src/search-nextcloud.tsx create mode 100644 extensions/nextcloud/tsconfig.json diff --git a/extensions/nextcloud/README.md b/extensions/nextcloud/README.md new file mode 100644 index 00000000..1798cb6c --- /dev/null +++ b/extensions/nextcloud/README.md @@ -0,0 +1,42 @@ +# Nextcloud for Vicinae + +Search files, contacts, calendar events, and mail in your Nextcloud instance directly from Vicinae. + +## Features + +- **Files**: Search files and folders — open in browser or copy the path. +- **Contacts**: Search contacts with lazy-loaded vCard details (email, phone, org, address, birthday, website). +- **Calendar**: Search events with lazy-loaded details (when, location, organizer, status, description). Opens the correct occurrence in Nextcloud Calendar. +- **Mail**: Search emails with full body text loaded on selection (from, to, cc, date, attachments). + +## Setup + +1. **Nextcloud URL**: Your full instance URL (e.g., `https://cloud.yourdomain.com`). +2. **Username**: Your Nextcloud login name. +3. **App Token**: + - Log into Nextcloud. + - Go to **Settings** → **Security**. + - Scroll down to **Devices & sessions**. + - Enter "Vicinae" as the app name and click **Create new app password**. + - Paste the generated token into this extension's settings. + +## Actions + +| Key | Action | +|-----|--------| +| `Enter` | Open in browser | +| `Cmd+C` | Copy link | +| Additional copy actions available per result type (email, phone, path, etc.) | + +## Requirements + +Nextcloud apps required for full functionality: + +| Feature | App | +|---------|-----| +| Files | Built-in | +| Contacts | Contacts | +| Calendar | Calendar | +| Mail | Mail | + +Results only appear for apps that are installed and enabled on your instance. diff --git a/extensions/nextcloud/assets/command-icon.png b/extensions/nextcloud/assets/command-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..23c5cccae14df9784707c660ffe3bb89baa03557 GIT binary patch literal 26502 zcmdpe^hK0cjYzTS`Pgkd{`EkQzd|K^UaF znS1!&&;29bSAQ6A_TFco=j`*ude$=Xg_bfQ-eWuf00>o86m6ffp5{ys|%uTa%~^hoI$_wSXbE4s#WO3(1+XEjKlrB)X*GDg36*wo;* zyU4(4q&8}um~oNowtm#~b;F0%5xSrWaod&XKMRcb|K?A*O+J=lk=jZdZb!Xh@t{jR z^BeB{NY;8LU_FV^4oF>UqdiJV=Ve}|t}6L9I>u_1yEF)gXK#+FKSMud)^&LdC{{mx z&7T^^=DSkd$6C+bt<|B`vBh;vz#WJabQN^vavPTB6Imi-l;1;{00;vS)|ygK=1^Rm z_^D^{8b2JgEgS+9L*@APDXX@o|1O)>mB_J5-VJ*OJ&Wx~Xrv?1xZi#6>EmAcrQt?& zlnY_|3ZfewLPVPI!xng`S~k=swp3imzYtdgMP&=};(Wyk7-~$JbiHij3j+rkjslE{ zPYynOn<`KcK(kKG_V(DrsJknfnzASQ#6n_85(2!v+(`P`zIs;{>z|t=R)YrRH}pq# zmTFX<+(dXyQsi4H{>#7y65?09omrz~@K04OT9FbW$K*rBUbc@8#zXH0B!B}RuI!4D zjo^BSpWHzFFgBRy_*k91nP3PN>Cz1``h=P2t9mxIA#60&iw8ML%=iLrilzJRE8T2& z^MkNk$X=WHrO2>zOy@UIf>|CRy;XjPO{JJ|RMY`On0{5&b~>v%d!G{jwW; zRP19De!eL3gck4~b$MMDpDGsj2i?e*SnK0%Z?TR{LwFc#d{j@`P`)nKj=hZ zW35B>{nb68tXp!3BC9rNXnoy{Yq8~#v%qyEr^M<~TD)-fr&bK+lza@iB3(#S55}Tm z-epkl8xE81Vhfcc4e24W2#u3;X#frd#Y6cL?{!wsfLk|Fa|IRKBjB+ zedbEBe~ILDN11e2Tvs^>vkD4=dwKq)@akRF9zZ5vGXCvK_4@rvYO_LkgmnyP0N24> zv!#WdVH~tPiX3A}mZ}FibDf1`Vm2-S_d%-uK6q|IQ>W!jYVUN*ESJFiV@rw#SxR&jE{2F#!*kaawF{-_j&TR)|)DpoBkSIVbzi zwF78y;V5~Wh#~{SVbdSz5YgLdYhm3L?4efoBP1uYZILvV@rIu(>OY9^a+sdIlJgz*l~;}kDd-1^1KeSGm>xPP0^EN} ziSM`$)|%zRBgQkafl}=qY3I&s$VVnv)V(u)RZBsaRUz=c>{P>nqT8<4%ARZJyH&oM zdUmdx58^r1O(q6v?ESjqJwqEFTfyYqx0 zoOqv)7;=YvxnqH|6dl<4daPIo|L@MtLh{fE{VZ&tul;98P0%_xfk{iF$L}U9;nkP~ zkm!7H-5OcoWTAl~@5{zfP2ENk6i*k>}YfSK9^nDMN>i)iV}qZmA0;cOSJ0VVIMSzLVIgqb{K_RMO#Gkzh?XfC%KT0 zpHt@ip5>KSf_2L~${qFeUN>mkS2J<3D*_!9`3kxl*=-f7YR;Im8C{EtT?UPg_hd+{ z{Ies=;2Y5$TuX}`?eFP-ZCk4BvKlwZZ5WTIewwzEJewFauCsf5E^Gm}VE;(kk9c~o z`TjYXswBR1(iHls{H*mkpxuzUw zxg5@5PCJQNE`8~Vs+KKzQ-CWK2J0!(>A53ViOYv5EB>vG}Q$#(tT=+Eu@6KY6tuo zsXM9I4KGaNPqyb#cRB49W0fi@Iob4{RMe64fMK~zyEWU;y?qypEv(9X^y0x(RcWaw zuj8O{NbKj#*xd#I8btT}QtJ_%HvLy)O4|FoP!`)KNC>dFFAUPuycyWwzv4-exP7Tf zbd6n}RR3uKDL^s#`kJ)cHeX2BT0)DYhJJ4EXOiR(dN2Z68o_7g-|fvOerTum^Q@Y8 z`Go2G#mS>vv5i5<#0fV?M~Cj$O<+x+XP6dsSm=_ul|$#`zsqcd4ib3r)k_O&Bt#oa zpvrbBGvS=Ad*hwstuiV;3YFPRr`p-t;ghe2+01bLI9pbbb8{W^tK7E)F2e>?S5|$^ zKNd7EaTe{kM`wiDC^u$dr>z)#{)AqJsALka$LW1fN{?#q*BMsPzbm<9WQ@xK6tX*mh?_IeZ#a$gYI3w zsdqTX%(Ht%4S5ptZ+WoBZ{yfeQ+Sz=N~kn#FX3vT@h0UompD|5Iu+A#4Glfgo{KB0 z_|7Io0}q@coyml&R9mwzy<#-=P5s@#G7>@@7E7h8Jggj{)-ci6&A^B$nZd3u_HcL} zw7_Fq;*J@J&y!$tb@b)+$-h@7SvEzd+w0fxOTHj@uuGZE+KRZ%Tr*9oAATVlOpRh* zVYJqiYxsVIG&5H&mdA5ca^S7%oA7lX>0}ZlQ1vNxx9~@s^2Bgh#e*x(zLixyZ@1Xk z-Mt`xR@n0tDaExO{=#BOn2ORbdL7ga?e0eWBsX?8OZv2*BMM;{arNXOo9sQfIVzdl z2r=zaD{4jtVdWJDT8auctoNgP_ey?~?0;t^3@`o{M(c7Ws(AX)`&H>sV`5^S`1XC@ z>d%Fqd@2F*^xCAbJxd#PHxwc*XRMWt?Mj4S0;U#~%&%2YcTtUGvi%rCC#USmem;pj zv*N8M*4cbCw5dKE`Kp_9&3Uz*c4M_xlp$#=MpkZiZI-Hi!8C9>Uyp03JaT9yC|@Y> z_9$I#E<*Iyo_pz)8dTdJ6)%jW4~$(g4AfJA7R~vSyr@O>Q}#<|>8HVmN4EA7LNFy2Z=dCq%GPtX z+5?8z9L|bMw|!}hvhIMySB}>^S_PwPO|$1%=@O2E8!G|#UR=D5?vzL$T6iBWw$kPp zx&0iRg)LbK-*dkCvWW4qb*h-AH@VXzzxLm7mvmht@p&1T&UHvI^|~4M46<4+n4F!7 z=S?4~GsAKAU!jum1W3^i@lcr(XZwQDm=2l`Qt&6!2p<{R7kOB6(1RK(X!uYs{cI>^ zJ6o>Mw{>m*MUOp<`m&27gC6H}BS^Ye<%U9d(N9FGsY*e^C|sQNYCv`Xbj1_L67637 ztZK!Jn3Chi-bWp+!LhsAVM7n{Z?OYUcNJWo;^ib5@A{I(zfmaka_&@%{T~Y%pyN)W?cD23QZ`1P>p$Bdv-cK8}lWw>T zoZf)j8<-hE8kvzd4HO}N{g$BSPfS=nbK!?Q(PadeA^j|T!i5J3$($#cz(niaA!{=xwi zDkIh-;pNyw@;3WGu33&4^QzTL@3|Qx?9;ZU_HpN;nM|8iSjZ4n=t;!m*wXXDZnwt~ z-Ph!w7nXSQKDC|)AxZwE?qM+Io;}}p4juZ8HP-0dOickF|N4D4sJ&t(&Xk784{;Y8 znKC9O#)*oyuqFTU%eJk=QCGm}tIU5f7{2a1f0Fa-mAOI2BDl_&oc_5$)iYFb(^BoI zPWg70uHd>+^_BB6GwADRAgnUG|*vg}yMsvE>>U^Ogyprmw=^7R3kivtxSeciVRZdP^?2x3l<_cw~mMB0XcL@-<@Z* z!(%_!`rQQo%RDp5K1EXh{3_MHf5dV-wn3g1w8L$nM}vOC`FGPPbd!AVNZ9C92A3v0 z=A6F+o-0k^W%V|=$id0%rP&c{pdTTix-9SN-hQqj8SHjhPd}2!Gi^!XREi<{9lpx? za&khL<~kEe{dOiZY-PL}tv}f^x#D3!;Zx*CqqEYV&%(tiizTP*g13K*q&}=xW$lw- zxlDTAjSaL1)u-l#ef`X>1H-H0fIT->Gq{~!PyCq{II|dFifzeIP*!sN>}m0#0C2qM zzQt{g4imUoxm~W_`}zkycs%q6_e&H7E1|^qmo8xg?|jHn1UWj7RwJr+A5OLB_ubgR zsI6FU|7Ol_e)|nB0XwE8)WFSQsw5497njRg=6=&g`(-p9EFekTZTo*Jb2w-o{xp(qpyi>-zY@{Z6MOc2ZTO!%{?_VJ>~2)Ftx1hl%L3$&=(JCVs4DqL4yrsd ze)(r%IF|;z2&EE|@L!}k>>WOX_~154}rqvoUYW6 zukj+aB8#~ht$>p=&GF=bjA17!b!$%5%D%R%R>n3F(A}GsneyVau+VeqN|=?_Xf-vV zDX+-e1NDGfZiU6v>&yDJ2v}+OR7BrScHh?RC5(IR)b$8-qVUZfo+488@D60>< zJriVZO7x}v8dzwd5X%P`*b8gPGoHPlsjm#yi9Xk*4Ptai`HEpBr1?d7?Q(mboGse8 z`TBs4X=^FDVPBtP7pG;V{mPt7`MzxeUW68b89(VX4KTF1K-%!C{HK0N zx6V89TMF~#3wgq>^2KW=EU>w8v^)YU|en(bJ_KYt^}UVjsPF1*favDSc0MSddo z_J-oUbp|+;da$e%puHU8?B%!P?Iww#^XM`T*0j*rc&2m-n?-^g0fMZtKdtyxmv~g@ zcT4otIVT*`%JRy|+@@H8%|UQMSQui)W3J(57JZdB60ocrwj(x>e(438Dr|I$JCH43 zC@fj=#xtd6Wj4_9XLs-C?{GnTG2Gu10CM`u0EA{hACv3%E(WcF#uc`?JkFyycs(3k zf>w)pcS1P8>-d zIK$0|{8(YXAQF0!&0;{c2aX0c!i|St7S{d#EtFVJ3M#$S3tmrPi>v}pg=?IiUO8S2 zryiS-VrT@%JoI3y*2W@}4_67LQWn?>8ps~V$ieu?e>>mtJYT3N@!Du0Q{Iq(^MG4{ zz4w8*EN%|}JuI7$*!ZZKkd0h_C@Nz4_Ykl&awX5M@~f5b+AN^%)w4d=61-z(4{ za7vQLQ3*BnIMs))B7TA3$Ld9>HWp2YR_O;e@rE}6+>fM#uiTcn0|`4sv3;ez$eQ+^ zQFWt7X8fLkuTXyM8{(!qrw7EA$4l2(*Ah$jtG=Z>YOG{gwTVr=UOU?FIbtPiU|n!m zLdEA>ud;S*JfaWzYqyGaUVB0(sOaL%`8=t?KDc4EqT=AdYK5Y*wGuMn0P zBMs2~a>igF&e6d@cU44J6zm<9cBileBo8g*9260XKPJTdV>PE_f3%w~WKF)(W)`7# z7BbZP?cQ|{6&+Z+@UJLGQX<$)j&+tCT)#c}V5Vg{RstHB?FKwqBhyD5`!h(+!YXpB zC&iKGWhkfoMo%%G?*vwMzv%TQmdtAFYQw(9>-^(bAZ+1;J>L~?Sh_8Z%4HGy-x_M8 z1B$uza@)mzPiH2xfsjrh`55lwz_+WFDt4D$%0JpAj1Rz%FsMULjGHDwqdm=@*^epnuVhM@|1A!fP1(ix2v;iRpk5YHJNZ4Bkfh7iT$NqG1CT@ni&>TSeP*=DraK2p)l`!itc=!Db1@?HFj zluzX($9_y2XxZPk7W8C}a7RvD7h7mEfH8aIOK^~Ku*ll8t~~IV-#0GG+vt_nSivC` zlcp~JSW$|<5&a_+Yh@Uc5U{CG|P%|AHKvE1$ZIF<{#b$OSbcuxu zRk8GQy*5*kxYTu2+w)z#aiK){6`LA}yzn6oy)Vx0xw{yQe-~To=6V__@(Ab-svG|j z&5e#Faej?aT43$J#p3}p`e*E;6Sa)6dq}wW$J(_*xzyBktrJn6R`3)(d$LQ8Q$?Uo zv~lcjPC$2vCzSQ|UK0KFG8?D;2F89vwt{b1<2%ns+ixYc7Vd^&-T z;AvXg2pgjMq`CQTS_al-F)9hLPEbKCjS!Mk1ULf900CsOO|V1*OURwb<7O!c;L z;Px?uNeD6gA4CQv;L3o>#K$U-DX6OK)PuJHH+H(&R&(cik9l(+AHxg-X@M)x*i zE$6dUtCg`j_%HTs9dDITQSMQmWJ)OF6Hn(b-6L_-i(0Z>#IF+Bm~U}GMFbVO0q;~6Xd#v=ug`r@A=M|9%N6SR z6U9}pu;g+xc2fj6HXhA9fjSdMy1Af2m{Pin4?V`gtIg?M44QNXds&H2MtSxxEa^&W zyRHWegE5OMO0X_M!_oNpB2CN1WQQ!cCB2o>>lax=7>oyW3hd=s{_HiLQL|pFWq})D zA)T~2X1SmQ=@N>7P75}P!nz{5QY}tfk0 ze;#Ax=$$bdcg)Yh{guBXLQQl%KU^bk{DBNBi2Vr76N{G@!ma+A9 z=93jYp(mn?7aXop>dZ!x6haL{pBmv10-de_i(ztHd>H^^RCRm7>y|CNB|Z=U?AcyM z;_Bjmm6ooA>3#A}lJrhr(|y|(yMK){>$O-n3{NQI8& zT6(zna^TqQb&@xc%neqSa%<5=>TtioC#P9(PKRGV5_jvpo6|(3b|Q@edy!V@zCP++ zDTcD_hDb_p4}ff^WNB?UtY>wftv@CNa*Mp~%WV;vy%2B?IQFnmMIp$IHRe9=DNFPF zLSXVyJRjDZ<(2gjNegH1lzoA)wbUl((f;z}^%{+SA%7p-$pQ|0FF{z~ctqAIa6S29 z;H#}5W4jRS2jm@bM?6APft}#Xczm8JHDk4KyOG^a1`OIB1-?CcRZZseNU2Di6N*2?u2`+->!Nqm%rwPdKVu`Ge$6v!h~w zqQgUo<-<6O)Wcb=RCWBt>oohq7ksI^HB`MLPJ22kuJupk(aQ*B1t>u;65uD`qyx6i z^YOWc)Z@anR0wM*71&i`j-6Q_g%7EOe)xMJ%~%018F#!}+Uv4S6-eK31|sk-t|ViU z*&hS{qKPhm7e36eXTOZ?Z~_SxaLRf8u>jGhupfbQM`!ZJb?3N@&~TCGy^gk^xjAoI zm@G?r4n0qzlP1pooydd3L$LrWc^raXo>p#+7=3iXb8dNP(FgC-H2D-kFPTTjk8|E? zf`xEvRR2bE#-#Sc?PnZiHvnwi#w&2j)|UB5|>fvUj=8{MvAn`$=~&KC^#S zkm)!?V!TY8IIA7^Z`51_mWqyIrg+@POhJ@VO9Qua^vopwUu3~}D>V+kC`|5UddZQZ ztIGWA65+PZ;@zx!fmi29+&>AE?S>hN$2+-6Tx!b)Q^4WH%vthnYxek#`zXNwDs>dD zUzi4t@gC6gL8*SpoH#l9KQ2IL9S&n?TJg&eC0l=O_4#_xpn=8CYM6}QP88Vn=eDQs zGgdVB+w~v$L?~nDV*uS`zL)hFg(+T;#WKA{NA*==*&Oyyikr=8N1x~02Mq#4hg5KK z@O7Z0mz>{HnY*t=+#5dA)g8APmVoa@HwI&lI;^Q(6ej;Srf+%CHiXCD^Izf@wT;Bp zIs=oFOe8MFh65SIQttUbC-F}h7LADO))#7#*nw$9`&wqYY`fSR1UU(KsXfG^oHvqe zo3r({0M%3I>>p>^3(M0cByQ>QX0uMXzUo!XR?^T}+sx6sS#Zt2P8OW=Sn+L=v7h#o zmWp<>YG<&sh4{?*9;tia=fpp@ZN)Fvf88lg=*#DFctVd{Xuv9+Z%(=!4<0}-QP|Iq zYJ?X)-&nUvAWR~N!MkJ2YE}OrC!V=Eoapms`9rikJHhV)c(|64=_NMMP;&Pxk1Sv6 z6w3hUuvwI9bv{$(qM$dVR%d>6Ga4tpuz&TAn>2v#x#lIG^WD2Ya&4x%^R=4s3CWoz zSjmW3tnH09BxETXo;?Mt^X^toa1*-c%cA~Ra-`s+uMKNhw^=6OrhN!u@;CUGWNG&P zCVO%%)Ha`ts{n3U;}5=bT*etqj;5EQHmj+h?q+C4Tpqg2&D{iob|MogIyz)3?nqBn#CcNicn?sE;qIgBC} z4h#^cw?sxan-a4F!~{82MEDZ^=4SW#dAeEh$*`fyAy279Xk-b&cJcFnis0MZb()W* zYa_HfeOi&v@|<_M7j%;QaYzg-)eT^2^V+6jLVj{?M_w7B)^!Cs%_Qj623KdDKPvF} zn?pN0?2%^&*s@0anC{HS$4;EUSlR=F$B+H6?cMtk8^TK-Mks{7tFJ%!;#Z&7#{|ZJ z(JIzO@e?tY_#XS9nCQ_O=;`k+WpQeO3UPOpNu9QbI$r00RC2~n$m`Fywit;L3)NC7 z<^2ww^$d@tO1M2+i3=MtDoJ)41EZ6dt2P)?x77@_MTfIRt{hMy+5io@FWgx=4MrvSlk zBIez}1=o$;O*o$x-v5T(rR~%b#$RXmP-m}Kb`k!W`!y;@F4e*+QdY8hoY7!!0HV|f zKI7k{o@m*ncqFxgS5)Ic29o6N)<84Py{!(z)EOs%yqSWm?-0?_L0E1QTjeQLM5c4| z@pX3xT^DETWbx4e`IpD$Usw|7|Y_ahLC1lx4f zoM}14qGt2F9lr8V0^ZiyYGLPxU;<`AMX*g%+Ab^SdtkAD7BfQ=wo@`)d_>q%DFZfkk%n2XpQOV zTt^p%N}u{h28z91{{P83^{9s6K6EjAZ{70T>6dz9YTuWNY|?rtIvwT_184!vnIAdJ~4SN`c>@dnIq z|8);2C=)zs#gc2!Qotd|GA0}5ZQ+1*_d}XJyRPwI(~A#`eD*k>vbddXodUJJdfo&Z z&0r&s3D(<>NA|S)9f*5{={t9hN(1R=HkiCIf((U{kbq$y%<;az67lJzDHU_o${Tt# zob+Lb62ep{+O6Ksx;x7Qdyw;M?7hq*NTJ4K;JJf8A0`;Il6%_Ke23XTNZ)`szAn{~ z?`XTQO;d&1sGqY7XPWY*ckJ9(aX>>0SyYVOu`~9t*u$uj2 z&BncfHqBEa=nzY8JrAs_smK=q_;0~H;2s{;;-|tZdl6HXk6_|e5XNkyDdOGM;Lxm*NBt=HG z8@FN_pVU&y639?awS5`ZGp{dd^^8N3=whfIo+5E24t=CDm3@c9zg+T|NmmxuoDowA zm0e2x(FeP~g{i`e*iv*5tF`Ti1p=NUI#OR(@;I8;TT^3m&ENPjF_Rjgis?tyf;8?POB@!LvyN*&t~sBEJX(7I`rQTPT6Rm>>q^v>VON ze0Z$S!wBE{g4T^P)=-?fF6WoUTaVvyn$KPN$oaZ{S$$t1Ks@@oCEjcIQK1j3XJO68 zgMx*2%TqH!bWnGt`q2rRudiER=yYY7YBFT#^T(?nm0gd&7S$c(Ti!(8VI8vg#6NbZ z_B}DSUW(}e>?URFR*Hq`p$M4c?0Iq+9r7nlmq%I2Fz> zbFbywm(V)vzWiFPi+&=#)#GbLv3P^!MDWF;ssq!MJTrs#&rgaDq3pgNL@;JU zVk=&;7VI@fDCxCp+Qcc~qz`?MJX`vIa+ zKsx^}Wk&&sMm-y%u&^~p^>L7Y@$E~}kM!q<{dh>bt)9D!yuWS}03|!$ zs8(n0;H&=qZ-!Q?GdRF|nIfei!6&)xVnZPCAGZIHPzK+K9-_##{^bw%l#RRxNS?e_ z&c`p3N0^iCos70t=i%lEh0tyOTabl?Br`?*oR70=M0^LiO*~W1@+B&vMy^Vz5Lat^ zVCo_dUVttV=xZs0r*E|z)U!MEzn>~mpzP)U<@N;ASlmH~0ocF^k}MLW|1_RhDmi6i z52VYqh8*P}sRiw{tA3>~wqKjCH{5ferf=v}Zk>u8e=d9*+))Jjc&>|o7#0V6K_x%C zRqp%QpZs*sNT>kq{o?Xb6&LuhKDbbW&FPCnc=J5fQ=6%7T@LG=*J~$z+aXBY&V5?p z#rtwnjuh|spqs!UVxN z2=OKUIV}Xb%enI??Pwj_M^&!-i%&~!0(f1_Tv)%7=5bQ?9qlC@d_sMTu2P`SxTwU(nKK0L{? zGZE0W$(v*g;-v6wrxs@gp>@{N4UD$SKbfArC<*_8cfZH`;Cy}SV1T<#0qeCVC2{rZ z7g)C@YgnyJpW^ql3>%#IvYwMb6K_+{K(39=>IXyrI&@vat-F9VZ|ZcG=37r->dSHo zDzT$n!V_sey_whA@pGma@!ay$DQ1xdbZ^K4B+8K@~JuWte zgRbl-SqiNv%iE$@l0a-8D9?LEBt-&I2>a3Mwy!PCcaw{1di)2G>n-^WdUcXSNhjTG zvpy!vDtx|#9=e)@*j8G`A?6AlYF$1}7WbXfOqJ@Teb};jyx9Oa(_a#7glq-66XR}v zqtqD|$Y;4{(2irhIwpIaQe!&Nii#7vA=n;zeA25zz487qHlr<0p&kbajO=@Bfd+|c zTW{z(O_;cyd`SDp|InHJ7ilA!CKjX#&+|Z5#rm~V?;@G$2VW?mo%I@hzVLxBn6YtR zVRe9eSXp=kQNUh4PS9wxJ8xeMc=;<+&6h43kNW$rRQQ`X{$@t7N5n&YeU8p-*|bAQ zetE^hVj~pcX-3lYrWWk40A6EffwS_^UI3xjZ^9tiH}{4EN;bSG15-5PIu5|QOY#Jz zwCwx$o%|?F<=>PTd{=({^PHw{jUjyKbBG@S@Qsbi{6P+ry#SipaZoJn1iJF69Rpse z_2Q)lW7JauIvr0CUJ-1_n)`0kOJ+GKT(ha&!B^BlkyIYJ(WT$GQV1 z+6tdcqG(mT5|Fr51a|8V*4l#!+h(%Ie=kzEFZ9BR%APDH{@|9Zw|wiWgNm4wYf7>-2Sfa?V$wflg8%nw^%#Pw<0 zP1>`Y@(-GI%KZ}?p)&pWjp(S_jfCMt^Q0rQnaeHKHV-a*GMDG z@ptYxHvp+eE@*+VlDJ!}zNs+1KxJhH*1rcwhV2Z0wPe6!YTc&+=FQaZT>@9)U~|K8 zmqf^m3IJpSuj*yFVMU|R*WbK=>yna_u_||45 z!HGS*f6;4Cyv5xQDz7|ie|kX&04u4I{1u;Gy6;M#cO{q|wLh)kC0PqK%4eJw47fQ0Z@SO8Z`1o$(D!dm4ti1yU9~<{*giuc?0%mC0CEO~%YR*mDt?8} znf%Gn(aeFRzhO4}UVz9!i>7?IwJ!8blF`ckrhODott{ZhfpSa#>@nfUtzqu3CWral#kr&aTm6&`Hb>86EpRZS=nZJNcs{H;?AN zVm_8HLHw+YIP-4eikq7`f7t!a`sAT;CbcJjKr6`g_#Apk1+3Uccf|S%%0r*hQTC+YWwrkd?OG00tz^!WF;fFL8@A*EEd%zAB?A>ZK~3 z3adn>69J$@y(dW)KsbmzHJ**Lwa+z9f>xudGo`d&UigA+(mmS;RPu8Tysw++rvzcY zIix>`nVFwJRWpa~wSW3ItjA!mB9n91btfuK0ZAT!jVKyJoC)@vXl~$nmS1hTWLC^` zkO1`FskG1SWs)1unG>3Y5F>@z;HDKDKuq za0b&Q40TR@?=y6!R!&oL(K3Ja_xA>n^gK<|u`{q4Y;r>g076+-*|ggRU%xA>7ND7O zo2u4_TVBF6v7H|Z^KW!2ZkZ2;9(9LnsfNaSHzy%7a9RXlYN42fD6!7^*{x71xSx{Cm{?_cO@Xs1GUHB%?}c*Aj!% zvv6t_f=T8_3PLNse7O5pKmJoTF7n9cMOp}3#A&W}{P_vkz0>3Babk7)&N4ODp!FRm zny7bhq59vYXoV*G#P+LCVYo;q!YLnHWi7Vt(qkZ?`)TZpmJIh)^kqqK zACo}0<}28(gVep+vsZ|Vza3LZ35vI>=lzE!?2F-SI6z#emg=`?)l8X}!!&RJpDz9} z-F%J($Tuz;z)W15@6rRI+{5a|vlGR>8@Yv{BG2r~>VqfHb?+S)$kjq%+ShxT3MKkK zc4|d;QZi%I(Dr}NI<)fjMt_;u+W+1m4EU|H=nG7YPmD%gK#>rPvI{~4?{?Cc7};`} zp-t~sGt>MsJxBN(WM@01kWXAQ&2hif8xn_OWINJyYYxJ1C)IQ_F+Hq6HmVV>pF9m3 zJxU)~SLfMISCfZ96Rw4ensqQ1|Ay{rCXd?K(=%#U68s+da|9tp zWAEo8IbR+VC$dSBXsa*cM0ou$Do{!T7zlGnkwO;AqZ2SakgL|WMT0`!F|ud*0(~SU z?C*C|*NU2xL#$Qkewioi5#m{RlCrT27P4hUGn!3^g_R_dbw~ygg6fND+*%QHu(y^2 zi7r{rRdwfq8?*nlr}Sr}KEXB8Tk<@Q@hMi`S?KraDn`Ir1H>5ZU|&0|Yk*#iw_xviv(3 zRBFm+BNl0xG$1#U9!;`pkkh+))kf7+!~<>?2nT&iLJF1aJv1|T>5y3J_-4=)PqS+R zIrH7@x-YywInnuoXnZ-3S@q=thj-n>8g1lE(G_cXFm~WF3M9fLhB<%O*wL*h3DmQ- zzjZ;ylWd~q@e|v1&C#*y>E@x7ZCbNyuyS<39h;l0g+ZKRiUp<>Bdt=srdcX=Dw}+| zYbDV900f@Y-cJ8v^$TlM#b+kW&s`8#u58`l7~sRKC(032V_PCk{8rKBE6o70(T7CI z;=~f2LcdadbBoTZPITj!d3H*SD;s-- z7OeUE56NVlkMZ%`_feT%=CRT70B=W{eY*tF;I6I zbEW&boZJKpgaE#jZMY|2J0RkKRrw8qzSi(wNXE$VtiD;{E zp7VKGYsks3pj;Wm$X*yZE4Nfhp3__C{V)wY`J$Vxw2m`2bJ&BVrXcfG%s=B_a+o_K z$`K;ye}6^Pw(@GlzwY?p!8?GeqS2RzSqtlmswx1LZRoO2V$5ElIT@-|nhBP-iiE_N zN%AE{Q>05eOXgI=fxJJBar*=#COZB6vvE5NI<^eZ=*y;8*ve$n#F{cnlu5AhxYTz{|I2#rCeZ6Z`Z#Xsc{kle~@sgotv__ zq_+I$!%g?ngJ&tuSIj|8fkEMhX85hp2<6AsQC-LN#e%xOU_E2Um0LqUa^7i>x9`nZ zCrN$`?7NX(Nw|zH+8t-RD`3gh{c3F{xd>Vs3%vO}$0o+MWH9H%ct|t#KI!}Sw#b3^ zut&t5-$h|zYcukRKZm+vhC_&O*MEAidJD`@Zaa3&@}GWkHGC+AbxT<#!Fme?#XQ`{ zje-CnQ1|G}F`CWSqD^vrcJ=fzV(0ynk@hz;;+Mnk;3Qu3tM{`hgV;NEe|@LfkTLRe zp7;OF5F5MV-ti+}h_wWvJvLK58(z5y(&wNDi8+x4W*v+7>hXu{Bhn*;5^mKM*)g~S z|90S8@CBmDwq1C<)4O&*T6ppoZjO9}r$Guq5k)b&xX9{(q2>flDa%P51E2wxX zBCT%Q5ANlztCs=-Kt@GhP6!7?hX&q9MhGOz(m2lCM@{AH#}9tV;E=Di^yvW~UZ0ScnQQcx#usCa%oy zwNV7BEO|<%M{x><5#v#yl85i0R>@+o1nm^f%*UCi0pYzHZwrneo2UiOtVVQyjPBu* z%Ifyq6ffK@BV6-0jfxI@ZjEo_X|?7KjX&W3dhjd*nyx zfrQ2b>hgWrjxkWC^kh9=L+UjRywnp^lL00)49tfL81rY+!vjul=YA`=ceh6nVMMg( zD(}g}Ut<`_!lLv+rnDb?$jO@v)O9_6M;zFjIrC)r*YyLi#ZO-P8Aru{{&P%wFZ@pN zWoqBgARvovL;+FaT47)fU_59;@*_RfQ6j>0KtS)*KLqAO>eW2WN$i8cRLgFhq5AZ1Xp#=)(B#bWwVWqiUeu zD{OS;8d_x=sKwYHCM)y=@`45q<`|%Uj@D7Ll}a!0O1`8QauaX8!jwG%7O_mswj~Mx z^Iw#?=(%A>GLo}ebg!W9yC(N_BtaZ#z+@IDzcA~*pru7ncE)EKcI5)nW9(M>1pQ{P z7zK6d=JW0~Q&EvYiesg<$mxE74hXbw^>a`n_pa7cyK}pw<59leKcpsW*(b8S!YuJf zL?CENME5|d1Z$ZG&R6^#U1idJV+UieX3<+_mJ(3tma^moqtNc&!Gx)N%%sPX4Es;2 z5MiAIO6%1A{c~bk_60RjT7CJ`ti@yzC14@ToQMNjg^L$-OrlKP=a_e5NGxs3TWS;2 zuXmOPd!mY8imd{K9{JNi8<3pSe`O1PXf2noLqW;j+MP_$E(&z}RB%$KosO`4x9ZNl zUpwSrO3eg|RCx_P!_rW&@TCR;%*S^F5@tY^9jQFX-P=FvIK|B&ol;wpWaXBOJi9SOQ6>0*5=7Rb zue<)L+ps0G@yRV0l5@{UHA+FNJZ1Twi19)npH33hN|2p|*GKt27IOkWM^7m($UoS6 zp!mOV{JbdlPOqADbR}y2>q}vW*1gjQIeJXE=Xoy8wC1iATDxSbU{jyj_K!~XhgqF; z2HX}=m{tbu*=y$JsL|it?tbR1{-D&a$ZVTLXOVoLg~=Nll}7zKQYf!CAhe=It>;u} zR1+&uWunV}_DykvmB+(#eT!K+wz9zcOJbHD(#33IV4NWTtfct62)viAmD~#cCswLt z`!)j}Kc`8k41Yk4Biv-y&oCPl^3%GUSe#zz{@8e!@c2$at6T%6Z1fG^dAIMVGKF^p zicK*a1_gvHum;e+h0IXSDZ#lkvgvjgIHr1Tw|A8FfWlp@xa$9ZMJGLu1*YoWyU#%q zDV6DpK|%h$B$#3_tEhwJ>-+kiiV$VD2zIozN_a#>Q7(4i$UmOku%lv;Hdon5?I%v& z`So=3?8_bpkIlVPUAR4$K%!B(ZFuhsP+w`;Cn|idHk5l!WkU~9)%{xI2_=PdrzS^i z6WIu#g=+l{=77nqe`jc#F!cDjjka4zct2-iKArq_^|ZnpT%tf}kwuN3`2apTeZ-n0 z%^sqan0z$)J>8t>l#bMAljAnXYp4rp3~F*Mjz#_d7$V3TmrhUYO)TsGl(nZiydJ|& zST?TiMlWEVIfK>nh=oWZM!iD?UrX@2pGwbkT@|r9K2OUnc4`{cmrppq!-5e^Jt0k( zz4%u-9d5VCG;JA;eZDfD30*^oKK!%d7we^^fFej3|Mu<|U`}U#MAY|C8~glC{yMcp zA;w1^kB%p_^bmPPMQg^#z?VL8Uf73-h+etc=%%J8V>)vn#F?cKu7Y<5b_`2>!1`$}pa_L*}cN2+ZWanun|C9T?AgL;MA-Msnb%X^c+`5@jv!a$`ZZA%Y!r-m01 z0YlR<+95F&ACH_C#3>sN+{GYQpH_;41s?zKxF>pl0_PFt@P~Qafu6)gFrAh|E~rIr zI6c!BCrJM=y&!IiNrR!jiS}KL^W_UgL56ar7=(ytvfgeiG)WXwj0N4ipCy~hPP_G& zAhry^$CYIQ>u!g4{-eMPN1@F15uI#e4dX4tZaoukW+eSbJJ?L~VyqH0;r#Y^amvGy zCfE^CgMWU-new!#=8B7Bpve8upJEHO9f0Fxh}lp*@?`Jt8eN*<_BWid*HU>Y*;>j6 z>a`+qw^6b3mST`5G1}wFq@QkOXRI%^{`=1c*hi+_NcSNQ9~qcTPtbXLc(gIIlPFYf z^ubFTVe_26m^X%JZLA(o-t!~d>3g`*k5*9(_g=?MORBb{4CN}Lcmje?Ca#{8>MF0e9^oJhO5WZ}O>h zjDVgAD%0Q{^)71I@hj~_zh}X6j++nVc+>s8J1QmFUBI$Ww_)iGiQxm0%SAJvgA$$ZSX1QZw9Ze`9iG40XdJH4YN$Xx1 znz{ZpTev{iA#fookwHt@qw9I=ybb%%#Kvfj^GXapNh2H09n*ATVz8~Gv&T}d*OnqQU=p3N@56LgeR`qH^Kl{~Q0{Ol{6>>$H0P+dxsQD6G` zk>mqfs=Iq_VSh#xYcyu_Kr9}-HRI{e?d`;CRGPPL2N-YV9Zs56s`%~)GfoS+wz{Pe zu_Uz;u95yvc~|)t<@2?d?nV&->5%U3h80NxX{4mPW9e?Bq>*l)s#sx^7u zzLeGltuBD|=A*)Pb!+uW<7kxn6Ozbn`&wXWs;|qX{0m?&rK@I1W;-&vsjZo6?rEPb z7uqah#E$j2`p#D?VVu>n`BhXxu!8IAFMY;bfb~qERo6XpTF4;-*?KRB+On0+j_wgI zZM*uGT->eW!3^cJz9R&~#jD8Y(qAaY?Kb{A8-T25>aQqjy2(9C7IqKi920eIy?#Ta-B`24`;@KbQ*Z8t{vWro$n%;Jn23) zguAdp%JP;MNJ+YVL|aa8BIS(>o!1d=J`5Uf_)6*u&rk%as}s6rRY-r^b?3t4oMB99 zYCL>ni4^ukaf60WAwm%ZmSi5y%z1nHZJWGq5J0NWUSpG5L4I& zVUz{N?f5w$ib~!H{IDA`fVmeeVrI{xwOvc!Gi2OIaUix!Tg#%Du)S)}QENv=fBx1u z%Ecf|e-)dfl>}t^z{4XW$KcB_KF76uRA3MXt+$@M`PsAr$p0B!GZA!$S%dY&*-+i~ zNO2@nVurTRk<^X!;vlm}6dmhjA3ByZi>m6m!t-D|%*SGOh@Ow{ID)MwZ z5IqZh5JwqFx%|ZRlKbmw67Z3IX|sdo=Nx_e>E>7G=x^!?=T}ptdX`_Y_LLIKy|{C! zS}@p@sCD@eP2rn4C@b*Gi`H+HsKMHc{gKu|&e41Oju7)l??n+Nox(?6^KCsh*HF+kZYlDt1X3Dc?8bc(uZ3?kgDGQ|HC2hUT& zu5i!4&w$bs9bU2f$s22h-36o*`fGx(3+XsZ^K``GFJ<(yVC+m6jGbtmvscimNgp?! z_Kp%jDdDYQxgVk90w4Yp(fQ`)nCc|V-0|WC|2Ju%4N)c%au|xwyUcis3J7KTr>7QzTh}xURdt;nogRVLrY3$c z#-mVwZkg8f$A^#O>4CD_#MwPS`NH@9`YDZ|39(*)tfh!!b`w>K7@#1b)WjPF1D7iG z`SYBF4De6Lt~Nsumh;R3Q;?PqKV7y2NYHDUsQdJjl+|y!Z`jpi{aHN|ZN4uNX}g(T zu|r)kRw|1MN!AI}_x6cnwR2}=8t(zn(&C5K;4F|MjWY1cU6B*_;N|Xs8p5juw}lA& zfU@R=jD5*~eI_M*CE=$ceitgPxJjBP4`%7q+8b{p>XOBsqQx`UkdJ99A9* zUecuniu7QGEl+Eu_5@kHl=n}pQZOnXG+-rpJo2v%M{e~MfQe+82v_1k%Qvu@LA)na z1Y@ON{daJ$ND*|-&samnlj@nf=z8$?(WHAGR%=7aN7o5RAw!P!WqBNhMc;1j;r7~2 z_5BBY{*-HSsb#58ly@_V_C?7(A)8c})~;7{=2^CUlLoDPqomZuLb3_PO^0cU_V;nM zJggTebZ%*8K<)kM_=RB;?q4sGYMwB_VvMzQcTJVgi}TDcAME34?!^#tO>O@YRer!b zbha@R$t88}WQT`NB_$T_IKSx|BexkpN%g4bi&s=@9C+QP@p-1y5&B!)E{g%)g4 zq!E?eG0Xq1f3vny-f<~aJm%a9jK*whG*`58RV@aJV6N2nW*5=^_H6{;KSW^ zHOjJ;A5i&1dYFN#_X%^q7pg`rIX$*>Kj`evONOHVt%CB0RqSLu)ogF>Pr!UXNI*`qm9V9@V% zpeLY)@rW%^Jry!QF1-w~Xid^G0@`tf?VLN<)GJ+yi9Val_KUa+w$W@PZNP)Iki5PGyuEfUcg+1R* zL)#!go5`;F#w~$v2+_nh=227tlEwBQ`KFOTYX0M4kd;_FsUXd(+=sYRnXYi?v+O95 z@9*7gfNjyRIKZW$;nU51;U%lV^*vK!;-Y>inWRQ;p_4uX!RNSahTb^{9P9!h#)r8r49d8B?gO3M#c&vG^y@ek06> z|6eF1>8wd+Z!|Gk|2%7euo~MTs`*7yLQj{fw$4axbu#p!7~uJ%<3Rn5y)V_CgiH;X z@3p9y3nGXQ+PKQU8`3NN8i4~qonQT>Q%HTh_1!&hP1f+&Bm4W#@uK!GZ-r{nE{!dg z4+UP4=B~0Wq-l+wFt*MNTWJeT5fZT!`Cckc0>1pLpdw6`WoBYXz1k%9A_AlM2wBCt zisg(<>~Qy{7QkGydwQKWr|~!0){s0UAvtfpI!JA-`>C+P(a&lHAQGcap+6-#P-^Cg zmj$*G`mmZPn^_<_H~u3q_~TnxV|}u1UpGc>Vy$>sHOpbi;fw)m+9h{Vw&>pY#!cHn zR%hSmzBSVr>wd~l`W|_ipeJWx(O5I}R&$I5prcWMDttUKBc=Z5=+?tXyOvwTjL?U& z8C#7DuCU(&{#2sF0t;=X5GU={-z*1l1+$o{i$1INgdNLQ6S9$Qmy1-(V*twuiyvWcZ0PJ}BK?YoF<9Dt3K%}GNbOG^OaBJ+s|$#R77h>szVdA*9KV0@{5 zfnt|oM^7(ESeAW)!xu0C6+~JYGmQE?K)H`TU&R%DTz1#jN>$U>)G>Jc5-u3dhAlhpwbc!??-emQzS#w%*Ep-lcXS$^2zm z%O1%!y?tpLm?B|1^CB`eqC*}AZN_2V4_`P(m%0Se-2Ixrj9_ZBRC&ALwjr$rV@m*D zWWB22bfbe@3{>h0VJTnEfb>&Y=>TzUCvfFCao6|LzmRvk{|%~PMu{%u=`YqP>+O9R zv#;x!J}w~^-Ktr^uHOxhofF=PV>v)M?+!}XHhjCMCeXYVlDa46{41F>gGbaRf&J4LHiS`r;3 z2;5$2pcinqM5zCi`nNug$B%da6OR~gmEAqlF8RO*ij2IrKHn&ZksGQKuQWaNW8(3H^dmn`%H<>B3A+VOZPY_I z6gHNqru+l6O5AGVRSvkPkdBg>?s>;6x&ht`SFR^Dl~IXYP_O0lL~Aah3>!MJ{2f!`DNiHf^o(9Gf3 z3nF|JAoD!`u0-B*m4C@dsGZ_dlPRQwtxW%(^0DC~QZFi?X`J$kxa`>PR5%W)xtrfK9KmE`Zkzt1>rY423s}5K4Rbh)r z6@3vaqY7St(_~%7f97LCHei>1)^SJT?^=g(yKH~Xu@Sv_0G0M=o{Dd~+G5-x2Tmx1bFjE49CGNN&41{EW zh2L720kQ^%D$9&>LLbxkO9CF<^PS8&WawhPw)^9SrU1Q0K6ue8d%yHvE_6YA*a?y? zoSE)NSp?HZ%%6_#Q1Xv=V8=*5((^UK_cqp9q29E)5lP*Vv{%2PCgHR3dC@;VZoK?n zRl%5K;tZZ7p?|dOtYwsi~#R5Z+%oovVV_e)ho5P4tp$ikM zgp&3GL-(FJ?o0~DQ9H}ibY74A({_~0ijDSqSlj~BJi`Uy2--~+MK{mFP#)FIhvvAN zE_Ftlaw>V7bc8aSX#E7Z_Eus8e1{7)g7uA=khqC0xdE%d7F> z0L&%^Mf~tphD44JJ9+Is^xqxB40@8F?h*>ef(3&<^(Acvh5djB%s8hJiJ`sw z*v_C?(K^p=OEWGu82}q~puGlxyw9kek%t5%?($-~?_KG~-~vV(I?lxmt(rPoeRj(8 zL*==cMz!K5!n+9wuI2KV7Y1ie{z#CmSaS5ExFeii(M^lANjFE4{=#-p(Br& z0CR`(WdJohEL-h@ZyIw+5h^dBY@} zJQ(f&t*nDTO8lU+hFp6wpz6mAVi?e3JTKY@L_=39g|7uG7w&Z)z&%tzaG&fPgBugDG_ zY4p5n)KU+dAC`$GI72xUDmvCIS;gO7t661^t6D3G8#%o!$^AO}#+X8%MOhvp;u#cS8N@|aTN2;lk9K$*A#%pyVi?V;i-iEtRNk`QT zuZO5~t-M9o?u{Mv*InhiXMxa&AGwjx+ww9nl5^GK2xnK@@dQO{^HAU4&L-Af40rVN zjQ!3UADXMbU&KBAf_DH4!=JiHK-nUF+K$z}JweBGQiA!6k77oJucz$iM(jr~n(xzT zH3TEIt0w`y$Imn#mMTMVddhi`l?Q-1|5%V2+<1BajOs)YCX$wE@4q)&O92_@0eBL( zj<>x8e2n=#?2lneu~2JA?7ntnLXQ9%8MKvWNMY zhqHZ>`&FKUS|5oh1GpUe~Rq{6Esllu{!G>y8xVe~Zf|F+RRv zXPzvN!;Eu}fgYOkSZ0wfY5Fpl^0YAtu|}X+1N~{yk1y7qa4`>VsN?SMuUOJ0Ao>?# zz3xoQ`my8z`bzFmqFde5^~Ii5cn@T5zZzKQ_Fy3~jGk>Zgo-QNdft~2xpL4wbLmxp zNu9NQHyTrRa7>6#dc+U%-q;fz=6Op4UT1>oLtSFQV#eu$NFVKK8s3mBgHVZ{XPIQg zeQbaliGQioM8;E4kKlwXNK3OXdpqNj{qA}!AEs=udT4@XzWd|%(MiJV`Cmz0gHiWv zvGzupKwdAVqFuFTIj&(uMa;W^$8?}Ds))qZ_W0nv%5%KR1kA{>?Qv}78YBl7j1v=x zN8Sb*?g%QL=H7~qmeWy)`<=JiO*yU(|F>$SBY9((E@6sN=4(UJ+($;hKQY@Ay1!O~ zcHo?pr!7ZJX9sA($u%G>|Hm0HGNNR4#+cGoa6q5jOX}S1{xyR0Ar7SAG!uZXnb{@? z0dRlmtL%91IjO=Z<@9yT9o79V{0Dk2$;^qq<($L!6}NVXj)vg_ed#&{J?(|d#U!Hn z?>tG~+^f%@nBay{UVjPv>A`z=;DIpzCx&gRgG1C!ktisD;_!sejgOT!1*hZi);QwG zqBYMB!oXN8fl`v(g5TVPn`v;XXC=NL$O5mq9aZe95?+2=)rsrLN!5!{)Bugz7+$l4 zb6+Fa2NT3`0i~7>G}A8cBjLU}ge7QwXZ&{-*w;YR;LX3ejJICqYct`AIb6)kn+g8) zyTUKSJxDdD?f_#daDd;KdyVGnADl8zHd8BXrdNHJ9Kz&u_Y_>|SNpjjfPT zBJ~Y|$KV90)?-o?4Q89B6I3g_fUx;bKDucKn_!Ha2lVooUc#69=(EiaPYXMs(7*n; zL)asdEt(-_^-!147Q{98fZef6V6l_Ty@8i zz~fk8$;@=G1(STai*D;(Nt|C^{XN}O0&Pj#-C?RJjxqIW%gSt+tzWED%sk2LCGjvaO$~^WJ8(xW(5S7K?JRP&_0VGnZ-ByrC`Y;3}d+*pMrE!LnHF7)H%{CiY@4 zYQ)`oJ8ut-SqO*LvlxA&uJf!-HoWZ1cp1GA*mqA=vY6pq^vuPgW~A+hxc&Vw2r7G~ zP5yIQO5=jGC3HB$W?R=L&+bXP`I!V~0HZaC@Eo63C>v2&`3Er|CHvKl< zQf|BCH!iQTRRTg={_>*dx#(T*|1pt18+gh|tF~MbTs?I~fa6<;m|B}O%Eo+LPWLB3 zP-@#byYzZYihgks%okJljJBPleM_?ber*=f+^zTDfdCtAOtYYm%rrajruU5Iu2n6H%} zN|fH6eQgVtj1j9E{qdhG{M!G-1?zg6+Y`icQ~KU^`4MsLQXn~iCiSJ1EF6x)`6{jdeB7>#Scah15J7d7q&-da8dykGpxmo@ z1>`#YBCucdU!Sp~BzkZice^CH7==-pP9vLBBu?$$(ELJQ!Bj*R{P+<7KqL9@jey&1 zk7ejj7_;aD>z}N*Zx?&qp33D0>ydlK=})&?D}LqbxZcs6=nPgG)4U=-x&3q04lj6A zKmRE;lA>C-nEsjWUbMU(j~LwZuc%=J(8Ib#ah4=8VkSs$ft1R)>hz0Cj7NTMa`aJd z5Y!p%Brr~t&(cd4e*{C%LutnIPv=fr+N~}kNr(tOO`e%cj-^h$jYvPOCqHqyq!o=5 zFdcngUO$uUAc1_%-kt~h ziKI%t)wm~$qenO)v|_Ad5Nrkw1XU~BS)c?7aHVBQ^g3`@=>9&{-E{Tu zv;qEb{QGJ(bJp6^!;y4sZH)>5^gqIQ_;6X7oy(i1cJI z9_2t^7;#sHM&bxJPqW95{yE{SBsV&q6nUjTf@G{AGD6{S?RZlzrh7)0e?9uV-5D`% zDpt>Qks-*XkSOxgi|7Y<=5OvELK!C+K$brKh65*BR9~b<+>1IYD7b&eY9dJ)qMC1p zA;H~ZFp;>)Qj}awuR4~esNKq_>(2cz)GOdGgzysr`O~t@bTLP`#NUsIVt~8)<}iLp z$+aX?&*7I~6TdLjC=et1E$yNKWQv(e?ir-%z0Uxp(sc(oX-@LJVyQCD{;b+aDeqBW zJl=~(S8>wn79i-Bwbita0!42n=*v@}6}k^{|^q&Mr3jUt-2E|q5^gNJ;yPu-?pllKRExtEKq)@RraRdhJ{}|pw?;=72 ztJu2kHDmslo-~!Ot@OO5!(q;YJ|jyxIBp6*{_Cn?@*Q8IY>C|jhYJP$d8;5@W1YKcN7v;~fYGFBCFvAi7 zf1EAy%j4%cCi_SRCHk`jNE<#JyQI!3mW%tUJGuZN9qtiEuVKfgw+Wbd!YE9m5EQur zpyF;z#Ov;D4?4~eFX?JG#HSx=dDv9qj&Ncr=W>o6mN*~qhZGb)(1|8f^%Rc|&AT&! zr1z-wl8yTu*(I_}nZ4gI+Xj!O(MF|=*Hr3eF$M(xw#*R$)*WT!{@EzJ7-9QG|6o73 z-nDP#Gj~y8ENg2fEl|E2o4XTnR+J4A0VF99;1(4h9`th@ayQ0$W7qm(*Y$#P{|UK} zRjc&SDV`u2D4u00a{Y+F$E92JBM#U(PI}U0C7@63j0~KMgh+cMoux}L)~^GfuIWBi zu!8!18+la_S1EN3`bF}j_S7`ScHoEGZuG1K_UV47d@1+oU zn@+WF9}1OmazBxBw1t&QNO-yZprU&xqp!U-mySK WVv(tQ(GGuD2cRVPS++*nB=~=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jgoz/esbuild-plugin-typecheck": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@jgoz/esbuild-plugin-typecheck/-/esbuild-plugin-typecheck-4.0.4.tgz", + "integrity": "sha512-ca38NAWnE/GchWjO5m7Wbny+yMOsYkoJOboQGheCjnnu5uDxqQWJSIegN+C+CWl8K/1naI/cMfTrAfDH1oRoVQ==", + "license": "MIT", + "peerDependencies": { + "@jgoz/esbuild-plugin-livereload": ">=2.1.4", + "esbuild": ">=0.25.0", + "typescript": ">= 3.5" + }, + "peerDependenciesMeta": { + "@jgoz/esbuild-plugin-livereload": { + "optional": true + } + } + }, + "node_modules/@oclif/core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.10.2.tgz", + "integrity": "sha512-3GvDh5nqpIE8566qUF5cBHKog9DFV9XgBeuR0nUrz0OMuz2FPYHat1AZHOwyQbvH9OKL4gJNQZHcsDOqDM/FRA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.3", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^10.2.4", + "semver": "^7.7.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "tinyglobby": "^0.2.14", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "6.2.40", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.40.tgz", + "integrity": "sha512-sU/PMrz1LnnnNk4T3qvZU8dTUiSc0MZaL7woh2wfuNSXbCnxicJzx4kX1sYeY6eF0NmqFiYlpNEQJykBG0g1sA==", + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-plugins": { + "version": "5.4.59", + "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.4.59.tgz", + "integrity": "sha512-W/F3vNwhC3BHmn1o4g92H8kY4rYw9RsgVRm+GDulZg0XqSoseJYCMQell6ajTj8xljrrG0dZSTuEfc4ETwC2VA==", + "license": "MIT", + "dependencies": { + "@oclif/core": "^4.8.0", + "ansis": "^3.17.0", + "debug": "^4.4.0", + "npm": "^10.9.7", + "npm-package-arg": "^11.0.3", + "npm-run-path": "^5.3.0", + "object-treeify": "^4.0.1", + "semver": "^7.7.4", + "validate-npm-package-name": "^5.0.1", + "which": "^4.0.0", + "yarn": "^1.22.22" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.27.tgz", + "integrity": "sha512-Wfv7B7FZiR2r3MIqbAlXoY1+tXm4bOqfz4oRr+nyXdBqapDBZ0l/IGcSlAfvxIHEEJjkPU0MYAc/BlFPOcrgLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vicinae/api": { + "version": "0.15.7", + "resolved": "https://registry.npmjs.org/@vicinae/api/-/api-0.15.7.tgz", + "integrity": "sha512-8HjIgDESkeoauKR3whWOv4aFBxfK2XRLSjOb0j83vtM6WKkpXvUW6a0gLKUnZCxEj2jaZHqTiV++11EwrWdxLQ==", + "license": "ISC", + "dependencies": { + "@jgoz/esbuild-plugin-typecheck": "^4.0.3", + "@oclif/core": "^4", + "@oclif/plugin-help": "^6", + "@oclif/plugin-plugins": "^5", + "@types/node": ">=18", + "@types/react": "19.0.10", + "chalk": "^5.6.0", + "chokidar": "^4.0.3", + "esbuild": "^0.25.2", + "react": "19.0.0", + "zod": "^4.0.17" + }, + "bin": { + "vici": "bin/run.js" + }, + "peerDependencies": { + "@types/node": ">=18", + "@types/react": "19.0.10" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@vicinae/api/node_modules/@types/react": { + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", + "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@vicinae/api/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/npm": { + "version": "10.9.7", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.7.tgz", + "integrity": "sha512-17u9+Ssv6as3iua2l6abTv1H4TtQDhle/Qn+XJ4TjKR4SzIjk1Ox3SZXRVBUW48KojLttHNQUk/U00m7sh1OGw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^8.0.4", + "@npmcli/config": "^9.0.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.2.0", + "@npmcli/promise-spawn": "^8.0.3", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", + "archy": "~1.0.0", + "cacache": "^19.0.1", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.1.0", + "ini": "^5.0.0", + "init-package-json": "^7.0.2", + "is-cidr": "^5.1.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^9.0.0", + "libnpmdiff": "^7.0.4", + "libnpmexec": "^9.0.4", + "libnpmfund": "^6.0.4", + "libnpmhook": "^11.0.0", + "libnpmorg": "^7.0.0", + "libnpmpack": "^8.0.4", + "libnpmpublish": "^10.0.2", + "libnpmsearch": "^8.0.0", + "libnpmteam": "^7.0.0", + "libnpmversion": "^7.0.0", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.9", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.5.0", + "nopt": "^8.1.0", + "normalize-package-data": "^7.0.1", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.2", + "npm-package-arg": "^12.0.2", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", + "p-map": "^7.0.4", + "pacote": "^19.0.1", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.1.0", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^9.4.0", + "tar": "^7.5.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.2", + "which": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "8.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^8.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "8.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^20.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { + "version": "20.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^7.5.10" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "6.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.2.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "2.0.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "2.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "6.2.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "19.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.3", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.2.2", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/fdir": { + "version": "6.5.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.5.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^6.0.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "10.1.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.1.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.4", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^2.3.0", + "diff": "^5.1.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "tar": "^7.5.11" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "9.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.4", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "11.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "8.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^8.0.4", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "10.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^3.0.0", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "8.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "14.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.9", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "11.5.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "7.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "12.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "9.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "11.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "18.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "19.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^7.5.10" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/picomatch": { + "version": "4.0.3", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.4", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "3.1.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "7.5.11", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.5", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/object-treeify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-4.0.1.tgz", + "integrity": "sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yarn": { + "version": "1.22.22", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", + "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/extensions/nextcloud/package.json b/extensions/nextcloud/package.json new file mode 100644 index 00000000..7530829d --- /dev/null +++ b/extensions/nextcloud/package.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://raw.githubusercontent.com/vicinaehq/vicinae/refs/heads/main/extra/schemas/extension.json", + "name": "vicinae-nextcloud", + "title": "Nextcloud", + "description": "Search files, contacts, calendar events, and mail in your Nextcloud instance", + "icon": "command-icon.png", + "author": "nachtschatt3n", + "license": "MIT", + "commands": [ + { + "name": "search-nextcloud", + "title": "Search Nextcloud", + "description": "Search files, contacts, calendar events, and mail", + "mode": "view" + } + ], + "preferences": [ + { + "name": "url", + "type": "textfield", + "title": "Nextcloud URL", + "description": "Your Nextcloud instance URL (e.g., https://nextcloud.example.com)", + "placeholder": "https://nextcloud.example.com", + "required": true + }, + { + "name": "username", + "type": "textfield", + "title": "Username", + "description": "Your Nextcloud username", + "placeholder": "admin", + "required": true + }, + { + "name": "token", + "type": "password", + "title": "App Token", + "description": "Your Nextcloud App Token (Settings > Security > App passwords)", + "placeholder": "xxxx-xxxx-xxxx-xxxx", + "required": true + } + ], + "dependencies": { + "@vicinae/api": "^0.15.1" + }, + "devDependencies": { + "@types/node": "20.8.10", + "@types/react": "18.2.27", + "typescript": "^5.2.2" + }, + "scripts": { + "build": "vici build", + "dev": "vici develop" + } +} diff --git a/extensions/nextcloud/src/search-nextcloud.tsx b/extensions/nextcloud/src/search-nextcloud.tsx new file mode 100644 index 00000000..f2d1fa56 --- /dev/null +++ b/extensions/nextcloud/src/search-nextcloud.tsx @@ -0,0 +1,567 @@ +import { List, ActionPanel, Action, getPreferenceValues, showToast, Toast, LaunchProps } from "@vicinae/api"; +import { useState, useEffect } from "react"; + +interface Preferences { + url: string; + username: string; + token: string; +} + +interface NextcloudEntry { + thumbnailUrl?: string; + title: string; + subline: string; + resourceUrl: string; + icon?: string; + rounded?: boolean; + attributes?: { + fileId?: string; + path?: string; + mimetype?: string; + displayName?: string; + email?: string; + phoneNumber?: string; + createdAt?: string; + }; +} + +interface ProviderSearchResponse { + ocs: { + data: { + name: string; + isPaginated: boolean; + entries: NextcloudEntry[]; + cursor: string | null; + }; + }; +} + +interface ParsedContact { + org?: string; + jobTitle?: string; + emails: string[]; + phones: string[]; + addresses: string[]; + note?: string; + birthday?: string; + website?: string; +} + +interface ParsedEvent { + location?: string; + description?: string; + status?: string; + organizer?: string; +} + +interface MailAddress { + label: string; + email: string; +} + +interface ParsedMail { + from: MailAddress[]; + to: MailAddress[]; + cc: MailAddress[]; + hasAttachments: boolean; + seen: boolean; + subject?: string; + bodyMarkdown?: string; + previewText?: string; +} + +function parseVCard(text: string): ParsedContact { + const unfolded = text.replace(/\r?\n[ \t]/g, ""); + const get = (field: string) => { + const m = unfolded.match(new RegExp(`^${field}[^:\\r\\n]*:(.+)`, "im")); + return m ? m[1].trim() : undefined; + }; + const getAll = (field: string) => + [...unfolded.matchAll(new RegExp(`^${field}[^:\\r\\n]*:(.+)`, "igm"))].map((m) => m[1].trim()); + const formatAdr = (adr: string) => + adr.split(";").map((p) => p.trim()).filter(Boolean).join(", "); + return { + org: get("ORG"), + jobTitle: get("TITLE"), + emails: getAll("EMAIL"), + phones: getAll("TEL"), + addresses: getAll("ADR").map(formatAdr), + note: get("NOTE"), + birthday: get("BDAY"), + website: get("URL"), + }; +} + +function parseICS(text: string): ParsedEvent { + const unfolded = text.replace(/\r?\n[ \t]/g, ""); + const get = (field: string) => { + const m = unfolded.match(new RegExp(`^${field}[^:\\r\\n]*:(.+)`, "im")); + return m ? m[1].trim() : undefined; + }; + const organizer = get("ORGANIZER"); + const organizerName = organizer?.match(/CN=([^;:]+)/)?.[1] ?? organizer; + const location = get("LOCATION"); + const description = get("DESCRIPTION")?.replace(/\\n/g, "\n").replace(/\\,/g, ","); + return { + location: location || undefined, + description: description || undefined, + status: get("STATUS"), + organizer: organizerName || undefined, + }; +} + +function vCardUrlFrom(thumbnailUrl: string): string | null { + const base = thumbnailUrl.split("?")[0]; + if (!base.includes("/dav/addressbooks/")) return null; + return base; +} + +function contactUrlFrom(entry: NextcloudEntry): string { + const m = entry.resourceUrl.match(/^(https?:\/\/[^/]+)\/apps\/contacts\/direct\/contact\/(.+)$/); + if (!m) return entry.resourceUrl; + const key = Buffer.from(m[2]).toString("base64"); + return `${m[1]}/apps/contacts/All%20contacts/${key}`; +} + +// The base64 in the calendar edit URL encodes the CalDAV path (already URL-encoded). +// Re-encoding each segment makes it work with the DAV server. +function calDavUrlFrom(resourceUrl: string): string | null { + // Matches /apps/calendar/edit/{base64} or /apps/calendar/.../edit/full/{base64} + const m = resourceUrl.match(/\/apps\/calendar\/(?:[^/]*\/)*edit\/(?:full\/)?([A-Za-z0-9+/]*={0,2})/); + if (!m) return null; + const origin = resourceUrl.match(/^(https?:\/\/[^/]+)/)?.[1]; + if (!origin) return null; + const path = Buffer.from(m[1], "base64").toString("utf8"); + const encodedPath = path.split("/").map((seg) => encodeURIComponent(seg)).join("/"); + return `${origin}${encodedPath}`; +} + +// Convert a calendar resourceUrl to the dayGridMonth/now/edit/full/... format. +// The resourceUrl base64 encodes a single-encoded DAV path; the calendar app expects double-encoded. +// The createdAt timestamp (from entry.attributes.createdAt) is the event occurrence's Unix timestamp. +function calendarAppUrlFrom(resourceUrl: string, createdAt?: string): string { + const prefixMatch = resourceUrl.match(/^(https?:\/\/[^/]+)\/apps\/calendar\/edit\//); + if (!prefixMatch) return resourceUrl; + const origin = prefixMatch[1]; + const rest = resourceUrl.slice(prefixMatch[0].length); + const partsMatch = rest.match(/^([A-Za-z0-9+/]*={0,2})/); + if (!partsMatch) return resourceUrl; + const rawPath = Buffer.from(partsMatch[1], "base64").toString("utf8"); + const doubleEncoded = rawPath.split("/").map((seg) => encodeURIComponent(seg)).join("/"); + const newBase64 = Buffer.from(doubleEncoded).toString("base64"); + const ts = createdAt ? `/${createdAt}` : ""; + return `${origin}/apps/calendar/dayGridMonth/now/edit/full/${newBase64}${ts}`; +} + +function mailApiUrlFrom(resourceUrl: string): string | null { + // The thread ID in the URL is the databaseId of the message + const m = resourceUrl.match(/\/apps\/mail\/box\/\d+\/thread\/(\d+)/); + if (!m) return null; + const origin = resourceUrl.match(/^(https?:\/\/[^/]+)/)?.[1]; + if (!origin) return null; + return `${origin}/apps/mail/api/messages/${m[1]}/body`; +} + +function parseMailSubline(subline: string): { sender: string; date: string } { + const idx = subline.lastIndexOf(" \u2013 "); + if (idx === -1) return { sender: "", date: subline }; + return { sender: subline.slice(0, idx), date: subline.slice(idx + 3) }; +} + +async function searchProvider( + baseUrl: string, + auth: string, + providerId: string, + term: string +): Promise { + const url = `${baseUrl}/ocs/v2.php/search/providers/${providerId}/search?term=${encodeURIComponent(term)}&format=json`; + const response = await fetch(url, { + headers: { "OCS-APIRequest": "true", Authorization: `Basic ${auth}` }, + }); + if (!response.ok) { + if (response.status === 404) return []; + throw new Error(`${providerId}: HTTP ${response.status}`); + } + const data = (await response.json()) as ProviderSearchResponse; + return data.ocs.data.entries ?? []; +} + +export default function Command({ fallbackText }: LaunchProps) { + const [searchText, setSearchText] = useState(fallbackText ?? ""); + const [files, setFiles] = useState([]); + const [contacts, setContacts] = useState([]); + const [events, setEvents] = useState([]); + const [mails, setMails] = useState([]); + const [isLoading, setIsLoading] = useState(false); + + const [vCards, setVCards] = useState>({}); + const [loadingVCards, setLoadingVCards] = useState>(new Set()); + const [parsedEvents, setParsedEvents] = useState>({}); + const [loadingEvents, setLoadingEvents] = useState>(new Set()); + const [parsedMails, setParsedMails] = useState>({}); + const [loadingMails, setLoadingMails] = useState>(new Set()); + + useEffect(() => { + async function search() { + if (!searchText) { + setFiles([]); + setContacts([]); + setEvents([]); + setMails([]); + return; + } + setIsLoading(true); + const { url, username, token } = getPreferenceValues(); + const auth = Buffer.from(`${username}:${token}`).toString("base64"); + try { + const [fileResults, contactResults, eventResults, mailResults] = await Promise.all([ + searchProvider(url, auth, "files", searchText), + searchProvider(url, auth, "contacts", searchText), + searchProvider(url, auth, "calendar", searchText), + searchProvider(url, auth, "mail", searchText), + ]); + setFiles(fileResults); + setContacts(contactResults); + setEvents(eventResults); + setMails(mailResults); + } catch (error) { + showToast({ + style: Toast.Style.Failure, + title: "Search Failed", + message: error instanceof Error ? error.message : "Unknown error", + }); + } finally { + setIsLoading(false); + } + } + const timeout = setTimeout(search, 300); + return () => clearTimeout(timeout); + }, [searchText]); + + function handleSelectionChange(id: string | null) { + if (!id) return; + const { token, username } = getPreferenceValues(); + const auth = Buffer.from(`${username}:${token}`).toString("base64"); + + // Contacts: lazy vCard fetch + const contact = contacts.find((c) => c.resourceUrl === id); + if (contact?.thumbnailUrl && !vCards[id] && !loadingVCards.has(id)) { + const vcardUrl = vCardUrlFrom(contact.thumbnailUrl); + if (vcardUrl) { + setLoadingVCards((prev) => new Set(prev).add(id)); + fetch(vcardUrl, { headers: { Authorization: `Basic ${auth}` } }) + .then((r) => (r.ok ? r.text() : null)) + .then((text) => { + if (text) setVCards((prev) => ({ ...prev, [id]: parseVCard(text) })); + }) + .finally(() => setLoadingVCards((prev) => { const n = new Set(prev); n.delete(id); return n; })); + } + } + + // Events: lazy ICS fetch + const event = events.find((e) => e.resourceUrl === id); + if (event && !parsedEvents[id] && !loadingEvents.has(id)) { + const icsUrl = calDavUrlFrom(event.resourceUrl); + if (icsUrl) { + setLoadingEvents((prev) => new Set(prev).add(id)); + fetch(icsUrl, { headers: { Authorization: `Basic ${auth}` } }) + .then((r) => (r.ok ? r.text() : null)) + .then((text) => { + if (text) setParsedEvents((prev) => ({ ...prev, [id]: parseICS(text) })); + }) + .finally(() => setLoadingEvents((prev) => { const n = new Set(prev); n.delete(id); return n; })); + } + } + + // Mails: lazy API fetch + const mail = mails.find((m) => m.resourceUrl === id); + if (mail && !parsedMails[id] && !loadingMails.has(id)) { + const apiUrl = mailApiUrlFrom(mail.resourceUrl); + if (apiUrl) { + setLoadingMails((prev) => new Set(prev).add(id)); + const origin = mail.resourceUrl.match(/^(https?:\/\/[^/]+)/)?.[1] ?? ""; + const headers = { Authorization: `Basic ${auth}`, "OCS-APIRequest": "true" }; + fetch(apiUrl, { headers }) + .then((r) => (r.ok ? r.json() : null)) + .then((data) => { + if (!data) return; + const rawBody: string = data.body ?? ""; + let bodyMarkdown: string | undefined; + if (rawBody) { + bodyMarkdown = rawBody + .replace(/]*>[\s\S]*?<\/style>/gi, "") + .replace(/]*>[\s\S]*?<\/script>/gi, "") + .replace(//gi, "\n") + .replace(/<\/p>/gi, "\n\n") + .replace(/<\/div>/gi, "\n") + .replace(/<\/li>/gi, "\n") + .replace(/]*>/gi, "- ") + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/\n{3,}/g, "\n\n") + .trim(); + } + setParsedMails((prev) => ({ + ...prev, + [id]: { + from: data.from ?? [], + to: data.to ?? [], + cc: data.cc ?? [], + hasAttachments: data.flags?.hasAttachments ?? false, + seen: data.flags?.seen ?? true, + subject: data.subject || undefined, + bodyMarkdown: bodyMarkdown || undefined, + previewText: undefined, + }, + })); + }) + .finally(() => setLoadingMails((prev) => { const n = new Set(prev); n.delete(id); return n; })); + } + } + } + + const isEmpty = files.length === 0 && contacts.length === 0 && events.length === 0 && mails.length === 0; + + return ( + + {isEmpty && !isLoading && ( + + )} + + {files.length > 0 && ( + + {files.map((item, index) => ( + + {item.attributes?.path && ( + + )} + {item.attributes?.mimetype && ( + + )} + {item.subline && ( + + )} + + } + /> + } + actions={ + + + + {item.attributes?.path && ( + + )} + + } + /> + ))} + + )} + + {contacts.length > 0 && ( + + {contacts.map((item, index) => { + const vcard = vCards[item.resourceUrl]; + const isLoadingVCard = loadingVCards.has(item.resourceUrl); + const emails = vcard?.emails.length ? vcard.emails : item.attributes?.email ? [item.attributes.email] : []; + const phones = vcard?.phones.length ? vcard.phones : item.attributes?.phoneNumber ? [item.attributes.phoneNumber] : []; + const openUrl = contactUrlFrom(item); + return ( + + {emails.map((email) => ( + + ))} + {phones.map((phone) => ( + + ))} + {vcard?.org && } + {vcard?.jobTitle && } + {vcard?.birthday && } + {vcard?.website && ( + + )} + {(vcard?.addresses ?? []).map((adr, i) => ( + + ))} + {vcard?.note && ( + <> + + + + )} + + } + /> + } + actions={ + + + {emails.map((email) => ( + + ))} + {phones.map((phone) => ( + + ))} + {vcard?.org && } + {vcard?.jobTitle && } + {(vcard?.addresses ?? []).map((adr) => ( + + ))} + {vcard?.website && } + {vcard?.birthday && } + {vcard?.note && } + + } + /> + ); + })} + + )} + + {events.length > 0 && ( + + {events.map((item, index) => { + const ev = parsedEvents[item.resourceUrl]; + const isLoadingEvent = loadingEvents.has(item.resourceUrl); + return ( + + {item.subline && } + {ev?.location && } + {ev?.organizer && } + {ev?.status && } + {ev?.description && ( + <> + + + + )} + + } + /> + } + actions={ + + + + {item.subline && } + {ev?.location && } + {ev?.description && } + + } + /> + ); + })} + + )} + + {mails.length > 0 && ( + + {mails.map((item, index) => { + const mail = parsedMails[item.resourceUrl]; + const isLoadingMail = loadingMails.has(item.resourceUrl); + const { sender, date } = parseMailSubline(item.subline); + const formatAddresses = (addrs: MailAddress[]) => + addrs.map((a) => (a.label && a.label !== a.email ? `${a.label} <${a.email}>` : a.email)).join(", "); + return ( + + + {mail ? ( + <> + {mail.from.length > 0 && ( + + )} + {mail.to.length > 0 && ( + + )} + {mail.cc.length > 0 && ( + + )} + + {mail.hasAttachments && ( + + )} + {!mail.bodyMarkdown && mail.previewText && ( + <> + + + + )} + + ) : ( + <> + {sender && } + {date && } + + )} + + } + /> + } + actions={ + + + + {mail?.from.length + ? mail.from.map((a) => ( + + )) + : sender && } + + } + /> + ); + })} + + )} + + ); +} diff --git a/extensions/nextcloud/tsconfig.json b/extensions/nextcloud/tsconfig.json new file mode 100644 index 00000000..f489f83f --- /dev/null +++ b/extensions/nextcloud/tsconfig.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "include": ["src/**/*"], + "compilerOptions": { + "module": "commonjs", + "target": "es2020", + "strict": true, + "isolatedModules": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "jsx": "react-jsx" + } +}