From 7b0d0eefd0c0c238ea4440c07f39f9fb926e62de Mon Sep 17 00:00:00 2001 From: fahreddinozcan Date: Wed, 18 Sep 2024 17:41:47 +0300 Subject: [PATCH 01/65] update eslint --- .eslintrc.json | 54 ---------------------------- bun.lockb | Bin 422787 -> 431241 bytes eslint.config.mjs | 89 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 4 files changed, 90 insertions(+), 55 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 49607f3..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "env": { - "es2024": true - }, - "extends": [ - "eslint:recommended", - "plugin:unicorn/recommended", - "plugin:@typescript-eslint/strict-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked" - ], - "plugins": ["@typescript-eslint", "unicorn"], - "parserOptions": { - "project": "./tsconfig.json" - }, - "ignorePatterns": ["*.config.*"], - "rules": { - "no-console": ["error", { "allow": ["warn", "error"] }], - "@typescript-eslint/no-magic-numbers": [ - "error", - { "ignore": [-1, 0, 1, 100], "ignoreArrayIndexes": true } - ], - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/no-unused-vars": [ - "error", - { "varsIgnorePattern": "^_", "argsIgnorePattern": "^_" } - ], - "@typescript-eslint/prefer-ts-expect-error": "off", - "@typescript-eslint/no-misused-promises": [ - "error", - { - "checksVoidReturn": false - } - ], - "unicorn/prevent-abbreviations": [ - 2, - { - "replacements": { - "args": false, - "props": false, - "db": false - } - } - ], - "no-implicit-coercion": ["error", { "boolean": true }], - "no-extra-boolean-cast": ["error", { "enforceForLogicalOperands": true }], - "no-unneeded-ternary": ["error", { "defaultAssignment": true }], - "unicorn/no-array-reduce": ["off"], - "unicorn/no-nested-ternary": "off" - } -} diff --git a/bun.lockb b/bun.lockb index 5cd75e62bad4b977cfb8b9259fb2c2dbb4343558..0ac43742411df31f746f51e8a9889454220cd851 100755 GIT binary patch delta 73934 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 delta 69232 zcmeFad0bW1+xNdWaFDHuLyDn-qKR3GGY7>ujyU6#D4G~5D2kv=W)@H;Wg2EX*^)_- zMY9c-Hc~c_HqcCBN?A$TK%+F%@AFyLI*8qUd)>e1xu4hlkGrn(Ue{+0d+jyt;ov?S z@9Vt&i{P6g`W!0uUpB0L)-~ttczpQG4#s0U4s4s;^_`<1KYn21-B&D(;YkUl&HJr=9PGC~j+VsUpv&A$F3;yA)?{rJr0H-A! zcMHSl0w$*~&RCL~zO)WL^$`JvaSqrG{(0b<)byuUjJN_Mm;Sf zeJR^4(k1B=Q6-jh9J^`@exUh^=40Tw(91ylUvQH!zaRzy9^U038z~uN!dV~>v!yJn}d^+VH4whC6=`6?PJ^r-=qtbc2ccK^`-y9q_+hqYdp4G6>$A~KEqsK%}`jXVe zsfO`zSE)uXkm+4uckoAyL8d3;|v z4PI~n)nTvf(Ja+`^L%v}w%ac_?8{z~#}h7$1ey1JkcV1nulDPde*~#Gu(FqBX5=hg zHt1dWZ0>^~QzxZmCMPXfYwU&3e$UBCU6SiIjE#Dam3<_Cy9=e%z3|xqx4`ESegUEf z3#MHp{hEV(?2ypDD&6RUH3+b2&e63p=T#$_DeyVuaA%lR)f?J z+7n&w8Q&un4`cDNj5X<*hA{y?4`cQ~sn%$a)&Buxx=gMX*wzgaePwET>dMrtY(VL& z>~~z9^8eCxs0Eq(Ef5o~U?#{}m!&PWcz> zY9DaPNVp$lY7(GYT1!Ay+q>3fCa+9hf(CtIj8r#c71mUAt9S2Tj+NTH z3ARJND>TzUHbcKyRc?O4r4TrlD^7hu+22>-R;)nf~wuVP?t_HQdVJ zv%TK}S@HIhWKMiH(J-(86dVVszogRTW6_-~HA(}S@o7Y`0uO;a;;kSn*hTMfif)ma zSna5{)cUW`S)mh}hd{1^_$)6E`PlT{WqC9F zd`A2}+c2=?7km!#v`_)EfMxMg)6MXCBv)!?fNU9W`ge5t`{&95JP5x%;&0RGxtw8u z8aE_J3oo4~2Qqh_5u<8076OOvP>>bs1#*WSHT|{z_wzxDJ*s85{ImtqewTvGwHn98 z>ZN5YNy=Jg7%LNH0{jHB{j!%Or>CZ@HBM@Ox*(Z|9fcalT*GC41pc^CFTPgc*G*{lP*ui`eYdU;ZuJUWCh#m^er?yqIGZz zENGJ={qSwFoF5zDvmK}4?9~}O3?HY?g7!G5P_Po|`WP6(FQ5Q+*nc`7EKZYxN><7c zoC2R69SH`3oj{JHn^wq3T9zT@?FTt9?uO3t7lHJTtdfhpsjE>=K7@5Tq(^Y`I;ok+aX*Yn3PePM&2j#j8KEl}G0bGW7 z@^VlO{dF=@ak9xz&q1@k4S_>ARu?$vDmmhFK^FXw?xJf@@cHmZ=^b>}J2bTa9@6zg z{EZ+F;14WnY;vEgr3>odv&+0K-tI!QKWp?3B07TJig^3(`D>(rE7!~NO`0loa+^qo0iW9@oiqS+%rZ_S#j+Szo~C z=&uIZRR=*<_!+HdEXu*SHjIa~zsv3u*gN03LFP*ECh6FfxYo|V+3OMb?BGS4rL=t@ z+vh)B1m1@9?3eCE(qTCu2g)K$Ztitu(#n+?*~^TyEi$U)hO z_^hqk`%uFe4Zj=wb|{|>FbF;xEWaS*e#v+~1nzioR#v|?%aXDK9*~L^f^7dq85wDd zlCqL9zg5AL%VaI}p47b8f3tD;Y?f91GLy42*BbI^7=;f>v#jd3Iwv_N*%-Z><>H=e zg9_lJXAf-OX`uJGHa;x%^j>$xB0Ia?drtA*lZ~?1w(o6CeN-yh!@jS5xBM7XjWcU7 z$YX5@a?#>-88>g$e|k~|TzXP^2G7hV;WPaakooPWWl-T>J8cE>T?wCy=xd1Q`RGZ_ zhjhNIHJRukoQQI9eB3^GR@!RlbF!m7@HzG0h0g+FD`ZE*H2Z2^@VvCu10d6F1bJFW z2YLF~j&fMhl|D;phZtbS2i&wHf1kb%=B<|V06 ze~_Jqv|OuWdwc?)ORnFm;wOV@35L#6UIaO` zyodP&e75g>AZN<$Ap3Tky|shex(54VY>xd-hfevQy)J3`zac%m4nF%}704zSWl9qd z2Dy*F*ElydJ2@-cFpgJAor*x_dl%%XyyM$aZdU5j)bx}L<3;GK^W$KkVazKiL4egs z%g8~)7)I_p;+IQ;g7qK^#NFK5tW|3b3>G!a?tNF9bSKF8C0GgiC9h6fm6W|KH!01y z!rtGpTmHssS;kj_U6E?K_T3bHPB!Ay`NWER*B9HJQn zGTqPbi~bSF{k#BTfaDh>XD!M}O^#D1<*y{aOB(Dw9zV|%P3O;*h&9c2S;?2Pm)oC^-a8Jm9B=-2d&yAE zvLEf#E&tmu_29`_oQb8;c=0P~lvSyjNf>s*B@wE)H??LX} z`&^3;2393yW&Qn}cLM3S2G96b@{I*itNa4*6RM`?Rv0s!NypKJJnZ4$%dC(GTtW^_-bv-1Ox`i>og8{B4=?b}67OvDP6F?2^UfacEcDKz zm+h-NcMIF-YpO) zkt#jMRQ>y=y}C;`^96frm)>TE{ZyCnW~Oa+oe+TJ942qtGrBHqcPTuM>d!ivs- zgI)V441~&=(hKBJd9SnN3D*9c7N)vx2!zj`U7nSkwHR~4SNp%XME5>O;gi6At5z(1 z!JZM)&F8N+c4kO~8Df`(IQicqDF@5q)P8Es_7>F&=K$(;;S!I*s}|80dzYebr!+#g)$$C7v4FRh`rmKX`L;C1Kb>OoKaP6fE+If*_T!@G>>msBZjz-uwbPGN20Njp{Q&Q8H z^vhXg#14=qwO4h$Ab*8UyLync(-KIQ{<@Mw?EZ>BwObd1@@E*b4HueEFNxz7$B zyH=8JX$J{Q>~_HpVp}z%WMIN5@8+*V`qr9*pH0e7;!yHvrF*#s9iJO<8!K|-FZTcIo3{?;4!bUOYr%$T{FRB`Cuf@MAdxkup?1+ z!bFc*XqQa%Sg%7Lp{krT&TY1^gC}{cSWL*Mro+gyOQ1atZMe#R?5U^#IAfJlHqLF0 zKXsQGRy9bTl@Gw-r%CVQ+;pfwd}ori8@dS5$fg4M<+r8hrZL!Eqkz6ehy}WOUg{6WwMnyClwIF1KsqJgx`OVI%CFlcHT; zctciCj5;~8V`JUcLU^N**L03Wm{9@nV(8grC!_r6FtZhcaT2R!WN|HqH$@ftFhZm4 zofD$1?-3g5O<@hhv}2=KHqx6b?3x)Kj+B`m^J6;!pZKB$pO4u!Gd)%aEc zm)Z%lJk~?dF#HNSQghYA8)+|?7;VkNjEaZu%W-5q0*{pqP+mPe9+tnIG{$WW!I_&L zngre|cx-3n8ygh>hs_*dC%vy6*0hBxLyhf;It~ zN?~@lYvMiTYCCw2$9&RGz-NqIg3l}LnmHb;qN`zCtn%Y1tl!~rPlg>f(QOUIT5}mZ z%m|dd&90g2vFf4msF7l(+w5;ABzUarF?FXwLrac!TYtfefaj-b+YgH`Js*0m9C*|0 zkTKD&ml3+uUN9!w>fYTjh9E@?yKIu%x$I9&?P2GZ>WjzLuyF^oCCw1^f!t+-Z z7}(Q0y4Zc|;4w}H$uo9BBBp6i`_{x5YvlQcF%D5^iHD;6;7qU=jE}YsBQzSa4@)z< z+9eA;t|_>J9AxjDA8q9!q&pdVZh*(q{hVXna1i0*8Fo^F+uUT=T;{QkL1SrZQL=jW z_DR9BsSVwg%BqfhAQgzz8$>8V})KQ<@lRRPbay?_mco^H@u8e&9GU?XWnv>lS!J z?4#(k0|;T4=!h~ubOd#HE;R-(Kn6CD$raB^gvSy%yQA!yRFCUjxF}_EwB1F<;@ail8uF&0*IOcv1F(716kQ3r_R6Mi1r+ zhodzM?2@kc(Ec4ayxD1KcVW?C=jd*je zosjOawn5XQVyfGE3!aRMusLqiWd~i|9&0Bw87oQYZk)+#vUz3>&hc1}VdrdZOqTI(R~rnp^u;LTNouN97#OPLy|t~u}qu+3c8Av9eL ztPc_5bix4I8Wn(wa%bvz%{05@a*uhRU2{3k)QDl1W2DC8?1E*Q<4hH6T@H`!g4HSx z>#FwDNVQJD*ue zuk@IHcEXh&YZLa!nxf$GZlA`n_TejItl8*-Nf4zbx1aWAx~-G&kOvuf#)(4prCB-G za^X!t9OoK_Bs`Yla>Bw*tbTbObE;i~&#iWFzQ=ssPQd3mc1b?2fsku5lD4+XV%{9?Q4IWMt=&-Nhq2-d)o4pVO<6fJ4Lx%*gM(@*Lkd2GYtb1 z0%IOy#plUXE=mZx3vQv&l9rnehQC`fy$-2O`M>w_qZ}IK_O}_c*suJ z=yCl3f2e&lF52onTbfmk5iW8!cwCpq^TGfZ%GRq0v1IHAXX-%o4Tk_4{edVuc$3F+ zps*VdKhy0x1TR|6k#pzDMF>9)t!{@RQ zz!k}=gvTjh*e~j1cR|Wh%;# zj*`1x>dhO5@w^CL1QMZ{umIddkCzOt3WSEMYuH~9;%XzO)V>RvsyN4O<-n7bh-bI^ z;BgheIRhns29LX!Q~E`TG6~f>;93JO(%yMZwDk}|BUCCbT7SWdfrnJ^CN7i(-`6fn za=Y^3#c&C8J%>ljj{a%I^A&jSyuQ&H=5f6RZ7dteJl75`_E?uL zmNd8;8SgfW?UG`TImoU-%mpcOr-UX(uU-KU^*KByG@i;Uf zLd#UBS2|LtP!>W{>;+O!yRr-%duWC%6KXPA>)`1rk7GFu5A#y*t?#O)IMjrH z&!pofyInuSi&w*M$?9fxvL1uSMF?XQOWhyvr1l)-Q!<;HB*$&t0Z-z1ISmJM5<5mV zS8NtfN*waV2*oKKmx`8=-PDYz&|G-QQdu0Q`~y5pDSaSQa+l4#dSgs`R* zN4ugfM=RSQWzjANp#{`@e!ASAcV~=i@mj-}t&%^9&_a8`ozbpNR~W`(mGKIMl2qtN zgl4EB#;#)sMc|Go_%4rSUg@3V7>w3YY)3aL{RpzZ0S9 zcF27yUIrwtt*jA+-gZ28jT?_Y5+3wePeWsC;>UW)Y;W~z;Zv{LK z0d+CxIt6d6Iv)(X-aD5#SJ%TEja2Hc%z6c$K3^fu+9=DcoNAfDuvwdh+QW6>Lbvq}JT|LpH51P~9`RTyn`EKIwcK1xo6UNN zJ4u~z;{lKRZlwm#+wgE=#kr5mb>{~jxz!GSLS2hJ;jvn7_3n>TVG=y9X1HQVbGsgaHz#f#%P0#7ei*>2aUZH6(C4=k)35aM9PM8(D6 z`|vmeaA}CU-C`L6YK62Wz+;18%qF?5E47CqfHD3EJT^KWO`r>Yf+uHScH$sMPHISr zS-Z}zdB)>93~hvyG|E>!dGra|ZXX^WW6j$x`@E3NULLsSN(c{6ZbgWDQ+IP#mG=KSuKX2U~7 z)Mg$$Hk;fs-K;$se6PV{2`;r}_?LSRJPge+sma5mivTzr54ae>C_Mmgj@mJ&z~prrjq6 zi?<$Lio~H+Pr{3VXQ|7K-uJ83=86#k2*g5`etj9@je?#+JH-CcsyjR14&THi4NHz4}aS`-!jt#(x z2A&5VhAW;Ae`c4w=W(64kApS@&%q}kGzPKfs7vup@N|VRrVhfJs&Zl}H+$MO?|aNP zcJK!t*QHPKI)#r)A4iC@T~>z^@R(n9jcfSRT%$NOb|J)5tXyw>1&>o2ck_7OgKt}^ zJ=V%+njWuUnm+~aVwE0K%%|ZQ`_>O}Me(d0vRYX1mtnz&Jg$?_rr05eqFu4iVF;?w z=BCi+2u+}7&8m?8#Prw^6`&opZ1{X#VIQuEF^AZ}hdtJF&r3Dba%Ea}$zcz^Zml`& zalQHiM-lgA?ng(c1#}ofYM*?@@{z|n0e_~dHXf6h!|jA49@n}T(f#U4(LRLm2=e`C z*H;MPyo$1>z2vR+HiSm2x_*cdyB$r6r*N(9;98F>?qxo7#Tm}rVVBf;tRwK*KRf)snB%I`~fX6s=5aM2d z*K|c>1sss+tnNr$Q{c&EeGx*O0n(`l;c@*$tuY|2gEHu4y&I=J)#29F@Z@xaVdeA0 zLHpLE7@uzr+MPd(vBF=IK`tkcrSLe9v7%z#y%ipZjXL$1Z`i?~d+=>q0zOCEC7*k& zM_!lI?bTxWEj-o-J&qgRs5fMSsJvDtym%GITm0kjVwz6h80W!t9t^L9I*+UTO%AW4 ztD~(S5E_Ln7}*7G*Tq%rO57T{Ja2I(FtiaNJONI?!x4nykX9Nx^ljNSx(W?57alv8 z11!o94jz#sa}`1uB?z^AhvN((Yb-)MURhMv!y7Fbar%D+o}@S5MS&{4n<15+7Y{4p z4SN8j&*Cw-qZJ1PJUXQ?c^(eFu<b;{gmiIuCO`IlPJxh& zXxAo$hT1#pM+8(G`1>|>s=}i-^FzZ(X!7R4J014~yje|g0f%s}*W@L`OKtM1;3YMA z{cD=1+zfANQ{0d6lAFA_hvj}9BNlbpcZL`AQS(x=;4N&*_b$AqTDvYfg43;i^xF}B z2)ON?-;eOCMaSAlzl(MqK?nl_p$k6thO(PNFR0MYQzQI7;pkwpc!cl`079irp}M9} z#4&GdZd0hDDdhjDH#V**RE$upRHZ4@<1=a@KaKEH0q$%!Lb%gH=!d3I$wFr$wB3S@JzmVc&GRDJWoLX|NVt5>z^7!L@?a9qm^aZhT8y@`uM&4Gqs6aK7vPwUi?dAQ!-!WQXKL<4+k%{`6QqzLCc`(ww>Q zCa4;Oy%*&N2VbehM_Zlhz1J5>g>GvmJobQGlidK1l~&iPu9xA(+6&$t5%8_|SePXV z9@{`JVRz{`xj3Ehouovk;mYC~cx(~*Znr{vxEH_$C>-fHUVTsaUd{ySTL)`1Ja!cx zr%%Ddb?wP5M8FTS1NCs$9PK3dm>z2bMDKp0m|_ZYV-R3H>--}cSKYTxLWtGI0KgF1 z3=e;rfg$t;LUGXLOZlEZc@LHKS^#ed;-rJO!W#;&l{&b?@K{T^nK|#2Hy^M0uY<=5 zsjEEK8;rAeCPlma8@Rml(bZUlq{>`Hi{On#dbzv&2p)R@eS(^H{8^n6@HOQ`gt$k! zSH2Ejq}oT>xTpX)EKaSwF5h3++4v68H5;M9_Ri7K*7XQ6xtsti;Ej{?&*K}_U)dNu z!z3ca(T-CuPTqIH^Qcs1$D#t@M8UyT?O#y=zeyEkrX|ATRFzqAllJ5U@gh7nugt=> zze^`bqs@fJL4eVW8FMo{)=&=b06gx_#|ayZYt298Iv8ik&2DQdJT{kjTj8O|$S`2T36LO9@A^;%{5=r$lywfFI+}JFSbv3-xAa8 z5jvgfXL!v@H_T?`ZGbn{TMySk#yJaGqkg8@tb_&dPM5F?-Xw1x>l=8d>o?S=dA_UR zosK&QuW4UaYy9OPTN~Ypo*n~FcP?&AoHM+);4z={?zw*ANe|9}C;4zm>Dt0LHK{&9 zNY;q5&+%*nf4wKE_-)y8cpNR5-gxAG8@yTY26GIU+xOLUFxPi+E*)Zy@cA~}xpjyc zgTH%_!@x3f3;tdMULrDxHywY_cS)0X7d$qUigSGl58p@Qo7fBSXMOQr-QvH}KJB%_ zpZHC0iklCwsRXMG-f+aV=hu8bUtj3VbE7^3@wa{Rp`NSOr&r-!sq*vWF%5tJclxBW z9Uc!{PET*c<7y&P!4H2K$g*Xzj)CWacP{VTUAMzaRt*`5KZT1{IZ4iGOARZy@5%QCDdWJT^HN>FN0U22*`8hU(*t))s$p$Z?<+8*3Ik)o)H& z3?2o;i&52hk0F(cg}1{W5c06(Y&H=dOHkEt<-@~wM|iaN973lndnNwZkR_xJLM+FQu)w3scs<2kTo2|+~16wb^o2oqSwKe|kP-@B(&Nc9wy2APm9#=|f zEf4Nv=A zM|i8wd$vp9v2@%@tjGNjJT?aw$HP$pa5wfT&U=eh%k&N$8 z2U~Muq8W=}j9(!`hVpZ ziD@3eg09mUnv*-cLF>)w<9xFWuk2t0+yrCxtvXqAQomX2w|^oJ=wTImCRvk5wBDRdzXwL{g)!Ye%_l)_;3RKA zjftm~XBZ?aR-t{81w60)f1>HET#lAy555ZHksgF`|8KyU{Y@A*lJRfBT(I|H+(_!x znukDc&B^$~FqZd`<`Iw^n6C<`g~J3NQ^odgruz=YjbufB zpo8r+^ZzcK_PGOGCadkgL$+K4j63=T#{9T^R4w`kNWD>$k&HL<@yVLvfBj1KlEHD> z|0gp41jIA{B#@(ix=ugc)PsNmwHf$m4JPUY|3pSD#0LvX*6BzFQ}DqGF4sEAKFR7MrzW(R>yD9I>}(6_W#bI6jigblMH^Sc?h)NAES6CWkmi%#NQJ(`GE+1i-NdV z{H%BIi{`H&kMDQQKS5TEB7%mg>7(iEqi2LK1hzm+kQrKo+(>qOC++{AkXeKA!E(Fm za+=5!J|nt;tYLSZpgAe^&^pPE4+ojPx8?;po@99!X`f`UA3m5qLhB^`{Qf#H0A$=C z%^_MJN)a2$f}^zmPvp8i7V&MtOF$-##|NkQe31DQwSF0h1Iag*Xdwk;!WG~Jpsn?7 znhwYsZwFb>4(;Ej<4d((2C^&f1v!X!gB&Y+LFV5FGXK+{i`RV5YvDzm;3W|M8?R`- z3bJBvXuk^N4nENShdTZU$Q>Nj{-+=}lKN+wpM#tY-+;axf8Qa1|BWB;!M<$(Ip|nT z?$`xVw=`RWJhF3j{CQgM3gUmGoA!Hx?2`T!(VFt*JWRtA{ znK4ht=W7;#;n2%LR`3CkJK6{G$X)q|GJYb+;-+Yw zD_VBLgdN8OR+k(gl$0@ieWcgQ`Pxe1_InYoBC%re>CA zwvNyC)9V@q7M!Oe{)s&Dt93ldg0BH76>6R20o({OzDVo;kzIAdEjr;DbS};{yE$pO zW&lT&aSPIL*z5$^D!1#rcW9P@+(_>HPLSjHUagbV?*p0t0j)PD^@pG{>QNmJ%2oLu zEi@-9^sLtZiQM6HI-aCop?#7Sd|B(SXjbZYk`+4O?WO}dqB+?zuj`C&==gskqu$o> z|HcVOcOD0yCW9gQ_+-sPLDs0dPSBhz`+TjFtXOZ5`7Y2pN&O=2lPs^F)(2?4IeAN- zAFU&rlLe1}PF@VMAP>ljjM4r$9Ulv_si%P4NCs!%gZXD_on&y1*5`_zZ!o}w2_S2< z1mq4=B*7V^zD%c2)$#vCj-5;$-<;e}mez%srp<-*NYJ1Ykj(J2_WzAc@&`V+R{F6y z{sVac{)j&p3fW{lGD{~faFM&{D>?^c{9KSn zdMU_!i6Ada)3l!saw8eP3S-g(I`kO$OznM=(7`PGSM$#|RKDi!#J1qXp*a75@fSMJ&PU|EqFiHFWMy8vFbi6c~uhWz5;ja`w-y8T} zVJBXGUaM>Nze0|`|Cc-Fbi7d?U~{T527LzNjUt_(IXOtSLTAF8bv#Mm*8V@zX`P6x zzYa)tuTDlX_^|f>i5%`v=y;N2cc11{T5nEP<7w#RGdkUKIvtp=mW`Jn@Hi@U!dG3`Pc{i5T+e7@SkXv_26 z{|fcG{Xba&9?N<7;1LJw10(5o2HCP*HAC}tg3y0pJ0$E6Jsg~^pJcuj+9&C!X`f_;GPJ%5lD8CpkyFElV>0)jHiZI-L;xf2MGz&w|(M3?vKMpna0@g__rC zUa#Xx#%~0fZn>v+GlNR#ih*n1O#%QPN?X7 zb1jy4mh-HZo0H`{r}gG!G0#J1{0o}fL`8Thrqn=;e!c2prgqh zRcrka$UBSAK(4wcG{4dD--6somh(Nx{6A>_C+(jCxt$8os}BWc_*p0T1>_R>7sws? zVIs1nT5v-C2XaRNI$bNBt~nWh4s^1$X5ghdVIat-3+HK{WEXY?S%EOEHz(&={c zcW?o9XF(x)n8ifsVg~Ev&B*p-Hg)tNVeY??Kh)*p*&V6h}E0` z^0=mgY-s-a0(US6WWjSa6F_bx^?91qdTL`nuF%{_R`5bP*e>LCp#-D=J~U%NeU+1ank!#U%yk(^^^zbZfb zRr!DU%KYqC<+7Zf{i{sQ+*{{mwnt@-Db0c|m^-o`sGoCsxH=2JF zPQ95g_Y}S3Nwif(k*<4N6QGR0={jDKS@2B?#ZF#5_T@AmT=gvwuEZ2Ug&^n-C8i511)*h1%oS7#!tYdKo}gL~u}g`Cf?7f3 zT}mtx)CpqlR${TBUJzTZ#8N?nAnqO|mJ1pM@%Jimx4{2C1+&jFNl3siKT)DLELjnEEhBi;wzN6Tj2k^@)8Am1%WRpF-1@z z2->g2bU~#c^hG7+3aSL*FDWrkP%VgfS&4;$T0!J1N-Pr831TXhSS+X)#J;M;QbB_t z?tl`@1&xCEgG$^j@PAEtiGsa?z}JcDA+3qJf_4HL4_dbQzfPgDg~jRDKS@2B?$jqiFtx* zLBw$-77A(wk#$Ne64VJ|zEEPZpk5GrLW!k<20`3OC6)^s1@T`haks$#E9E5$_6h>O zR$_{vLJ;(g64M2hg3x*;<_f9=;omATPf#t0_)dw1f?7f3_ev}h)CppKP-3y5UJ(1E z5=#XQg1DcQST1N3#Gg{)Zh?P;@)8Am1%W>+F-1@z2>L~d>4Hi@=&wr56;uhre^X+f zpjr^|yAlfpwSve$lvpIF6U6+f#9~3cAhuD7rGf@Q++Rv87c?qti}%5`!nWP~bo@<) zM8RG`ppOz$1QmiHUnQmsDg~i_O3W2h3Bp}U%o9`#BK(zDD5w=gwoqb`piU4Ipu}Q9 zy&%?7VyU1(5Z6+P<$^{*d@CjH7Wki|yhOoXL11eorU)toL4it47gP#D+bA(tP$dX& ztHeA(wIHIM5(@>jg2?ttEE3cSV$M}!v7lZM+d+w?f(AicMV{5Z*S`aZviG_k%LF8a1776MEF+-GC zET|X64pm~Qpg|B9sl;+Yqafa`#N7h_DCH#z_6h=rDKSM*AqX0-#B@QWAT(Nuxq>P| z_y{HD391DV7b~$)P%DUxQDTvxP7vc!VzHoJ5Ia(drGf@Q+$bfM3mOISqm{T@;6Fxr ziGsa?z_Ch95mX3*#wjsfP$>wFRbsB7N)SF?iFtx*LBs?l77A(wkrS0zB&ZX_Oj2U8 zpk5F=S&5~B20`2uC6)^s1@TjrxLe>Kr@TbLUP0hAC8h`}1VPi4m@cRkgw9Z6uAoW~ zK2wQ#f@(p;EF~5SY6X#(D6vRTCy1G?#9~3cAU0l!rGf@Q+#DsA3mOISbCtMT;Gdwp zM8RG`;5;R!2r2|Y^Ocw`s1$@=s>EDDl^}e967vMrf`~*V77A(wkqebrB&ZX_T&Bcg zLA@Y0Nr|O`20`2+C6)^s1@ViOxLe@AM0tsVy@J4GC8h`}1VJfEOczuNLYFErS5PGg zU#7%7LA4+vRf&ayT0!J;B^C+l1Tia=SS+X)#HJ~+RL~%ZTdBlyL8Bl(U5UE|{u#)Cguf%deqaglTCGHmZ zZ%|&MV6PysP>Csm3PI3yN=z423PP_}Vy>V{5WZ1~d4g&|#0^R;6x0eLHz~15P$!7l zti)nLy&(2RC6)>r1aU=5EEhBi;4Hi@sIA0Y zL6so<7A58hss$0-lvpUJ6+{**u}DxSh;fuyET|X6ZdYQdpg|B$qoLA4;_4kZ=}Y6X#HN-Pr8 z31aS4VzHoJ5W7o>rGf@Q++9j67c>gu?^fb&fq%L35(Rq&f%hmeMNlCKx>t$mf=WT? zeM-y~R0+cGS7M%^S`hJo5(@>jg2)GzSR|+u#5|1+(ASihE2t8LzplhQLA4;_4J8%|Y6X#R zDzQjVCy1$1VzHoJ5c`%AO9c&rxVL>eImbWn8F>!=$iXxk+cbjDI0LJFreHN_WbC%; zGh?4~j!Eq9cMv=7!!u)_ceZ}0@+Q8E*i(Ot-S3P#q+$c#L+ss$&dmFg^S#7YFm`s$ znX#`pWi={q`um7=9X>PmRcFRw6&v~iVxRb1>_Nx;NX1q$Hu~W{;bCoy!W5l|SpBejwGvm054gCbMPy8+Rq+`~p*eb>**PWU7E9X&(%{zwJj$fP^ z`;C+Ig~}W8DPmvwTkN+^yAvw5ma#b}d`7lzHdDU$bzVH-GZ|B*=rct3I(cUFkG@Xk zNfjOQIif%KTl6Vkr^lBnx}MP+zC1Jc&%VyP5?y*6(L=vFGx}Fw=bEon?zlQcAOBnQ z@4n8UuT^v-qqlv1X6`?Iolhlt_ZNsB_syBnfB8B$f1`3IoOkM#eiW@9L56|< z3!?TN`^o1SA9L5foj?0*@io`%>-W3Q7pBisgZGvG>{DSncLe+T?K{-yGd)1kbW??z zY5S%I_;&O6`ElL8^g!Pi{aoJ{;pG7P%6|5FOC_*+Z8P}3qJn`=yN7CM?lWIiBRykPHomPl-f+GT^1a=>Y2VgPzW7;(T@GsVj7qUGCo4N?@v`KW z&i7q>Uv*_afj3k+*i9#OY=^q~{$iFp?}YevYkdU&a2PKEE(pgz9PYrHbTM5RJI04j zNH^b~B~_PwF9iEuYB~iCKHF9CNsBWw(~&6A8Q8-&!~D!C>*0HkYj73b2f)2t#6;%1 z`>yKg>oLQwfQ-LGD7f!E*%SYja&BsNGGKfMtyNRStjvtGw47D=_vZV|UcR$T*EL7j zJZS&teOP4cuoLQy0|gg>ZJBMCYH8=~KE54%zWvgv>*KrJyl3Bx3w^WvbY>*F&c~TP z&^N&B;Uo<7#g9+nPkd&i5YQ!EBTBRIjyMo|>J?quDulUr~%No{_H~=G1$9hx`07Y~O_= zeOpwveDYWRc?Dmf0Izbw05P|_{SgJw00FV`uJPHd?QSY>vcj_5pwjTiv>UY;2yviJc!Sp3KjW);ZHetxt(}LkrL`Selh+{BLxDoujoobVBxT8?BXTjs4pn zM)^*yg(5seYrC|@J|7C>c9+(=BOFD6{eQO>IS!(gChv3QpzHw~p|yLEj?LB+HVVca z->37QkMKkoxBGRvUI@zz3Gj0PI$b!l$xMXpA*G@Hd&8NcB)kJgC%gduRINR%wLb9U zVBGN|TDuV8Suk#oYV9I~FHs8Km#wwF@E2%pkJkFZKcD^2?QtzeAne0EV0%JqY-YaU zgxg-N4M3Q$SK-FD-Lka?!fw#x<4LUzg7y~Dal}8RwZRB4(RuTq)*}0jZ`$FAe@1KU zw-TN3S*=Av8{tEG#}!&*|K6{)=e0Hr+B9e!+%G`G;LYbRdKlAn!Vh&q zjsw0bkfZw$H1<2kK>;+5?!#KU7-7Bxk)!*F)?yHz3XP+?R+r~Nm~V~b;Qm;r8;S5* z?|V;=>4Y3uOSq(A`&4VA5uOAs4E#)MV-OzAT4DPf8iQkDgSA$t(~X1n1^b57S}ejR zw044T5Mp>d?4%Y?YHb3vFSYii);P-Rwf2?PILi6{c#in5wZ>7t30iOP8?AAW^UdlP zfc09-=P2jP=sA+V)gnjvbTUQpl;-AuUYGPFutdWv*0hCa6ZDf>4ZGZG2NxGM=@AAx=pQdUOxtn zn~&BK5w;QL=Bu@Z2w#ivNYD@D!Cl7VPlGcG^w(k%!hG>Gw*V0JF&4qPYpoT?$}EPl z*}0vgwIv9%iMh4bS~9|HVQzt1OF@_|tlGZ~MAl|0j7`j~oldw6VKy zT&*ofm`Bg8gVt6c%%kVlQETXPb)eLO_}*h43HzK!%B>T~%A~`1RNR7f<_v^+1l&4n zZ56_N*E_c^T3e0qIIVeK0G$bKqSpA{Z|*mX$KOhep<2vF#1zJ2>!!6Fge_VKe;gc|K=WA^(!Y@%^`+Hw9eg(p}!8kSe!f}?p4#onw zU7)oq5$3D1IO6+g?J9)%VlfWn3$>PqFy9Hu?ILLGF||Legxn&asUN~9fO88RZvA!U zs}U~I8sB!#%3K4x4PlP%fm&OSFe{M+4$|7S2=_yn+hDD2K$zEpi@_mUD`b6^LF8y0 z3K2o$I@kf-B~d!z_0WFQ+Aytcg!Z7;ysurq0UCcPAq!NmU28Ad2aNqcR;SyFFb{^?IIZ1` z@ZEY%iKWK=uwi`F8T*xQf@d9Wf$=?_?86CK+lKJ-TH~AInXVYNUu!%`QFCA~LgO}B zYugcy(EZMTD$iCZf#tslhg+OZcq_s$X>FR;c0l7h%ehV08VBmbTAQJ@ozOT2xXlE) zlTsL4hW*cfTF(mJ4x5Dlx+dS4t;IVavT3=+Ypo1n_7l5dj@Ir(I20Pw&ehs3gxU9O z@&v8jg)m?F$0nZ#jbrO>7+)gC7GI#!q5aF@@JD^PB|>Da?}2fUu;9y7LcGQmVZJ-? zE-*=J_aXd%))r~)erSA`Ak#0_+Q=3NV0-&KVapLYg9pWQAJW}f(8X_!t23gyI5l1T zy5;}klG~r(z~5nfbsJyj#y2JNHE+BPngpALxJzJs?e}un3RoI!C5*R4zruJc^gE2V zKYzj+Vc)^{!oPahAy^IUFzh4PkpRQ-4e@K2{|cN+81IqzI>MJ={b2)OyhR!e8w!hr zxnWVTVX)z_XxPQD7?=k(5;h7p8a4(t7B&tR3mXrc0GkAx44VR*8i3c(#UU^aHUl;j zHVbwMjISB(4(kEy>GTQl>k@Vmg8g8(V8m~O@s`VhmB4nuZgY}D{JOR7j395QLSfyU zts#EynS7Tt@274;({6>`4CC9^=fUQ~5@Ecz;=L5_op`InTcg&nKp1a{+QQny_&)i8 zE~j&-U--ZXg!{wzlKWs-SJ=Dg_iET7*hjEI=<&g@p|D72b*SG(t}zIXb;?5hdWTFy zkf$1+MrOih!7hREx@V4aJk+meem?|z!p?{B)$V`78exCIc#C4fcq6eH#&?DAHS$Yg ze64&k>_Uv8i(q|Wyt!xtYYRIU)&bTL)(OU&3?I-J#`iq(U!HE@dv6O7xE{6<#=DM9 zu+6Z$vHx<|J+OOW_rW+N9)R(Ul83>2Fx~h<)l66xEFV??y8)I4TM6UqN7uuyg{^=c zN7;N8{k>?tD*~3`)Ce&T_Am7P7RE2JDv|)084aEb@z+T=f4W& zTb_C2^8oBY*h8@0uyL?h*m&3k*hCobd&a^>p_48K`L^<*unhPcVDn(zV0SKqo+q)tr(oR?=1(SlYC6Mv_zfEP5yD4d zwXlz2pTPJVP6uJH!Cr^G0prg<-3Pnh+1bOdQ$FuCcyGab3H%DI;RpK>#s38R81@P5 z80=Hn3$W*5Ps5&pErX@Pmcw|x$?HpAPA-Op!+OImfbkcw?u6X|D}(Xp6NY0Z3>sff{UwYqt)376Qoco%HzYe?yx%B-ZGqhc+Y0LfJBGx3dvz_0Z{dCe z_9l!k^nVz91jc)iJ+Q}N{Pm?iunS>)qy1Q<oqV@8@>$lD>`8u9si`d|t`(%6&X+0*qJelVDR|Q(983v{t}cMR)!Yu3BC#*fblo2LSUgV{*D$e@P9<5euD8A!rq6y1A7;SA2d_HUG^mS zxQU_g1Oj_ulVQ9Im=MRMz{>a zA_=w#wivb)whYz-))RICnO}-1pmu>ID0hPm^LilOe zGq63d{KxUZSKe2^UV!mpp1-ugU*8xHn*ig*d^F4hdmV-JLZvFe=V33vcwPSzj6Vs) zYxmtSUavm_TZOcluxwZwY$YrmHVAPuISIC)))zq-2aAP`hegBile_B2BKgad-yzNS zuv!={aV_i$*eKX&7%#uWV0?Rw+aLYU z8^3fcM|@V!--&4fYX>_Q#-H-(0_%^R4uOq=jfTa+X2bfz_!~5FXzuZ__OJ$2ijP70 zF7xfMTVW2Y7}g%fCz|!JZ(-l(x9bkMaSpefx$0;yAX`BvIPZz-| zRJ<5Rk^}P2hWBI_V~}}Zw?MCf9f92ldlR+^_9|>YjE~`xV8fop5%ht*PonlMU^imt z{NaaG)Rs@GN@0A-!VwssNUemWJ5OEYHz$8I>cL-%x#S<%T)P%^OM~$itu@FeCH%F$ zzfgxiVCNtl0Bb;)b*C{ck8c}n63l}A2JHllw}h*COP7s6HS9we8-x!lEZ83SW$>Rz z-5-YWc%FpunZgaQO|T5uD%b_EKCp{mJz;!yFdMc36V8z{4p=EH2F8aWEQ7ySm&r%E*{~O|BmQRK9#|(Bf8>;Ry#ru_U_)T6L>Cxu zXd6+$4X|?TkTu!v*M%qFoHYj3FA#H zZ(1LKJqY8g)5D=(0NaW<-l#qVV^}?A1JYugxGsL-7ssN~z9`s)jYN1ej1NcoB$W#* ze|hmOgkOcd0(%k0uL<~-!jyge`un}!BZMt}3T4uGY4$vPenqe!_MG$UOusJqFCgfZ zr|a;XW=S~=uYk^Usj!z}vtTd5yhTkxn7igKn2u@q?F4m}Jq@OIskK!ovl8JqeKA}Q zAaD@&2JAK1>#!==EF@yR|3H|}-;cuHh9Q%22ytT(_dzrN9fa?N_CEL?>|IzjtOj-n z#&0(c!#;u?ft`Szx}?2abQ%$;E2J- zyUx*gzu+#M(7{NMQsa4ScE70ONZ^hb5HS$b+G#h(uWvvU3&pbTjGN=P)a>ItG{}b~?`WTWBtEa_0Jlb>VrFyX-l3>~k+3J{aX=CJsZ1L$NwJkIqH% z4bJOxQN|YMFM8XZ-~<$WnR9glyfw~_1iu~T;eGCTek;r_jW{OE#e!#A@8~n)Zw(Bd`ui;#K1^CSMVSK4yE6Few{*wsGp>3g_Prp2jt!49n znO_Hg?0%rJ#A%m@T&tb^%$(z5L5R_ z_b2?ma3=CN2Dy2>zq*_U7xZs5q~7J0QX9_oZEV z-g%!DFe};y70+>!kigvNtYf-Tr0a-u559Y-?8#QATq>RFl|9bGNDz5ICzzD_>d?;b zuEZEYcc7WEd>|$WS%1Cj*RK|jzW{X@7@;DJAN`%iL>!=nm7XaQZ;gL+oqJOcRX93j z0G?P4T!>1zoyiORrkXRIN5AmvmL7Kd)FOT)zP#$ z*L&;=C?c1G!3rXZz~y4WhA~zU(Ga6X5v&M^SYiPSvBg*rO&q%cvBiQWQKQBJ_JRsV z6BSWouh@+R{hm2{E>{e`@Av+`@4q+xv+nM*v$M0av$L~%E}JX0z?&hdE=pL`>f{=v zKS=4VH|TDcB;Ve8Z_^tMAC%%16cI5w34Iwopv~gsz>4=^-`F9Ge?N8#HH|Qb5LQK6 z(i`giDP@6@)Q|3PZWv|NkPXx@Oz$JbQ*;<=rc=2-NWQ0J&aI^#oNS@fVS1wy57Mkj zNAJm>`@8J+Rr~d2>HDC3$@{wO3}D2QZqfVM zSPS49g>i?zG`1h+pcicd9LyZ$Rv#vtLT?#fk&ONI2~O9bYb=EPC~4!6>aEU!x(_rG z;(2IKC;RIiO!+|YWTi!{J$S!n1HMVA=5e7a8}2VQ+I2QiLvPhLTttX zsNyKP=vY4^#c*V=9cp|;%{98mU8of7^?FJ zF}QO5CNF+@iWS0^$O|h$!>P#txXK-r$GBlT4z zC#n|-%Mng-k?5&0eHW=uP+V#V0k%xMK4M5piA$isU4g+E@`?gHlg38@KAjeDZVTOr z!q^X!5{<%aGDYi+PC2#2dfafOR_$LWj?K_$fQ#F;Xi_xRqc3GKzB%1Nq8xA$_=gW_ z?M^Y`IX0`5syM%q^I!n}ZXlqL>c1_Nmj*%yC=WQQx>sM3cF)(BkZdV=FxV62(zn!f zBV>D{4mFF>drLtS8>0`@<-5}!WRh1Nw^rZSjQ4m2FP_B$b4BiG4@N3F$_jz-#H32Os5gP}!g+V$& z?y-R9(kHQy)I-48a_uS|+_SoS{d~1+6EC;7_2}DJ=z-dwJ=qS$glS!gDW~wEdPm*E zdNgh*hBT2j4TU8=>;ZQk^jxLX)?+p|djxveX}S9|^cDbEW8*MbJ%^Q+%BKr79&m_a*7Km@Jn_Yvw8rGKfe0m$+MHUAPFo<&nOLbf4Y zSFWs9`Jy@swL?D|_NBRv5w=@h!ClFEBnp3}o|q-&09-ikcaHLO`M7Y;W}-1~s#%l- zfHs>jc>70!&D=%;ewqT)9R6xq7jQNh7_w?d4buPC>=rWP?-~COTVHLj7)6yw>jRZC ze!{LLE@(6Gk@7=*ounBrIHco8gZBlrGZC8j<7jMP)hH81N)p1#jgGzO_wE+x?&z@(+Lgp*aYbqpp^E3~87cnb-w z)J#coq3Aelzf+qDKk2m7o}4Z}?_<*mWnw?6a2MuwbU#k-s4PM&-VjsD&)+s;=8hI> zE37+qzST}Oew927kahZQTGM2^%^_?)nLO4=VeTk3UhkuHX(6_!ppkW!nX=N}Xk?)j z;q*8jBXc3wvCtOboJy(-YJ@#f-D0g!%c)+k5nf*GRVb+HmibfYIM7hnjX~RDO?y5T zvzA`L?`dejoTKOxd!{dR$QS-A>ta&}3gEw7vJiTGJWVXuen5c8sZc>cBddv|8F$$m#O%#$r9gq}>qs{fO$ zC-KJ7QRtCwQG{IcxfQ$2yk)|ez3fQ6CSgZNq$B_(^D)j7C!TI}aT4UB))YJD(5Y8bEPGbBycH!z?5W_1>;Y+?BFee`QvJ}K~; z#K=oi{$$8%2>=z*_E7ihSGynY#mmqLZGg}>lGhY4v7b6{a*p~y_Xj%b1d2NWh^}6Qwe0qc&SnqaGk8jW> zi)ztA(TB85-aG+`RjtNs;bAIfuD(8-MjKSmoZ-P zQ_+X!Z+=bD04uvdoQJ!)ai!Rqdp;4~y}FBBrR1++ZW>b_Cu)wjNDRXua&3iW`GL+( z!*spRgFlZz8;IK2paZ+JzrpG5htI{pJKDCK>QZ-GcdU2p^sqcu-_YJ~&{=V^osQO( z$Q_ANtGgJ(+H%vsntHh__7-)c!^$;LDC1gDQX4qwp99DKz1xC~ZuJ{Vei{x_JAl?t zN9^K1^i02?u`@tDif9JL7ez-o7fsiY)7|Ptjx+TEx+lG8;7om;(oI8!bwT;!nb@KV z(oi~yyz-=%P+9qT->bK;O!HLdT6Io`P_bFq&4=_BfQIdl-1lDOI7-ih#9=!yGwM%0IZ2i~!P>b0(bG-(F!&Y0jc6og2&;vf2Vl_3yxuH^DoOw`lzuT-WKi~X$ zk)>uP%>;2AS|e8@*+c1^J4NS_DEv5}Dq4-bqnmeqQ6}hNjNYuTRmnOD0DldTKcd{8 zX}zp*3IzaR6;G=$O8NzazM_OxNLEttW+VqF39XPw-@;qS>qp;j);mbnByB*c>WUl9 z$vFy}gTi;~47z9iY2zGt;sFQ%;s7_{V7={^cO@M7UL6e%*Vx$DpD!SywXQ(p=l-n& z!9<}Bj2M2kE&58bH=M}UWX%JZM!Pp6=}pnUA{j+l;9SxMH<{KlB$b@ML$Zr5a_$=W zZ$eUxqPbA(r8*^Zt`UW8L(+}nIQf$DxNs(=ac%(xFGBJYHJyiKALVmlF2y3Jdpn3` z%!8yHX-5i5y(wualJ<0BArehe;S{q4xj4#W$ZYZ_B&s;fa&wSYP$HN9LP0x_{6U+3 z0`aGjluIC9nU-*=FWJsV5qB=q`Icgri-S><#d-%?Hy=Ap5Z%GF(WUta-Yg&~ z8L)SyUy#%I)9S>a3+BG?G{4KWv0&8NIJJ?9AxQ)2;TBA^CN*vFTAdgsALE!?B|S#0 ziZY|)9<@60OJhx2uxW^4QPssbA!%rBsLH+}!tGq&BRXtgF!9-fcRiRljgK7Kx%h8G z4y0%tGpX4U$mCsN7|rwYZYzT}AN0*~h*N`WbF0baUCp&jqnI12yUfz;T_N*^k+uxH zy@ON7Xjb+DG5e?L18K-cFsrrK#->eY0S;@*Oij}WIy6V`NQ;xf!MpQPu=2!AyeHIx z87-{G8iB&SX*#N@p_nN1YI=9DMk<>MCbV^COFSe?PGwwZH08X5dzV5{;xbdv)@|V- zYJC-1sLf(gkpGJ{{SVCOyDDSU%(`-ZjL_!3bDHXM@_S-4f}MsB;Ay3CTBN1?7j;VS z2tm>3%j~+d4mR&*qwar9vasR&@3xp?Ln*NFn%Zf?77C=Cj1#A>j9#f}$LejX0!zcb z2+ULA6`?JKtF&YTR9sl!LW|GvFD#wbSlB1c#+mOWD&hkGXY8hlKeeCz-NnTU7{Gaq z87LGrQ@nvwfLoDytMxIOk5ej4qUu$takBx4)V#Z8YBT@ewn>^zM^P*4-oL(!9t2@-_dDXg=UT8t~&s?e-vM z^I_*o)4Vvk1{{2%Wf^d%0@AU=pQHil1x2u6C(;pS3UU{R^($j0q>QfLbtp^{#}{C_ z0-{7sIpZU@X8!qGEH!~t1w@tIUkR_!cgs(QhEARHsRfWu!5IZTDe)6UxU520#?Jib zh8*5HRikI6;`nm%9_V4&o39qw8{z*;B`9RCev!=$#D_S7`Q*vBo7zqLW-|58(AR_k zueA>jtcd2&(0#ZwP;V{`B5G*I(e_5>7+ZDvcs~xE%cqJ{>8z6-O)YEnT_r+yICEO9 zr=H!E1C2ijAuOIQ_RAe1p4sjr%kR@B&cq?3%!B#?%41xDanQ2l$SX^y4A8ek z|Jr_*NkNC8H8((kkID1y_aCzFPyJLo=>kehqvZW#GMd8cZ;0DRCt8B0O85++4JkEm z%{Cg94%|5ei*x^0$~uJk3@7=p-e{^iOGHOvHmCl!GT_grz_HrkggOE>%-t_ZQR%_` zZ?#w1SL4~<6pf~0`i)WxI(-;g*qIg`$Ha!y?jvxxyB`08Ol zBX~8A*AfK3oGx$|A7~1#av|GeVA6%$k70GUttW(8_RPHDr#vr+qmykAc4OLLaN6MFYj z0SkrxX?N0JAj=w3uIIDb!~151Yt69s`ct)&XckM(HNiO8`@pp{=02Wc0Bv&%;VWLA zou{4I@X_b(OM@1Bd>C_)%&FGq??flkiIe)}xKJFHg`2vT^fU`n{P0zrcB$5z!u(_d zeVGlD8be9h;Cv#jMG_Gr32{Dn^YiDo-u{N`iF@CR609fn#vtn4j($JBnS>znYt*o= zluj0=?NEO6MsJ;7;8tuLxMf3A9W}N<^qsNgvxuCf_c2CXm2!>xridR)g`EP!&FH&R zV7~)}UD8)B#<%ERzk#P1>VQO<4Js8uB`@%c<^zTv=xJ9FYY(IG0GO6*fK!u};?|^>H>@&QSUoI!lbLhGlEz1GkminB79hgN&&mq^6 ztS=(zL<#3PRFkW(M7uBQW%53cC84z_gfX`$C`>|oy2)^jh*OT<(P{iDvALZo-)L}! zN*(YB4VFm#hj&(;bD&Q(R||dm{G6$0K*(QJ)it4-9<5soPyFuap5VR21&q8U`CS0h zVHCo-5j5=rrm7REoIJPyP70VakIF~k57>AL52rQT-uKfc+?^*v)UZP_G&2`o0Qg#+ z3ooD~ozGSKC|WRITtt9K?aL@lq5T)J2Y=XBgi*yyU`<`m9G=575`$EQ(k?-Xn}iDq zO_k@=KJRz_yiP*EUH#X3y~e8V+hmWv{Y>oGsKx@;BL5P$g#!C9g)%RLR})Eps&lCz zQ6_H?gfBgeo z5dgLaA)_LGI5;$~vI;Po060XOBuKO;mAeL93@lVN;4+&|xjD*Z$X5dAg`s2D2LKAw zgK@c_$Cp~KUN5WjU8rF^aQv_k5?W4)0GK{(EuW$(+tHktE+$i{>m$*WU%kMwC_xvP z_WREonYIvqC9=H^9^ARsYO4%$g$G}7PGWdL+|6Z!f&0>4{O%=g(@wX*)| z^5EEZJFz=?`&u2L`Zqx7?`9WcgAFlSU7>1v*`Ry$BaOQOO2vN?cB-AV)tpW)n_?|? zN_|ghkUpZLOz^{Ix(U5yKrjf|fTgPkejo0UQ~IVVO{0gm$*L4RM30!Tz?;BD1II@D z)WI9YBA1L@sN!(fk0Z zpqEtwrOW7$sLCzi_5sI^_<){KJ0rW~rdvjsOToAF15ER@4Pn5@39U*sDmy?Wq`vrj ztc~f*PwUFHj!&MY)|hzp6{CAh`|mpts}P)OJdmw+8-sBsKO{<;wwJW*KH}+$H|>5@ z2ctgYtxhovaQRs*zlTrj{xC(K{K8JEj1rcU4~3PGKfz<`TetPqa79_>4&a}ml7;*3cCkQz4J50-_tKt zo`4wdqGM)sjtEQ`c)>zMY_oVG*a5q(a#NE~gKZ_0_5rEqAt6Lu`B_CGjlU1_Ruo$X zlWI+w41c1{Sz6!Ky;6I>S_3#9#Na4sRhOhZ^e;AJZ%LsbWQ*92)z<>hI%o1PD;uSn zv^5VNe!b1YT)T{Dyu0=qqc00qz5BE(*smKs05=FX^6nimi)Y5#H1+R-qZ&J zFhsVGfy*IxB)VI_kY{<>fqFg0h18Q@Xx$4qF&${`WBn(ROlKcsV@W61C(!VCYWD=f znoDE3n^0nYCAHJgQayjwj)Ii_7dl^#EU$u+8|v@p<2QYl__8nga(ZlBe>;u3S zfc43(e8a|Gnr{J|ri7=U>qd(>nXl5r)_dY9y4G@nhB=o_!Otvpb!pi%v};5=(G8-* zGr^8jo9>}d8N6HArCR$}c5zh(>9J)u@bKpM_S2{u!`G7Ea|@~Ql=%wh124}aX=+TU zobf>qOc?M0wfSGry4Vb%tHY+Xee?5*n(>-%0G(DDDi}z8I?vK-wpR#ar0?r~CRt!^k+sfRU-vGDw@LDR7X#^cqP9DM*x) zXvOLfI>2e{jgd>!v{tazmnaAT-P8S4HD6!pBd>;5ndxGZUfA}FeB+b3K$RViswN!M zmN2mo0er0Vlw~32;MDJ+*t0Lc$=p!eryO()mWU0JmFUjF^dVB7R-3^wAD5f;(*62d zUPoyhI2-c77neED-!#4!#H?!F)>({&7bRh7VLIuC!_{U-W$6+mq6a3?_{^PLz|2eEd z@OA%jSd~yjmJlbO@ZD^i*yzDc5E?XpiKA}i_Ifx^p)|Uj%=hr{814CM9<#ruZS!{J zW%JH{9KqqYIpxUKxsmPg+}d1|jhc$6adL4?8yjiDw|#Kw z;U-|a$F|DHXsiCa_T8Hu3s1*fbB(Il$VTNQn(}Q;ZyS#h!ABcsTMi|~DAESQdH>n6 zomB3G=&dR(V?cdmnXTBQy+d8<4j65rAO=czZDdD0JS}01vqiz6uhBzWgs2DGqD}~a zQuzOxa5Q&Dpzw&UOa(M9EI+N)j0*BVWl6S}%ld=bh9rDl{){?IHQ2tItSib1f^0&? zA_haX?Br?)U$n794-F{JP96ZC>I!nop5KILw8PH6LeInnU+M7$1|CL2toX(MN{Adh z|BV7F$qtJBX|cH%AD-Pe>iA=w1?WTL0W@_1fMY=oAH)Tfx0#w{0SrY=b<|8x%wN2< zhV5-j&9{_^rpi{0_I3YSC7*uWYM%vgnk0KL@$@t~*@Fqg8NtM-xx166K1p!202@#c zfTm6Wuxn9eOptUf{`3S3AR09sWVQY?%d76|qpvMB(`X5rD*JN8*(Nu4_mZ{VI~(b7 zNW%L`6W=vvF%vg)=q@wyQUj)6OIlsAa+~KCU|Djm3?@FhAe6_m<-*Xd#jPPKGbJyr zCS}dILHA46%C^+BqG&Y5>vdaKnZNl&w}U8|i^kCoB+48#wFCbdR`=Vu+|sqMG+jw~ z-0OA?P^Us|qcr_WvITHls|mM%UCP?o?wO_LPipD_+Rrq=p=T4E<5NTCS^%Xf768OG zrgLJV*ji@pI?!$|3L}3PbJ0k8>;RP-hPB4a?M%nktL`LT_JN{mH_h4PZ$O(e)Ps{) zs`ioE6v}2#i6}Bvzb;M!Uv~AbGBdv85j5pXJpepV!@l#1c}wrgReSrZHL9Na(FFtS zR|Rr+L~@NrJ3`6V(RxSu*1tG2ZKq8Nc*vxqifpWS?Y1~uUA?>AaZlC!ES+?gY@Ot4 zPI;){vD8_(VRq`6s5o@X?!GrZ^S@0Uon!~eh6XsHLpMrmD_5e8PO@H7j|}R!a^vX) zS8l>D3WB!`3a$eA+`KDj?s2SDd`D>SOR9X-Z;LO{vMP|mLjc%nPqz6YDr%CnSnX8( zF8wuX*bW&gREYYthP5~;sq!gH_s~=+12J*aPUE6}&Dr$RIyBWD?yJ&vuaSRGgva=& zk$7P5eBg{|D~v53j>mii$%v~*rB$Ag`_dog+_A5eJsAY~6IKWyn05kZ`ulyJI%NPn zK~rY-ua|KHGd}-zg-*JF5{}+_P#I@1Yj_~Gfxg}LW-PV-Ue-x^lvD!X95n~PxCkcj~mZ!`a#uCA*Cc|kYCyunXD%9)16Cp&e=Bc&fC)zp!ju0q+lyZX7 zs)1hTr$PkN`+mFW*K>#Y#K-#?It-^YKiOW75X?}@uLhE1@y8pW9DC7%=Ov`~-M24i zhdonU;Od@P9A6zICp;5E(|_*$X=d>s_5*+rB?GeQC#JCTxfny~C6~`lDsjcAQc(Aa zmL%1H8g`~2e5`IN_Cl<+sU_T&1}^^*Z!nK8RZsIdkQe$H)sjhWM4eH$Req|lNY z;8pv!HkRfMOj^STUX7WU1RnC&bi_m zp>wm7?oL%~SE&X{tr@48E{B&dy*eN9?PsY`O_yC&6;-4~R%=v~W{~F4^jcs_we;He z$t!6$icCeCY_(|zjj6S*BYF;P?z-60^++n`f~hLfBCAbRt7*X1V-LpN)MRjD-tb4s z&7bYC5Nbt<0Qfd|Er#!HJNC27+dGF_0Do%3pX+zG#-N!CzqZu8%%NNt>{dnEc9jWr zuQ5nv$=wwbF%*i&mSgFZ9UrgGFTYZIPXSepqq(k_^l5aEaYZVq8UU$I^=m_5)9~ws zdGi27OP_*xK?UQ=TlT%3rEO{I(}68f-*UHa2Mb7iyTh zkgmsq``sPa7B##up-#mp&-mfM2Dp0d?dd5_XoI?kH2Aff$ONDK61tciBsPj&J;sorbiB(#6JdYuZ*< z_QS^-c;jGHKFpG8Me0&aJ$V{FF&f`Q4y4u|a!1jt-PSc8GX6lHU;!5`iYKNKPlq_! zLz_&p9g(LzRdl0%#uu}-k(V5zld5b@G|I&!Y|(RlWM&s?g6xsA7txKwsFO`n1Rwl2LP-(D-KcmM^^0_FM7m6eV=Z zbr+!t%a6_`)vG8WAYgLwD0 z;Kg@282GgCs{bcIJ1pgUiO7DEoY8SXUX6QoPr=_Kbru1n1VkS5k8eJeRYH?|&i zZiP_@5$f7`(D$um2j3p}TRN=x&$4^hm^IDHm1k7!j*(hTr-MztUHNF?Kv9EbV-@E? z_t94C(wiE8B0D-A0-QJTK0aGUH9pa`xPbE-6P$VLE_hJtC-QM!Yfl>9TJEoV=|wrM zAv1gYB$xwQF4^z0s?M}y*DNhPyve3bK}Qah8UT^E^QK-XR6a$sDrnX_^KEq18r@r? z8E=W0c=Z!Mqb}B)4z!WIP46F#YzkiCv;zrN+TG*lzrO6>J=8{O*0dq-(^l%QT=1{n z;a_(nwQVc+7tWr+%yxmm>-x}}wz7k%34Ya#kE&}QKTq*Iop%WQXf`GYH7w(_ua|kW z`2~M@k89Kmr%dY5PBt>B3GHNWr}n;*dT(BHV~^dPcV0g!B*CsqZ(lmz4zh{`!WN{K z&U!KWi02-56fj-AvLD9>`NbGCRLFZPLR&vzhwq6pZw=y6#JzfG|&=c_5Pd z6DbC#y$uAnM}D7CV!knMm&&c`Nt|jxcbW7R4dENI_C(s{%578xD~8qM22`~}0cpIs zlhn}g)FXBLGTwZ}KaQX|R`}ygg8_7U4FtPhL*`lEEE_fH2Oba3_a^*mS7S=)0KM(p zm>zVH>(so`SRn5qWmjoJ_|^{XOZ+fSZNVO_m09C8Nzf417IQ{botrZ4!I~)I2F?6d z>?%DDfSput@%W=Qe*f{eK!N4^_W$JjW~BmtLy|e~d}U?ix8Z4@fpa*8a2;`7kI=ah zf5M9+=(xxYMWVBAMq@h4-lc1M%c>f-^`R{tA3XKd405V&+`VeSGuh<7^CPg zV2!)L>hm%=9}<_^b!}BcFXYQ2pHMlZ{98Mp+(F2*e(!G-+NJrIjej5IBRIY@l&S~I z_oljambbcfE7Zd-Ykyw+y7Sgn@x?!J_#awP BtNQ=| diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..7b006eb --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,89 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import unicorn from "eslint-plugin-unicorn"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: ["**/*.config.*"], +}, ...compat.extends( + "eslint:recommended", + "plugin:unicorn/recommended", + "plugin:@typescript-eslint/strict-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", +), { + plugins: { + "@typescript-eslint": typescriptEslint, + unicorn, + }, + + languageOptions: { + globals: {}, + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: "./tsconfig.json", + }, + }, + + rules: { + "no-console": ["error", { + allow: ["warn", "error"], + }], + + "@typescript-eslint/no-magic-numbers": ["error", { + ignore: [-1, 0, 1, 100], + ignoreArrayIndexes: true, + }], + + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], + + "@typescript-eslint/no-unused-vars": ["error", { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }], + + "@typescript-eslint/prefer-ts-expect-error": "off", + + "@typescript-eslint/no-misused-promises": ["error", { + checksVoidReturn: false, + }], + + "unicorn/prevent-abbreviations": [2, { + replacements: { + args: false, + props: false, + db: false, + }, + }], + + "no-implicit-coercion": ["error", { + boolean: true, + }], + + "no-extra-boolean-cast": ["error", { + enforceForLogicalOperands: true, + }], + + "no-unneeded-ternary": ["error", { + defaultAssignment: true, + }], + + "unicorn/no-array-reduce": ["off"], + "unicorn/no-nested-ternary": "off", + }, +}]; \ No newline at end of file diff --git a/package.json b/package.json index b7a1d2c..35f176c 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@typescript-eslint/eslint-plugin": "^7.0.1", "@typescript-eslint/parser": "^7.0.1", "bun-types": "latest", - "eslint": "^8", + "eslint": "^9.10.0", "eslint-plugin-unicorn": "^51.0.1", "husky": "^9.0.10", "prettier": "^3.2.5", From 67388b9925a26ff25d2d2bb59e51623f207cb411 Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Thu, 19 Sep 2024 12:13:19 +0300 Subject: [PATCH 02/65] fix: update eslint plugin versions and fix rules --- bun.lockb | Bin 431241 -> 432184 bytes package.json | 5 ++--- src/context-service/index.ts | 2 +- src/database.ts | 3 ++- src/llm-service.ts | 6 +++--- src/logger.ts | 4 ++-- src/models.ts | 2 -- src/nextjs/chat-adapter.ts | 1 + src/rag-chat.test.ts | 2 +- src/types.ts | 2 -- 10 files changed, 12 insertions(+), 15 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0ac43742411df31f746f51e8a9889454220cd851..97f5c35bba7d954e686d805ac253271c6109dd21 100755 GIT binary patch delta 78884 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 delta 78795 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 B&e#9| diff --git a/package.json b/package.json index 35f176c..730b424 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,10 @@ "@commitlint/cli": "^19.2.2", "@commitlint/config-conventional": "^19.2.2", "@types/react": "^18.3.3", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", + "@typescript-eslint/eslint-plugin": "^8.6.0", "bun-types": "latest", "eslint": "^9.10.0", - "eslint-plugin-unicorn": "^51.0.1", + "eslint-plugin-unicorn": "^55.0.0", "husky": "^9.0.10", "prettier": "^3.2.5", "tsup": "latest", diff --git a/src/context-service/index.ts b/src/context-service/index.ts index e8610d1..e0a59bd 100644 --- a/src/context-service/index.ts +++ b/src/context-service/index.ts @@ -49,7 +49,7 @@ export class ContextService { return args.map((data) => this.add(data)); } - async deleteEntireContext(options?: ResetOptions | undefined) { + async deleteEntireContext(options?: ResetOptions ) { await this.#vectorService.reset( options?.namespace ? { namespace: options.namespace } : undefined ); diff --git a/src/database.ts b/src/database.ts index 9847a1d..edad8b8 100644 --- a/src/database.ts +++ b/src/database.ts @@ -84,7 +84,7 @@ export class Database { this.index = index; } - async reset(options?: ResetOptions | undefined) { + async reset(options?: ResetOptions ) { await this.index.reset({ namespace: options?.namespace }); } @@ -97,6 +97,7 @@ export class Database { * It takes care of the text-to-embedding conversion by itself. * Additionally, it lets consumers pass various options to tweak the output. */ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters async retrieve({ question, similarityThreshold = DEFAULT_SIMILARITY_THRESHOLD, diff --git a/src/llm-service.ts b/src/llm-service.ts index afd7daf..d51c1d6 100644 --- a/src/llm-service.ts +++ b/src/llm-service.ts @@ -73,7 +73,7 @@ export class LLMService { let value: UpstashMessage | string | undefined; try { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { ({ done, value } = await reader.read()); if (done) break; @@ -118,8 +118,8 @@ export class LLMService { }); content = text; } else { - const { content: text } = (await this.model.invoke(prompt)) as BaseMessage; - content = text; + const { content: output } = (await this.model.invoke(prompt)) as BaseMessage; + content = output; } onComplete?.(content as string); return { output: content as string, isStream: false }; diff --git a/src/logger.ts b/src/logger.ts index 064690d..866c2a1 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,5 +1,5 @@ -const LOG_LEVELS = ["DEBUG", "INFO", "WARN", "ERROR"] as const; -type LogLevel = (typeof LOG_LEVELS)[number]; +const _LOG_LEVELS = ["DEBUG", "INFO", "WARN", "ERROR"] as const; +type LogLevel = (typeof _LOG_LEVELS)[number]; type ChatLogEntry = { timestamp: number; diff --git a/src/models.ts b/src/models.ts index b89fc6c..efdc32d 100644 --- a/src/models.ts +++ b/src/models.ts @@ -162,7 +162,6 @@ const setupAnalytics = ( } default: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any throw new Error(`Unsupported analytics provider: ${JSON.stringify(analytics)}`); } } @@ -217,7 +216,6 @@ export const openai = (model: OpenAIChatModel, options?: Omit { const streamData = new StreamData(); + // eslint-disable-next-line @typescript-eslint/no-deprecated const wrappedStream = LangChainAdapter.toAIStream(response.output, { onStart() { if (metadata) { diff --git a/src/rag-chat.test.ts b/src/rag-chat.test.ts index 034ce1d..5c7b9b1 100644 --- a/src/rag-chat.test.ts +++ b/src/rag-chat.test.ts @@ -25,7 +25,7 @@ async function checkStream( stream: ReadableStream, expectInStream: string[] // array of strings to expect in stream ): Promise { - const _stream = LangChainAdapter.toAIStream(stream); + const _stream = LangChainAdapter.toDataStream(stream); const textResponse = new StreamingTextResponse(_stream); const text = await textResponse.text(); diff --git a/src/types.ts b/src/types.ts index 14455f7..2f76eda 100644 --- a/src/types.ts +++ b/src/types.ts @@ -96,7 +96,6 @@ export type RAGChatConfig = { }) */ - // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents model?: ChatOpenAI | ChatMistralAI | ChatAnthropic | OpenAIChatLanguageModel; /** * Ratelimit instance @@ -191,5 +190,4 @@ export type OpenAIChatLanguageModel = ReturnType; export type Prettify = { [K in keyof T]: T[K]; - // eslint-disable-next-line @typescript-eslint/ban-types } & {}; From 27d2302dd1c209367538c6e839cf97a1210068e8 Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Fri, 20 Sep 2024 14:50:33 +0300 Subject: [PATCH 03/65] fix: turn optional deps into normal deps --- package.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 730b424..1dc0d50 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,10 @@ "llamaindex": "0.6.0", "nanoid": "^5.0.7", "pdf-parse": "^1.1.1", - "unstructured-client": "^0.15.1" + "unstructured-client": "^0.15.1", + "@langchain/anthropic": "^0.2.15", + "@langchain/mistralai": "^0.0.28", + "langsmith": "^0.1.41" }, "peerDependencies": { "@langchain/openai": "^0.2.8", @@ -79,10 +82,5 @@ "@upstash/vector": "^1.1.5", "react": "^18.3.1", "react-dom": "^18.3.1" - }, - "optionalDependencies": { - "@langchain/anthropic": "^0.2.15", - "@langchain/mistralai": "^0.0.28", - "langsmith": "^0.1.41" } } From dd475713293aa7c1f9784d50a1e61d60bfcacada Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Fri, 20 Sep 2024 15:00:36 +0300 Subject: [PATCH 04/65] fix: husky install warning --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1dc0d50..d3ac1d6 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "fmt": "prettier --write .", "lint": "tsc && eslint \"src/**/*.{js,ts,tsx}\" --quiet --fix", "build": "tsup", - "prepare": "husky install" + "prepare": "husky" }, "bugs": { "url": "https://github.com/upstash/rag-chat/issues" From 71a166523035b82d9c6490c92bf5ad9ff471599d Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Fri, 20 Sep 2024 15:01:23 +0300 Subject: [PATCH 05/65] fix: rsc exports and tsup config --- package.json | 3 ++- src/nextjs/index.ts | 6 +++--- src/nextjs/package.json | 8 -------- src/nextjs/rsc-client.ts | 1 - tsup.config.ts | 19 ++++--------------- 5 files changed, 9 insertions(+), 28 deletions(-) delete mode 100644 src/nextjs/package.json delete mode 100644 src/nextjs/rsc-client.ts diff --git a/package.json b/package.json index d3ac1d6..5109b6e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "./nextjs": { "types": "./dist/nextjs/index.d.ts", "react-server": "./dist/nextjs/rsc-server.mjs", - "import": "./dist/nextjs/rsc-client.mjs" + "import": "./dist/nextjs/index.mjs", + "require": "./dist/nextjs/index.js" } }, "homepage": "https://upstash.com/vector", diff --git a/src/nextjs/index.ts b/src/nextjs/index.ts index 99d703d..1768815 100644 --- a/src/nextjs/index.ts +++ b/src/nextjs/index.ts @@ -1,3 +1,3 @@ -export type { createServerActionStream } from "./rsc-server"; -export type { readServerActionStream } from "./rsc-client"; -export type { aiUseChatAdapter } from "./chat-adapter"; +export * from "./chat-adapter"; +export * from "./server-action-read-adapter"; +export type * from "./server-action-write-adapter"; diff --git a/src/nextjs/package.json b/src/nextjs/package.json deleted file mode 100644 index 8f9e297..0000000 --- a/src/nextjs/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "types": "./index.d.ts", - "exports": { - "types": "./index.d.ts", - "react-server": "./rsc-server.mjs", - "import": "./rsc-client.mjs" - } -} diff --git a/src/nextjs/rsc-client.ts b/src/nextjs/rsc-client.ts deleted file mode 100644 index cb56bbd..0000000 --- a/src/nextjs/rsc-client.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./server-action-read-adapter"; diff --git a/tsup.config.ts b/tsup.config.ts index f744d76..485921e 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -4,32 +4,21 @@ export default defineConfig([ entry: ["./index.ts"], outDir: "dist/base", format: ["cjs", "esm"], - sourcemap: false, clean: true, dts: true, - minify: false, - external: ["@langchain/anthropic", "@langchain/mistralai", "langsmith"], }, { - entry: ["src/nextjs/rsc-server.ts", "src/nextjs/rsc-client.ts"], + entry: ["src/nextjs/rsc-server.ts"], outDir: "dist/nextjs", format: ["esm"], - external: ["react"], + clean: true, dts: true, - minify: false, - sourcemap: true, }, { entry: ["src/nextjs/index.ts"], outDir: "dist/nextjs", + format: ["cjs", "esm"], + clean: true, dts: true, - outExtension() { - return { - // It must be `.d.ts` instead of `.d.mts` to support node resolution. - // See https://github.com/vercel/ai/issues/1028. - dts: ".d.ts", - js: ".mjs", - }; - }, }, ]); From 43202e48f448c34bceb2d9e474407533add12817 Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Fri, 20 Sep 2024 15:15:59 +0300 Subject: [PATCH 06/65] chore: format eslint --- eslint.config.mjs | 137 ++++++++++++++++++++++++++++------------------ 1 file changed, 83 insertions(+), 54 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 7b006eb..e76e71e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -8,82 +8,111 @@ import { FlatCompat } from "@eslint/eslintrc"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, }); -export default [{ +export default [ + { ignores: ["**/*.config.*"], -}, ...compat.extends( + }, + ...compat.extends( "eslint:recommended", "plugin:unicorn/recommended", "plugin:@typescript-eslint/strict-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked", -), { + "plugin:@typescript-eslint/stylistic-type-checked" + ), + { plugins: { - "@typescript-eslint": typescriptEslint, - unicorn, + "@typescript-eslint": typescriptEslint, + unicorn, }, languageOptions: { - globals: {}, - ecmaVersion: 5, - sourceType: "script", + globals: {}, + ecmaVersion: 5, + sourceType: "script", - parserOptions: { - project: "./tsconfig.json", - }, + parserOptions: { + project: "./tsconfig.json", + }, }, rules: { - "no-console": ["error", { - allow: ["warn", "error"], - }], + "no-console": [ + "error", + { + allow: ["warn", "error"], + }, + ], - "@typescript-eslint/no-magic-numbers": ["error", { - ignore: [-1, 0, 1, 100], - ignoreArrayIndexes: true, - }], + "@typescript-eslint/no-magic-numbers": [ + "error", + { + ignore: [-1, 0, 1, 100], + ignoreArrayIndexes: true, + }, + ], - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/prefer-as-const": "error", - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], + // "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/no-unused-vars": ["error", { - varsIgnorePattern: "^_", - argsIgnorePattern: "^_", - }], + "@typescript-eslint/no-unused-vars": [ + "error", + { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }, + ], - "@typescript-eslint/prefer-ts-expect-error": "off", + "@typescript-eslint/prefer-ts-expect-error": "off", - "@typescript-eslint/no-misused-promises": ["error", { - checksVoidReturn: false, - }], + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false, + }, + ], - "unicorn/prevent-abbreviations": [2, { - replacements: { - args: false, - props: false, - db: false, - }, - }], + "unicorn/prevent-abbreviations": [ + 2, + { + replacements: { + args: false, + props: false, + db: false, + }, + }, + ], - "no-implicit-coercion": ["error", { - boolean: true, - }], + "no-implicit-coercion": [ + "error", + { + boolean: true, + }, + ], - "no-extra-boolean-cast": ["error", { - enforceForLogicalOperands: true, - }], + "no-extra-boolean-cast": [ + "error", + { + enforceForLogicalOperands: true, + }, + ], - "no-unneeded-ternary": ["error", { - defaultAssignment: true, - }], + "no-unneeded-ternary": [ + "error", + { + defaultAssignment: true, + }, + ], - "unicorn/no-array-reduce": ["off"], - "unicorn/no-nested-ternary": "off", + "unicorn/no-array-reduce": ["off"], + "unicorn/no-nested-ternary": "off", }, -}]; \ No newline at end of file + }, +]; From 0b544c031199072ec0b2a5e5ad72c3f2cd3b90d5 Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Sun, 22 Sep 2024 19:32:25 +0300 Subject: [PATCH 07/65] fix: ignore examples dir in eslint --- eslint.config.mjs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index e76e71e..bcc499a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,7 +15,7 @@ const compat = new FlatCompat({ export default [ { - ignores: ["**/*.config.*"], + ignores: ["**/*.config.*", "examples/**/*"], }, ...compat.extends( "eslint:recommended", @@ -55,7 +55,6 @@ export default [ }, ], - // "@typescript-eslint/no-magic-numbers": "off", "@typescript-eslint/unbound-method": "off", "@typescript-eslint/prefer-as-const": "error", "@typescript-eslint/consistent-type-imports": "error", From 8a4c6d31c9fc9d67301cf7dd4b7bc122767c6854 Mon Sep 17 00:00:00 2001 From: ytkimirti Date: Mon, 23 Sep 2024 07:38:56 +0300 Subject: [PATCH 08/65] chore: check examples --- examples/cloudflare-workers/.gitignore | 1 + examples/cloudflare-workers/README.md | 10 +- examples/cloudflare-workers/package.json | 4 +- examples/cloudflare-workers/src/index.ts | 146 +++++++++++++++- examples/cloudflare-workers/src/router.ts | 157 ------------------ examples/cloudflare-workers/wrangler.toml | 22 +-- examples/nextjs/chat-to-website/package.json | 4 +- examples/nextjs/server-actions/package.json | 6 +- .../src/app/components/chat.tsx | 21 ++- examples/nextjs/vercel-ai-sdk/package.json | 6 +- examples/nodejs/package.json | 16 +- examples/nodejs/src/server.ts | 18 +- examples/nuxt/nuxt.config.ts | 4 + examples/nuxt/package.json | 31 ++-- examples/nuxt/server/api/add-data.ts | 14 +- examples/nuxt/server/api/chat.ts | 15 +- examples/solidjs/package.json | 8 +- .../solidjs/src/routes/api/add-data/index.ts | 15 +- examples/solidjs/src/routes/api/chat/index.ts | 12 +- examples/sveltekit/package.json | 8 +- .../src/routes/api/add-data/+server.ts | 10 +- .../sveltekit/src/routes/api/chat/+server.ts | 13 +- 22 files changed, 246 insertions(+), 295 deletions(-) delete mode 100644 examples/cloudflare-workers/src/router.ts diff --git a/examples/cloudflare-workers/.gitignore b/examples/cloudflare-workers/.gitignore index e319e06..fc3c36a 100644 --- a/examples/cloudflare-workers/.gitignore +++ b/examples/cloudflare-workers/.gitignore @@ -2,6 +2,7 @@ dist/ # dev +.dev.vars .yarn/ !.yarn/releases .vscode/* diff --git a/examples/cloudflare-workers/README.md b/examples/cloudflare-workers/README.md index 66854a0..450d0b7 100644 --- a/examples/cloudflare-workers/README.md +++ b/examples/cloudflare-workers/README.md @@ -9,7 +9,7 @@ The project includes four endpoints: - `/chat-stream` to make a chat request with rag-chat using Upstash LLM with streaming. - `/chat-stream-openai` to make a chat request with rag-chat using OpenAI LLM with streaming. -You can check out the `src/router.ts` file to see how each endpoint works. +You can check out the `src/index.ts` file to see how each endpoint works. For running the app locally, first run `npm install` to install the packages. Then, see the `Set Environment Variables` and `Development` sections below. @@ -28,13 +28,7 @@ npm install @upstash/rag-chat Ensure your wrangler.toml file includes the following configuration to enable Node.js compatibility: ```toml -node_compat = true -``` - -In older CF worker versions, you may need to set the following compatibility flags: - -```toml -compatibility_flags = [ "streams_enable_constructors", "transformstream_enable_standard_constructor" ] +compatibility_flags = ["nodejs_compat_v2"] ``` ### 3. Set Environment Variables diff --git a/examples/cloudflare-workers/package.json b/examples/cloudflare-workers/package.json index 4a12b20..2769bf5 100644 --- a/examples/cloudflare-workers/package.json +++ b/examples/cloudflare-workers/package.json @@ -1,12 +1,12 @@ { - "name": "cloudflare-workers", + "name": "cloudflare-workers-example", "scripts": { "dev": "wrangler dev src/index.ts", "deploy": "wrangler deploy --minify src/index.ts" }, "dependencies": { "@langchain/openai": "^0.1.3", - "@upstash/rag-chat": "^1.0.3", + "@upstash/rag-chat": "latest", "hono": "^4.5.1" }, "devDependencies": { diff --git a/examples/cloudflare-workers/src/index.ts b/examples/cloudflare-workers/src/index.ts index 49db863..19ec82b 100644 --- a/examples/cloudflare-workers/src/index.ts +++ b/examples/cloudflare-workers/src/index.ts @@ -1,8 +1,138 @@ -import type { Env } from "hono/types"; -import app from "./router"; - -export default { - async fetch(request: Request, environment: Env, context: ExecutionContext): Promise { - return app.fetch(request, environment, context); - }, -}; +import { Hono } from "hono"; +import { Index } from "@upstash/vector"; +import { RAGChat, upstash } from "@upstash/rag-chat"; + +const app = new Hono<{ + Variables: { + ragChat: RAGChat; + }; + Bindings: { + UPSTASH_REDIS_REST_URL: string; + UPSTASH_REDIS_REST_TOKEN: string; + UPSTASH_VECTOR_REST_URL: string; + UPSTASH_VECTOR_REST_TOKEN: string; + QSTASH_TOKEN: string; + OPENAI_API_KEY: string; + }; +}>(); + +app.use("*", async (c, next) => { + const ragChat = new RAGChat({ + model: upstash("meta-llama/Meta-Llama-3-8B-Instruct", { apiKey: c.env.QSTASH_TOKEN }), + vector: new Index({ + url: c.env.UPSTASH_VECTOR_REST_URL, + token: c.env.UPSTASH_VECTOR_REST_TOKEN, + cache: false, + }), + }); + + c.set("ragChat", ragChat); + + await next(); +}); + +app.get("/", (c) => { + const landingPage = ` + + +

Available Endpoints

+
+ + + `; + return c.html(landingPage); +}); + +app.get("/add-data", async (c) => { + const ragChat = c.var.ragChat; + + const result = await Promise.all([ + ragChat.context.add({ + type: "text", + data: "Paris, the capital of France, is renowned for its iconic landmark, the Eiffel Tower, which was completed in 1889 and stands at 330 meters tall.", + }), + ragChat.context.add({ + type: "text", + data: "The city is home to numerous world-class museums, including the Louvre Museum, housing famous works such as the Mona Lisa and Venus de Milo.", + }), + ragChat.context.add({ + type: "text", + data: "Paris is often called the City of Light due to its significant role during the Age of Enlightenment and its early adoption of street lighting.", + }), + ragChat.context.add({ + type: "text", + data: "The Seine River gracefully flows through Paris, dividing the city into the Left Bank and the Right Bank, each offering its own distinct atmosphere.", + }), + ragChat.context.add({ + type: "text", + data: "Paris boasts a rich culinary scene, with a plethora of bistros, cafés, and Michelin-starred restaurants serving exquisite French cuisine.", + }), + ]); + + return c.text(`Added data. Result: ${JSON.stringify(result)}`, 200); +}); + +app.get("/chat", async (c) => { + const response = await c.var.ragChat.chat("What is paris called?", { streaming: false }); + + return c.text(response.output, 200); +}); + +app.get("/chat-stream", async (c) => { + const response = await c.var.ragChat.chat( + "Describe what Paris is known as, narrating in the style of Dostoyevsky, and provide the answer in approximately a thousand words.", + { streaming: true } + ); + + const textEncoder = new TextEncoder(); + const { readable, writable } = new TransformStream({ + transform(chunk, controller) { + controller.enqueue(textEncoder.encode(chunk)); + }, + }); + + // Start pumping the body. NOTE: No await! + void response.output.pipeTo(writable); + + // ... and deliver our Response while that’s running. + return new Response(readable, { + status: 200, + headers: { + "Content-Type": "text/plain; charset=utf-8", + "Cache-Control": "no-cache, no-transform", + }, + }); +}); + +app.get("/chat-stream-openai", async (c) => { + const response = await c.var.ragChat.chat( + "Describe what Paris is known as, narrating in the style of Dostoyevsky, and provide the answer in approximately a thousand words.", + { streaming: true } + ); + + const textEncoder = new TextEncoder(); + const { readable, writable } = new TransformStream({ + transform(chunk, controller) { + controller.enqueue(textEncoder.encode(chunk)); + }, + }); + + // Start pumping the body. NOTE: No await! + void response.output.pipeTo(writable); + + // ... and deliver our Response while that’s running. + return new Response(readable, { + status: 200, + headers: { + "Content-Type": "text/plain; charset=utf-8", + "Cache-Control": "no-cache, no-transform", + }, + }); +}); + +export default app; diff --git a/examples/cloudflare-workers/src/router.ts b/examples/cloudflare-workers/src/router.ts deleted file mode 100644 index 28fac91..0000000 --- a/examples/cloudflare-workers/src/router.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Hono } from "hono"; -import { Index } from "@upstash/vector"; -import { RAGChat, openai, upstash } from "@upstash/rag-chat"; - -type Bindings = { - UPSTASH_REDIS_REST_URL: string; - UPSTASH_REDIS_REST_TOKEN: string; - UPSTASH_VECTOR_REST_URL: string; - UPSTASH_VECTOR_REST_TOKEN: string; - QSTASH_TOKEN: string; - OPENAI_API_KEY: string; -}; - -const app = new Hono<{ Bindings: Bindings }>(); - -app.get("/", (c) => { - const landingPage = ` - - -

Available Endpoints

- - - - `; - return c.html(landingPage); -}); - -app.get("/add-data", async (c) => { - const environment = c.env; - const ragChat = new RAGChat({ - model: upstash("meta-llama/Meta-Llama-3-8B-Instruct", { apiKey: environment.QSTASH_TOKEN }), - vector: new Index({ - url: environment.UPSTASH_VECTOR_REST_URL, - token: environment.UPSTASH_VECTOR_REST_TOKEN, - cache: false, - }), - }); - - const result = await Promise.all([ - ragChat.context.add({ - type: "text", - data: "Paris, the capital of France, is renowned for its iconic landmark, the Eiffel Tower, which was completed in 1889 and stands at 330 meters tall.", - }), - ragChat.context.add({ - type: "text", - data: "The city is home to numerous world-class museums, including the Louvre Museum, housing famous works such as the Mona Lisa and Venus de Milo.", - }), - ragChat.context.add({ - type: "text", - data: "Paris is often called the City of Light due to its significant role during the Age of Enlightenment and its early adoption of street lighting.", - }), - ragChat.context.add({ - type: "text", - data: "The Seine River gracefully flows through Paris, dividing the city into the Left Bank and the Right Bank, each offering its own distinct atmosphere.", - }), - ragChat.context.add({ - type: "text", - data: "Paris boasts a rich culinary scene, with a plethora of bistros, cafés, and Michelin-starred restaurants serving exquisite French cuisine.", - }), - ]); - - // eslint-disable-next-line @typescript-eslint/no-magic-numbers - return c.text(`Added data. Result: ${JSON.stringify(result)}`, 200); -}); - -app.get("/chat", async (c) => { - const environment = c.env; - const ragChat = new RAGChat({ - model: upstash("meta-llama/Meta-Llama-3-8B-Instruct", { apiKey: environment.QSTASH_TOKEN }), - vector: new Index({ - url: environment.UPSTASH_VECTOR_REST_URL, - token: environment.UPSTASH_VECTOR_REST_TOKEN, - cache: false, - }), - }); - const response = await ragChat.chat("What is paris called?", { streaming: false }); - - // eslint-disable-next-line @typescript-eslint/no-magic-numbers - return c.text(response.output, 200); -}); - -app.get("/chat-stream", async (c) => { - const environment = c.env; - const ragChat = new RAGChat({ - model: upstash("meta-llama/Meta-Llama-3-8B-Instruct", { apiKey: environment.QSTASH_TOKEN }), - vector: new Index({ - url: environment.UPSTASH_VECTOR_REST_URL, - token: environment.UPSTASH_VECTOR_REST_TOKEN, - cache: false, - }), - }); - const response = await ragChat.chat( - "Describe what Paris is known as, narrating in the style of Dostoyevsky, and provide the answer in approximately a thousand words.", - { streaming: true } - ); - - const textEncoder = new TextEncoder(); - const { readable, writable } = new TransformStream({ - transform(chunk, controller) { - controller.enqueue(textEncoder.encode(chunk)); - }, - }); - - // Start pumping the body. NOTE: No await! - void response.output.pipeTo(writable); - - // ... and deliver our Response while that’s running. - return new Response(readable, { - status: 200, - headers: { - "Content-Type": "text/plain; charset=utf-8", - "Cache-Control": "no-cache, no-transform", - }, - }); -}); - -app.get("/chat-stream-openai", async (c) => { - const environment = c.env; - const ragChat = new RAGChat({ - model: openai("gpt-4-turbo", { apiKey: environment.OPENAI_API_KEY }), - vector: new Index({ - url: environment.UPSTASH_VECTOR_REST_URL, - token: environment.UPSTASH_VECTOR_REST_TOKEN, - cache: false, - }), - }); - const response = await ragChat.chat( - "Describe what Paris is known as, narrating in the style of Dostoyevsky, and provide the answer in approximately a thousand words.", - { streaming: true } - ); - - const textEncoder = new TextEncoder(); - const { readable, writable } = new TransformStream({ - transform(chunk, controller) { - controller.enqueue(textEncoder.encode(chunk)); - }, - }); - - // Start pumping the body. NOTE: No await! - void response.output.pipeTo(writable); - - // ... and deliver our Response while that’s running. - return new Response(readable, { - status: 200, - headers: { - "Content-Type": "text/plain; charset=utf-8", - "Cache-Control": "no-cache, no-transform", - }, - }); -}); - -export default app; diff --git a/examples/cloudflare-workers/wrangler.toml b/examples/cloudflare-workers/wrangler.toml index f81d372..ac8acf5 100644 --- a/examples/cloudflare-workers/wrangler.toml +++ b/examples/cloudflare-workers/wrangler.toml @@ -1,23 +1,3 @@ name = "cloudflare-workers" compatibility_date = "2024-07-25" - -node_compat = true - -# [vars] -# MY_VAR = "my-variable" - -# [[kv_namespaces]] -# binding = "MY_KV_NAMESPACE" -# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - -# [[r2_buckets]] -# binding = "MY_BUCKET" -# bucket_name = "my-bucket" - -# [[d1_databases]] -# binding = "DB" -# database_name = "my-database" -# database_id = "" - -# [ai] -# binding = "AI" \ No newline at end of file +compatibility_flags = ["nodejs_compat_v2"] diff --git a/examples/nextjs/chat-to-website/package.json b/examples/nextjs/chat-to-website/package.json index f4dc118..426aedf 100644 --- a/examples/nextjs/chat-to-website/package.json +++ b/examples/nextjs/chat-to-website/package.json @@ -1,5 +1,5 @@ { - "name": "askthiswebsite2", + "name": "chat-to-website", "version": "0.1.0", "private": true, "scripts": { @@ -10,7 +10,7 @@ }, "dependencies": { "@nextui-org/react": "^2.4.6", - "@upstash/rag-chat": "1.0.5", + "@upstash/rag-chat": "latest", "@upstash/redis": "^1.34.0", "ai": "^3.3.0", "class-variance-authority": "^0.7.0", diff --git a/examples/nextjs/server-actions/package.json b/examples/nextjs/server-actions/package.json index 855879f..93b606a 100644 --- a/examples/nextjs/server-actions/package.json +++ b/examples/nextjs/server-actions/package.json @@ -1,5 +1,5 @@ { - "name": "nextjs-app-router", + "name": "server-actions", "version": "0.1.0", "private": true, "scripts": { @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@upstash/rag-chat": "^1.0.1", + "@upstash/rag-chat": "latest", "next": "14.2.11", "react": "^18", "react-dom": "^18" @@ -24,4 +24,4 @@ "tailwindcss": "^3.4.1", "typescript": "^5" } -} \ No newline at end of file +} diff --git a/examples/nextjs/server-actions/src/app/components/chat.tsx b/examples/nextjs/server-actions/src/app/components/chat.tsx index 45edc5c..4c029d8 100644 --- a/examples/nextjs/server-actions/src/app/components/chat.tsx +++ b/examples/nextjs/server-actions/src/app/components/chat.tsx @@ -10,29 +10,30 @@ export const Chat = ({ initialMessages }: { initialMessages?: UpstashMessage[] } const [input, setInput] = useState(""); const [isLoading, setIsLoading] = useState(false); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); + const handleSubmit = async (event: React.FormEvent) => { + event.preventDefault(); if (!input.trim()) return; const userMessage: UpstashMessage = { content: input, role: "user", id: Date.now().toString() }; - setMessages((prev) => [...prev, userMessage]); + setMessages((previous) => [...previous, userMessage]); setInput(""); setIsLoading(true); try { const stream = await serverChat({ userMessage }); - let aiMessage: UpstashMessage = { + const aiMessage: UpstashMessage = { content: "", role: "assistant", id: (Date.now() + 1).toString(), }; - setMessages((prev) => [...prev, aiMessage]); + setMessages((previous) => [...previous, aiMessage]); for await (const chunk of readServerActionStream(stream)) { + if (!chunk) continue; aiMessage.content += chunk; - setMessages((prev) => - prev.map((msg) => - msg.id === aiMessage.id ? { ...msg, content: aiMessage.content } : msg + setMessages((previous) => + previous.map((message) => + message.id === aiMessage.id ? { ...message, content: aiMessage.content } : message ) ); } @@ -68,7 +69,9 @@ export const Chat = ({ initialMessages }: { initialMessages?: UpstashMessage[] } className="flex-grow p-2 border border-gray-300 rounded-l shadow-xl" value={input} placeholder="Ask something..." - onChange={(e) => setInput(e.target.value)} + onChange={(event) => { + setInput(event.target.value); + }} disabled={isLoading} />