From a8a8f4a1fbe5e854198c21df4e11d1e6af20f3ae Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Thu, 13 Mar 2025 18:40:41 -0700 Subject: [PATCH] Switch from `react` to `preact` --- src/js/bun.lockb | Bin 102858 -> 103200 bytes src/js/package.json | 3 ++- src/js/src/components.ts | 4 ++-- src/js/src/mount.tsx | 3 +-- src/js/tsconfig.json | 24 ++++++++++++++++++++++++ tests/test_app/tests/utils.py | 11 ++++++++++- 6 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 src/js/tsconfig.json diff --git a/src/js/bun.lockb b/src/js/bun.lockb index 0bb863ce6fe213b5ee701cee3732b5011ecc3a6d..2e9333e3b8b75b035f92390e89bce003ef290ceb 100644 GIT binary patch delta 18331 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 delta 18398 zcmeI4eSFXL{{KI(j}31O!>(*ILl|w?%*-x6F3WnGtD{CyXBd`?vAJkUo35A=>s8(+ za#2Jj917_|o$8qKEnS?@)mKg@Do3SGoD;tH=lf!&ALpFk?RNg`ee1F3`|-MbKAx|O z_r=G%H5=;gf4uI}q)tn}PH8v0thnHb`b|##_|T}gbD9~wM(jEENOprMC&NxR`Ae@# z<&)!ruX1Foad-b>lUjeK78OsQG`?u+Akv!neC3C+jj$7niVO0`P4Z>A>04;VAYD>t zl6CjZ)m0kc0D`{`vE)x`)(b*LbWQJ zjDOO4zH3jqHqW)|XiM^!yLL*!>}e?TErg5L;|mI=Cl;3Yir`W3fz*=_HEQU%vywu> zeW6Y}Kfozko=G`EQdShUy*}uVP&eum{tjhBh?wL}E-0NX>VIV5gin}~KXYcmc;8#p z5tRicvt}0JL_x`nSp~(VzAp)#M6aM^dT{~H?xGwz${%UzIGI1LsCXLfJwrPGmA@G6 zq%Viapp7pYH?z2KnqE>TR4vwP>qPWz8|(D+BbEr2PtTt@DG|5EP0F7#nU;37a>6z# zza$awCT@m{r{!@@`FG;5j`QlWabQ-DK3~*QaGX1R~_#- zyrPZc;9s#KbP-m{-$FflDDRKO_wu-QK3@#B7hHsQa@!4Ih()-^RaT!AYN3G<`gN`;K;W+CzWQ96}p) zwZq#}PNqdA`G&8|Ub~61cyDkU$h0$j<$DtyPaBgi%d?F1X4v>7Ct~g4vaaTJaU!<~ zha@8XyE^OZL#%Y9sW0{oxI}6PRvdp?^2<0$=R`)vq5mrQ9hQ@D!&#h9reOWz3}!wO&A*QxgnR>F0CKbx18 zf5(ZqH@v^o;Xv0C@REX=J|A{!{&b)3W6FuF*Ri61J5~n5UEBpP(2>Y`94qNeOYaCY+qVGv%YQ=nyIwT2@Uwa^yx*R+3G4?9U4$KX`@*{ z?b12T0>NQ^pD#t{Hp@^0bv3Drw9!0Z93!Q-&E2&is4r$xZ12=e(*S?<#Zo23~CVT_8yRC8^F1=L8L!(U5RgawRvE|tB>ucL=G zOH=vU2oI>WIww5f|ER8B6rN3$YLara5fM=HbxuSecxOGIucyup&G4V8r}sx>t7L6N z27+hT_xT3s5PaXGDb!E#mm7UkCRp*9h z1drfspgs_qp;qdgn1KJiCVEj!c5n<6@ERS`Ji{2vnZyyTp=s)Aof8`{8Zb^yoAhH` z1M5!-CDAYz!6Y_8x-vA)*bghV^Q7c;%#I#*-oeN;qa4-~<`-{+cftDWknjxSmzq+c z;b}%DYeo9<%g6-Z2FupDF&W15oOLHXScj7SHLRETtJ>*`)&W(Zt6K+*HOx|0Z+TtY zv(I4Cd$7z1qZ3O<^6dFxOmbOWJ8uI_JabBZ29tVqG+qbCv0AeAfyj*DF`Nz5i(6(G zTR0OR>uAQp_y#7P*|WolW9fB;)zg)zxfLe!Oxc?MAbEC_zu-*jI57-o**cL4?b)-w zOO!rHK<|Tz+c2i}>pJJEfN{Z1t0RpXSzP9NP=f9w(u@+=H8wj4+wJE0HKFyNiqebP z+bgPlKxT1=fO<^lbO;#Vay^hSw`0pRt|sRWZFCG6Z?IpwtEzpPaRD}za!w3~#5i6P zC*r#RmTcz@3!`J$)i6d8H@<|4hG?o$t@S~=^|>7gG? zq6A~!-41j6BTR3?WKPlpBhrBVTuM5A_Jw6T3=NB6vexZcXdH%R!Wf5`G!>>Rt_~Q* zt(~z6(!=m}15Db&+laK_&tOAkAsI>B(Tuj!nI-H&)rkTBC-J&LQnt~gjWZ$)db>1Z z0BnHMA=7CCthWw{$}oQ7Or%mOJWXZjoGyXjxov&E>ve9g%=(;2q}iW3q!}6Qe7<3J z6Echsw9^e*W*e`PC<_nAV$zJ(-2V)QIl-9*lROxb|Ku_!9QE2e0kEf}F&ySBcaiac zHj)FzholXsc90Hb5c+oT`EGzYGjNBlP7bJQZKMQ@ww*l%vJn)*B+SYl* z-X}+7Q>$Z|k(%W5jdWVXp~bL4Hj}w@7$y<5M>;s6i_bSgA4ttGEY4&cZF$CNm@_CM zX%q@15Y8(74CZ*qu=*pr>HVqM!Na@R`zZ~r;EW5S6h_WpU^Rt}R?Ji_%Ok9xzUl=0sUa^h@!WtnezBQ=UBkmnnLGuWX|afpk1YUGM_fb$W4hhH;QHr>leP zlTA{Ih(6FOLrv61X294DcWTK>ya1EAZO6n&V;89r5Ii5&L+5tMP&;)_R=|i!b8?-r zn+tQI$>cTm!(=461~7>l>749?cd-n?%_6c++p@q)VNTl;x&tsLkfAKMw%i(CW5;C}If`s9pFpVx2^dRAyEwzYgvn%c zHu^3MxlBYD{!N69ggMjl6_`7q+~%Qm-X$7#%NB(OC}@3 zw;U!V8`u|y12BmLJ0bl<=QtCOdQ97!bk3lFv6eLEhD^rLwBS!*eROU_1~-&OZa|IK zIk^GjF&sxOn{#D!n(+nfqAw9<&CW{?c`(*Sd1L$P{h+QG98hoS>cIh{9YJ>V%Y|o} z&KVMro4O$ZBP7?mo^$C`{j@POpzhT>_J(Nd5`w*)@1J^dRQ|%`>Ul8Zq=Gm6} zB%dFI0Xf7KBMVkJLP2!~i{J6;G!En8NTAPuy!nPVGq&h}~_m$P-qVL!AFvC<)X znth0s_LwgAab@fD|1S%QTBe4tJ(y}Y=UC}rn#;x31v7!9&jNCY702cX;rM?nlgd6M zLn__|q{3Vv$G@^l#}1Fs{f9^DLBm^@N$op<)Gh~dlmkhh@7lXudpA}Nv66oeka#X| z`9iG7c@W4UR?00A!cp5wf0f?Qabg#INJ?>BVs*&x;>x6(Wpe`i9ImAkPtAXUN0dlMX!q);hYS}WogU3mf0#8UThgjk3UAqA*hu9$S6p;L< zfgG2!;`nAD<(>s{h?VrMK+?DIa>qWlIfjIbT$Jo^d2K5z=Os5?tTgzF%f(8=dtF}J zO1am7*w;Z4_(A#)20sI-cm~KJR`^*U`R84J0V~JltdzGaxmM~0lPEK%Ay)Dmxi$nV z0VdYkOk( z&zJ7BTuWcpCa`RW%8wv?4+=NwFacHf}pK$p`*FJ;gKi_8l$dGKuHpae+m7#eP zTMv5xD-IpTN_(GT#nI2Pa(FhxI}xk&;=H&rY38_F?OUvL^8>aWHk>v%^+jN%xhVdK z&KM!CmD5%(znqn<)^5I7X)oU8*fRSf*2zt%ZKb0`H(jh$Ou|ZfH#hy)mMpuy|NP?X z&WQiw)mMD5ug2nV8=L)$i!c4#hioLaGM9J5ipc-}tFP0*m9Ne|dC6IG@h$tWUwxha z?W?jx;NM()8((rY{_W~Z#AF(*1`@qBK#ny)_*x)GE&JQm*VzkyyZYKQC%`n3OTcee zU%3kN-)~o6_hNaOtM4`covW`d{ryZmAm7wI^F#Eid{foYC-U?3aaitHQw8g)v3Yv= z*bsdVR!`@Q%hLnLh3L)WOl9b^urshR<4x62ZyKMcH;!+lAK1m?d_hAMqDK|v>5&B? z`lSL>HPOa|JY9c6h@LvZRH1q|Y!@tcqRCG?g%k7iq=_N=04z*LP0G`elS1^oNv4X> z)v$fA#6nX=>C(bHeOqCO{uCCi6K>7Z9d8ZMi*Ge~eQ+3d2$nV3RB^gua-Lo|IYgg? z#q0DbdAjEmG)^&9TYUm{9F{xPR9ES$sc4*vMpy@(GYyT?&^XOh3HmJT3~Wr1sXFUT zMQAJv(IL}Km8eHeN8fbx!MbQ;2Kr{8Z-&V)V7p; zm6$3`SHt$f5@(t!U6;;8-%RwuGIYW$^vy!wEK_Ca!>~iJtl6dt=!)6sn~gqLADuo2 zeRI$^$K-{^3D|L1?ro+TpsQ{}-)-oFU8{3S(N~JTQj^~y&ce>X#>_R9sW;6<-(2+F zZmL{8>UQ+qjy~8BZQOyrI~wb0cU-52>D{nhcc5>cseY#m=b>*N`e4`Vs5{YjC;IL* zRi3Vf?SmzjnQD|SEkj=!`d~NdgmUziqp#dlWAtIzAz0RYQ{AE~=A&;u`e6Aw{Vw#~ zg}%E?HBO&^9f#%KZSuQR)!pd38-1{eI_Dnr-Gjb+OjW4Q!p^|P+-s`Idegn=yBB@; znQE#YbszffLm#Y28w=34fbm;ksu_AWY!@tcp{YuA;X?E+L?3LHj;cUk1^OyXHAh#& z_Q4VtnW|KmE<)cT^ucb|3HPJ#e)QdMs(Jb_><}#L0aKOfiU-j50Qz9_b^2oTEk@sB zQ{Amkz>dRmA2fL}RrMhH9z-8(fzDZiz9r~eVyXIp?UW~r&}*PE82Zz=jJP5u$e zs7mxzq7Sx28xNuHA@n_Ds!F{ZwhI=kO@0h6)acXbgFT|79!B58=zG}Y*V$^=K3L)- zrmE7VkD%`n^uZq03Cqy841LQ?wMrj`9fD<9rdq8lEc99EgRRx+%h9(SealVtxIO_p z4$G}F)p}i3g}y5E!JgDPE6}$BeJf1f_nw8FfsJ|8^U8^8hxwLx7y^*do^qyEOCvgcI(nL z=v#w6*dCp*7JX~cx7JiI>BF!?u&i~adPP^PL*F{|!CuwrkE8E#^gV8>Kk5^((RH~~iJtj(tSTvu#H-)8i|j_UMh(f2I+o;B4meFAnImb=AN zU+StY=-Yxm*jGAdEBdygZ>yv|?>STbtgB)BV2RJ0>Z~q(9(~WF z5B5);uoHbd(YMo7=k#INAz0R~pY_l^LE8uIuI~^2D^HwF`3DSflBBk6e|7&jC8xoe z&3IzpK7Y?GN-u5N!mjZ9mnW&<-qAd%Qo-V1JOmlZ{F=%O;_}SxGxnaUr-F3;zUILL z_%WiPQ+3UrPwaBuzYviQGJ>{meS4mN`_jE{*So@>BS8)J{UVPG{Kk7uFFF?}JAc7B zBT~au=plE_N&v$Dq5Aj_XZOi0!MhKAC z9r9YB9cT|afCM0SGjZTa@;8D_U@ce&%j&f?|YVmDj@HM9tMwq z#b7C@1P_5W^d;|EIsl1o0_X%fgLuG{m?r=9#(q`#GFIMP%X`x&z~f*IkVi#%K@$ne zIhP0SQXnG`1mrbc26&yMH^7@hISmwnB+v}B0B?i4$d}iW;UEIM0}g`sz(+vdU>yM; zgHM3`T(VbQS#;$@UW)h>sT{8xy2tr8W&h;#AK*BUP__j!ZGr&-v8SO--XI`TO3vkt znM``tto>R~`j9k_6ZV?()||HjZ2*hZes>}x(iAk2StRq5HExerYit~l3Q{;4L;(5i zMuOG?xE1ZRD0n1j>E^{?KLTHYzk)BpU%(+S5qNam#LEk5`mPJS>MUE-gz=yUS-Kt>j^SIZyE zGXPuzt_3+@1Q-sk111;-hJqnLoXG`)z+m@W?C*etcr>^Ph^+=_w=&*OfrVfn_!FoC4}&+s8{l%rsTQBVOq zhacixoLB_J0dY>8UIJ=6HA)i1BTtoZDf|dn4!lZ|=Bbjh!o50@z5+<3)&c2orIlY- zH7{G`Qt?9|MZ`)mIrsb&pG3bjb2%Me{^jaOnz$+T<@_ligF{-GtwBaY0$MxMJD1Ux z!d@d=+;h)a(J6Yix#`llbhaIM@!7$-^x?HB<(>W*UP<&klg6a7Oox|%*Qun-s7vD# z%-ZQ*qvGfeAcOT9kjRRYQdg|B>D80zWuMFRsv+*V%vQz9W^{s$ZYZv%100A=<0^Dgij^Fl33YlmLAUwYj^aXuD7RUs> zKo5`#x`D1B0kj8lll(QdY&d^LfYIP4AdTM)Mgno>2XHkIXT%BV`0qeEnGe!{G+qwQ z0x2W>pWr+=2Yvx(48>pC>+9GCnKvc(7&FWIs)34K)=+)zKkT#WHd6f?$Zcf=?ZHPh zQpr8Gzzz8Aks1FeTrgrnQEQ;KFOW^>gH}q-I9=bL0K<0 zQjw~W^A$xf9_S)JH%~};dg!e zOC9S>W0mZ`5NuuDL?tW3x}^#Igjrphs;GbKkM(8~HOVcU>V2EFXU&Po=r4$Byw4QE zZa8r4>b9@nY!@JS>3n>&ER@K3-#Lu7}vvzLrS=noVK4-eQ$ypjxe)tL|#C6&+A1*23nhrCM(B z53{1wGuBJZF}tjfnyZQaw;EZ!Tc}9?kw(^yEg0Ib8(9yE{i%`ln%MJ=tZBXNp-u=> zDJsHR+naecJB;=+t;#SOazdsCTBpcSdDiD7_VB))i*0kX?OvnJZk+8QQQ+<`#Cedv z{_xSx&Em|twv1$1bSFcsq;LXKWL+ChR|~D%#VohBgrk04W2airWr+{R|FK!MU5&tU zjkXJ1x!j#ylk9RUt!@#7=ZB`&pa^>LSp^X)CEELjuEDCKNA9V2EQNL@>^M5w+AamW zkK=9__SWG1raS)RDxu>zi)M0}1w$eczTPT~RP)sk>l;aIWTi*p{EgPsC^a$0`!;TB zLaVV)Jv?@ZUomXb2NTlzE{gCzV!hJG9+a$>s_zi7>9iOUpf+?O$Ot@UzC zHCVN^LZVf!|HoKsbhL_$_C9JG+~u`(QTzYc0yn#(12=bBOQKm6-q&tpXSB=e-LOed zTd3{CJ8{-$G~rH#ups>EZ-vI-&dpZm7{pXtrI={%1GoFfKfLY5Bh{b#6~mS!7l#$r zQHuNj+Q#}NhM2@zVX=sBWaY%FN0qXE?rSr9WqDt{4cUBf&dHCWWO>Nyrq5@s+*S;< z_Z8f?XU2YdOY{2OZ6RGnNRBn10!-XTTM?rU9h~K`+#-A}>aqiHrL_8_suuOSrQy}- z4%Yv4!DgWn3fj=l()ICHDDTFRAKQ`=)I zt;#N#71p*+m`&EUG|V0=zBQuvceMVNPV|m;w3>Fo{;i`my*2#?Sr^h&xV5^qidBuR zIBBN6^-uAki}ihL0@BM`n*zJm3dCb>u+&wmMeAhQmh-vD%5|yfptoXth542n5V2JZP4U>qBfwk?}|OI4vGaV6E(l!^(PE>U-bHZT#W31tY8CciQ!nlhS#7vOcFks`t@dWc#n;KU=z@ zt?M28v-erv`(MvFbgbo&Ep84QbD@>kmbSg`_~t+H$7V-@7RweU@uq-f z)w%{Tot&ah;D0^RPM$ZW(cTA;-|bwuw5tA>vUa*9u}$!bz*`{Q*O^CIlQ+v3k3KJeMa@I7s1b&#>A zKqv(oev$FDsVm*Fm$mbTHG=}qj0tbWn)SZPTvOGcN8IiQPPuKdi0la24%oqta$;WF zF*n`z&s$Q?@VGPFoso{BXz%;fkaF*-k+IAPRJM3Hj|6`YuI<1##=)R&#Pa&;P|1 z<9K0>?s8E-zFk_q)(p3chs$ELLmCz=YsytQF^8a1AS`#4V%1wHgCD)6KBj-fG>YA*AoY81e z&)#7ep`po)kb9l5xBiPm8XiOoZkFqNxIpBIJv(B9a zk*VG%#E;)PdsgZBn_>w*ZpmGz_mT14TMORlls-gm@nnzX`nBH5>VBoCCi_;5$Eydr zGu1Ekxb|wQSqrX=%jP+W(N}n2V1RpApQf@cdS7q%7&NzY(&|%5cq;csOfCC1zV_C3 z*%`UQs?6k4zNCjYdoJ&t7hUhVe5pEHNJO0!cQtr-5tm+RoV$jaqtQUK!mZ?|1%z2-ezrSJah@mN#cUfn>+jk7PsowYIYxYlUdh&&!Tj)scQ7Pbk zk$!&6lDu!;yXGS|2U$)SY6j1}xY?<-c5kb3rnjeEI{LMS)Sf5*;cSvk?=l1Ms|Cv~ zCsQxV?>;N0djBhkqYFQtxoz*S{cyv1Ubdd;r&`8%|Kos{9{BN^ z7N<(z^s7$tj*H{mAnS{MD!D;sKj(EwT9f)K`H9zB*k8@w*?oZe HHuwJkqC#a9 diff --git a/src/js/package.json b/src/js/package.json index bfcdb72c..eda9dd6f 100644 --- a/src/js/package.json +++ b/src/js/package.json @@ -15,6 +15,7 @@ "@pyscript/core": "^0.6", "@reactpy/client": "^0.3.2", "event-to-object": "^0.1.2", - "morphdom": "^2.7.4" + "morphdom": "^2.7.4", + "preact": "^10.26.4" } } diff --git a/src/js/src/components.ts b/src/js/src/components.ts index 176a1f30..71f72da5 100644 --- a/src/js/src/components.ts +++ b/src/js/src/components.ts @@ -1,6 +1,6 @@ import { DjangoFormProps, HttpRequestProps } from "./types"; -import React from "react"; -import ReactDOM from "react-dom"; +import React from "preact/compat"; +import ReactDOM from "preact/compat"; /** * Interface used to bind a ReactPy node to React. */ diff --git a/src/js/src/mount.tsx b/src/js/src/mount.tsx index a3a02087..e2c19763 100644 --- a/src/js/src/mount.tsx +++ b/src/js/src/mount.tsx @@ -1,6 +1,5 @@ import { ReactPyDjangoClient } from "./client"; -import React from "react"; -import ReactDOM from "react-dom"; +import ReactDOM from "preact/compat"; import { Layout } from "@reactpy/client/src/components"; export function mountComponent( diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json new file mode 100644 index 00000000..1293173f --- /dev/null +++ b/src/js/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "jsx": "react-jsx", + "jsxImportSource": "preact", + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "composite": true, + "allowJs": false, + "allowSyntheticDefaultImports": true, + "declaration": true, + "declarationMap": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "lib": ["DOM", "DOM.Iterable", "esnext"], + "noEmitOnError": true, + "noUnusedLocals": true, + "resolveJsonModule": true, + "skipLibCheck": false, + "sourceMap": true, + "strict": true + } +} diff --git a/tests/test_app/tests/utils.py b/tests/test_app/tests/utils.py index f1fb4bd9..dc3cb9dd 100644 --- a/tests/test_app/tests/utils.py +++ b/tests/test_app/tests/utils.py @@ -117,7 +117,16 @@ def start_playwright_client(cls): cls.browser = cls.playwright.chromium.launch(headless=bool(headless)) cls.page = cls.browser.new_page() cls.page.set_default_timeout(10000) - cls.page.on("console", lambda msg: _logger.error("error: %s", msg.text) if msg.type == "error" else None) + cls.page.on("console", cls.playwright_logging) + + @staticmethod + def playwright_logging(msg): + if msg.type == "error": + _logger.error(msg.text) + elif msg.type == "warning": + _logger.warning(msg.text) + elif msg.type == "info": + _logger.info(msg.text) @classmethod def shutdown_playwright_client(cls):