From 2779431c45a3caf0ad68ae5d262c2cdb9da8a294 Mon Sep 17 00:00:00 2001 From: "moxey.eth" Date: Wed, 14 Feb 2024 13:22:02 +1100 Subject: [PATCH] feat: vercel serverless --- .scripts/postbuild.ts | 16 ++ .scripts/preconstruct.ts | 2 +- bun.lockb | Bin 204120 -> 284728 bytes examples/_dev/package.json | 2 +- examples/_dev/src/index.tsx | 1 + examples/_dev/tsconfig.json | 24 +- examples/vercel/.gitignore | 3 + examples/vercel/README.md | 11 + examples/vercel/api/index.tsx | 66 +++++ examples/vercel/package.json | 18 ++ examples/vercel/tsconfig.json | 20 ++ package.json | 5 +- src/cli/commands/vercel-build.ts | 52 ++++ src/cli/index.ts | 14 ++ src/cli/version.ts | 1 + src/components/Button.tsx | 2 +- src/dev/routes.tsx | 187 ++++++++++++++ src/edge/index.ts | 10 + src/edge/package.json | 5 + src/farc-base.tsx | 195 ++++++++++++++ src/farc.tsx | 363 +-------------------------- src/index.ts | 2 +- src/jsx/index.ts | 1 + src/jsx/jsx-dev-runtime/index.ts | 24 ++ src/jsx/jsx-dev-runtime/package.json | 5 + src/jsx/jsx-runtime/index.ts | 8 + src/jsx/jsx-runtime/package.json | 5 + src/jsx/package.json | 5 + src/package.json | 36 ++- src/utils/deserializeJson.ts | 6 +- src/utils/serializeJson.ts | 4 +- tsconfig.base.json | 2 - tsconfig.build.json | 2 + tsconfig.json | 6 +- 34 files changed, 724 insertions(+), 379 deletions(-) create mode 100644 .scripts/postbuild.ts create mode 100644 examples/vercel/.gitignore create mode 100644 examples/vercel/README.md create mode 100644 examples/vercel/api/index.tsx create mode 100644 examples/vercel/package.json create mode 100644 examples/vercel/tsconfig.json create mode 100644 src/cli/commands/vercel-build.ts create mode 100644 src/cli/index.ts create mode 100644 src/cli/version.ts create mode 100644 src/dev/routes.tsx create mode 100644 src/edge/index.ts create mode 100644 src/edge/package.json create mode 100644 src/farc-base.tsx create mode 100644 src/jsx/index.ts create mode 100644 src/jsx/jsx-dev-runtime/index.ts create mode 100644 src/jsx/jsx-dev-runtime/package.json create mode 100644 src/jsx/jsx-runtime/index.ts create mode 100644 src/jsx/jsx-runtime/package.json create mode 100644 src/jsx/package.json diff --git a/.scripts/postbuild.ts b/.scripts/postbuild.ts new file mode 100644 index 00000000..da185134 --- /dev/null +++ b/.scripts/postbuild.ts @@ -0,0 +1,16 @@ +import glob from 'fast-glob' + +await rewriteHonoJsx() + +async function rewriteHonoJsx() { + const files = await glob('./src/_lib/**/*.js') + for (const file of files) { + const content = await Bun.file(file).text() + await Bun.write( + file, + content + .replaceAll('hono/jsx/jsx-runtime', 'farc/jsx/jsx-runtime') + .replaceAll('hono/jsx/jsx-dev-runtime', 'farc/jsx/jsx-dev-runtime'), + ) + } +} diff --git a/.scripts/preconstruct.ts b/.scripts/preconstruct.ts index 956e4439..dff82dfe 100644 --- a/.scripts/preconstruct.ts +++ b/.scripts/preconstruct.ts @@ -85,7 +85,7 @@ for (const packagePath of packagePaths) { await fs.mkdir(distDir, { recursive: true }) // Symlink src to dist file - await fs.symlink(srcFilePath, distFilePath, 'file') + await fs.symlink(srcFilePath, distFilePath, 'file').catch(() => {}) } } } diff --git a/bun.lockb b/bun.lockb index 64e2c430f6cce1a7dc5215e2e241c4e680b5c750..e8a72ccd6df10113e69c197fe958de9cda113bb7 100755 GIT binary patch delta 88347 zcmeEucU%-nyYHL`4w=6$y$uWRxUHP;@Y$m_w^AA}U7A z0W)F_n8TVCU31Pkf9L7$ap&E4@80+O-TS+LZSS_H&Z(-Wo~nAPy1E6g>@wJ~(RhYK zi!QURf2>{8Ue#-2Qbff}RojI5i6_!78`R!yT*IL6!)(v8P+bvSw`PVm4!C8}nTfF(N0DC>ypN7ZWB@FlxxcZxk)B9o z0U`o60^XJK{5a4Id^NBMa0<{8I2hOz7yxVxY%O3dA^#;@CH*%b+1mkZ2wVd+1g52C zWJYIXh$7$#xH`WXywXQTiYg^FF-9bc&4|iMOo|aTt;Ks^8)$<3uP9v?_!vmNx+w4i zK+4}J=nDjWJg`3Wbbj75? z`7?z4Jb@2pT1afw)6g9l%Kr^T3DaX$(V6y%8ICYTgKrHa{Uy*Cn3S587K^#efN!K9 z5$f##qUZVfut%6?pOl!Km?^4gz}rcKZUnsn5Dw%QV6rgIP4i3WnlbJF0u_@W2 z+CqL8Mx|qFHVJV-F2v@;h8}b>yk9HD6w1PYPeCUM0#9mJ2ws8OIr0U1Rm==Df}1 z#FWG|RYt}QaB6#ifU|6P+Yf;>*dcj|kTspzL@HE!z24tw724)5Hw>_@vY*(I@1SgC)?Zp*U4W=1??} z9-Ebs7?&#=>B!Hm(uwc!Bp}VoRG~bJvNZP(V4K=YZihwHABkWjXg_cT(!P@6%n#Ky z6r`d1^Hi*K;T_?;f>FEnyhEue(XpVSVd<(gM7L-FGg@le%L2L7jk>5sYdBdIpBN3- zgI#&+7l5R12GZ`u0%=$B0~!L4!wc%}A|Sbc&z*T9wNz{3Bv+M`l!z^M60)%_^C!9U zW;cU30Qd3aoy`TOMI9rQGgk7QOb1fELO4#NW$4A@C~z9>8Q?T+7X(b@%eBhC@55*0 zs?y^#ATIXh8_sodO#u~62d4(}eVNUA4iSE!WarPt6Fc$k+y-*_LiO3;H28%AW&p|0 zxWtqg`>Zt4(k}e4&g;Us*RWA*qP97TQLBxBWKIU89kWe0e)JMl8L7kI-yv`s-DW_V zot=Svy?Q+z{+*!V@F7Xf_vcF@W0I&i|c)O34nqw0icp@KdPQid{!Z?GYB znulUkr~_OCog69v$3C0C8V%F9ckjjbuNp}8XA2FT0;lQU4Wy2h3;904n&9(LzYZ;< z5>%kD9u0vO`d|UWxB_qph#fWG1P+p+gM!00(8)n#APuktNDg7yrN_p{=DbEZDxa94 zN>5kiimro`X=89I z|5X^7%RuT#6_Cn5#abo1+raAp2LoxL^a84>2Sbu#v(hnF(HYq^WupB9_y&^`bCP4h zw}4ZFYk)Mwi+~0|JbsdfApeFC(dU3Qp|5Jp~llh3(JShJBz_|!R6c_JP z_zu*DV-#R(Qu%GUT^b*ltAJE)K9J(U7D%I;5u2PHn~n%fkIhI;%8nH^K@ec-^6LYs z$1)%}GzA8!Vj+4)J^2~W8yrGgN@|>_Hb#pKBF^b~B6^K{s&@xS^^#R-_Nh^WMHdA9 zSQhUvr>l{1SSXl~m8?p!PmGDnz&K^5t6n1>$?)Ke)Refyq}bJn2QrwMj4t4MH;gw_ z0VId>bNKQI%=DPpOi^sg(5%Gt*z`q0U`8j}C#J-uie`b+RF4FzY3=$A=RKw;QxtlT zk)+DNXo?c!Q&Q6rWr!y3S(-V5Z}0@lQw(SvZ3|upTyq=`@#gJ4%Hub)erSkdAxXfr z^w>-s-_xP1xr_j0&>W@Nqo0|v>1p;D95^sx6ko9=@~MG_KpKHvm^NC9-+}aS8<5YB zz$r9L?_8RY;e ziU$J8A%7t4W{yI>xsV^HO2=}?R3#)1!3q_foy0qun2d7}I31_#Q{zSI$^3}j0#ZjZ zRGF#isBmKnzq-_?kf0$=h|RH2kB<@^0;i$2L9{A4HYss<>^$hyE26jfT{^SQi#w*=e+ zq=CX#_>|mNq;oF-r5cra`lfykW%5uoM(cPfSi%#fd~IX~{`g zyrOtjRy>x5$aypGm@Uu{_8S3d@on40?+&#$WBe&Ym6o0wr4or&AcKao^%j0^rvs_y zqXlffl{a7wPOCX3H7%1IRYgUm$0BT!RYPLw5WznrMWSmP_#r>Fjd$b>I62^l5u(^> zuSS9zXekU`7Dgx<`%K9WzCb06(+DBDQxJoqg}eBMPgd|#vsu6eK#GmAK-&M}fEK_& zfx7@{*;xWcy(9=|y1^eWTWZJfIbrI}p&>7r>*1zWIt1C3L>L?$*mh*W>Y5}Qdxi zu?lDo2OZ;MX9JMrNLW5I|^YzC9<&bykOj8;Q3UPk}CO8&e$9AJmm{n^ueOzi-Y!v}$Cihj+T zbaSCWP4t?BQ$Zsj^<1+LXx>dK&+_>hnX1gJjM$9Cl!Vyy#LNuMlqO^Mq$@cwIz1Jb zt{P?^l^TD($?76M zQmHAinTdG$NXEEC+sCD7zBv6?UzpOe)cl!H^K{Y#$9*(JLzbD5Lmdz~UEv!Z38Xo0 z0F6e5@(5o+r{$+{?9ZRF?jWB!*8dtGyuE-lqFuz-%I_G>)s;DUEo+`P*4UicVeTk< zx1!Dh$*i~;OprxTc}~4o5?O;qBZ{V$^=Vt4&>%=s{>VH?B74&7$gwN2D+ZS@wkQ)b zL5=q@8yhufu&^O2nvEpLBdZ=>rqzKnU+%IMD30q++uO`0rLuis=?dHmHtos8J5 z4O5#nyA!`}Qe;D~HoJDr7-L%SqVQ(Z#;ln|(_WMF^dgHrrz}tLtG#h$=G3#3Vy0~C zn|Nd4i%(gf$Avtdwbj?UQRC;~E^_7l!s&a8f`d$VFStISh)tY5ra{H`%GQlCq3N_p`U$-fXaC%uijl z>x|NEw*vK3^)swJyEd(UQJd5?MwpZ@ntF5Dw-c}4?i+b0E`lx4 z^jy=!ab6c1b~{_urDk@#`r@r0t#oGHC@={Nt!!K(`Q5qBmWOJaud*Lc-LF5hS>X`c zuDH>vb>=a%X5Q-heY?f@&TmJq)oXcunAP0@_YbIh+)lk!F@RlNT$PdiPL`kj^nyCH zTl;S_%NDQln^E-U;AOvOqaTiFmgj7LFTvYwf0=txT%_+gX2A>B3USC2y9~V)0<@^=Ww0`)L6KFEl=XeEza=K}(Ni50P9*&ozwvV3!$l zE~?kWOY1Gey6LanC5|r9Tf1TUO10W~T-yw0bN zl9Z$Fe0S)m?K3JG1f`CeFv9F)$0vJAnk&uKC*!({GI7!RLs<+q+*H?j4yJFr;3aSrhXgum3lwPHu?))_kUV7g7~ z_}sZ?@-9yme-W!^zwYv;xQ@}wJd3fP>ddj6xZ+tJ`^aG1F;)E5Z^O=H@9C9zQ1auq z8MSQBmfcaO7A$V$Yd$iz{_FKl?cFM^ZfsvrozunfdMgJ3)eg%JkI3A%plOepZ6c=H zZ1r?o-TnTppUZMWB3F#{U=DVTDSx@P?TwRqHWl|;w##03;fZszxnukLG%xCSzItKH zs6!n#f9z!apvLOww=CO#cxtxk!+`GcGp}#d+SaP!i|$>|Hn%*HA-#08 z?&V2$Th3oUW7+Ve5t`NThTV9{JkRQlW+yAEp1m!2`~$~7uaZBnj`eYC2E0=APf=I2 zxcPcc%Gu=~a$Ne5>+J)kfcEt3PG^?S=>5jT<6IU$ZbmWjBdMzubDh*iKZ>4iB*pH98+ZFC4R?T zwepe&NkpQ~cx>u0x7#Y@bHTcU)!^72Fjp{L#>&-ItixPusuT}m%&fhn>vcpTcc!{s z2d2o{OVUP{xn`{tXESEayrgb=B2hoaqM3(uHd5hS>iI9tzlKQEo70MsQgNwoNJVm~ za2ek5xYQn`268D2xh9o|6kqP@FU=K?e7=pDNQF`j@gt_l)=OetleuQA6vs1Wc3!eo zI8k&!PuS5>Vn@cvSa=cXVxjm5L zH5Mtp+|6IP);PrQxk*R`a&>q9(j++g^yIW)r1;#0Nby$gBgNNssH15u11VnHjTB!) zZlb9Xgj4`$uNW!5+&!fDa!xqS^V)EvIPb-KnX3+7;@6B>8!x#vUL{*&I3&z%2ZgvN zQ`E*wItrRQQ)1;I{~f80$hBZfN4qlNj$ZOi9K@7Rq>Rc@A>Pbfb@Y;mOc`@0rQ8Rv zK5aQurFIH=KA11Ztn3ux1I$$?FR3n0c5uPbL)sOo4qOujNVVq-BI;yEz{os5J2R|g zQeC`oc~eQT9~0irOT3sVYUd?=3$;C|k{0HSxwBF_&|EMmE@q0Hy~MAWtIl3>hlady zF;i--5XUg#E?)8l(5MM9bK6NFzQ$aI)})b0)Pr-j)Jh>A2IdYXV&J-b6Bs#&5o)Ut zKV+`9_mVWWV9XUtaX1sM@DeX$iWFY*%Xt5yVmgeKqe5A*y~dB~lb@(p7n za8k(Uf$@_}V{`l$qlUkM(FVdB?`h4OoAFB#4O%PYfda#* zJ1e9NF{Wfj2N@F1oL8l`3W-T`=9*F|p2C=Ud5P~c;a*;H3mcKh0|oRcBIRLV)FnCR zZ7CSx%+>C-qzMLnY(p!Czpyj7p)9Ghn_bDPc-yU@3L5{^jAD_>8)CgGQBuxOu!e*Afr*&XELWM3rAK2ZzYgY)EN;x@ z*7khZ!5x_F4aQG>si#7I0E`;fWiZI{8V-D(gi(bkA@AnI4-E1!_eEed+hWGbS0TRz=Ea+}RY)xnw4J#P=N(ey zvz$>SyUN<}PdP4RB`4Z3^E)dg&77HQot5%QaK9T0^22uljOKt}aW*cR;k)gukPLER zu60q$H$kM1h`14c4hCm2q2!G#xWO z<^a9!D=-XZXN7DU7!BsHO;Uam3OR?C5j+N1XtdTuw5}wPuFSP=O8EmQ-68TlZR^HF z1Slm%Zp{1urBn~?c3`Tzc}RTS8T0N+>0AgsnCjdPG9+lQYH$PG9_x$@^ZQK7zp!#J zns0O$(f$yOI>V2a6-EWU6Y7P6^#a4VB7Rqa@jDWQ*JH3St|W#@65z>P>!FlS@YIAj zMpAkLtTSWb>>;&#R;c*sv7MJ8)%BU zTXO9Y?+DZU+T2Q73`P#s;imct7>11MIVvPJotcObrF;CM>C8NNo9>Nr}J`ap~0fyyxTwr_* zd;{Yng7VsT<;RZiZ$231ap5iB1s23JPlePML)?Q~ATyAn2!nMjp>trqG~I?K0sI7u zMfgm_+;(ln%;+o^2Qm>6N@=qmT(Dqy4MvLk#6N?}z-WljKH}_34<@3YQf}T;;|4X* zhZqy7@Q_bKin`3Nrz1U?i2h26ZV)qnfKna|Phks&u;WV0!NSN{SWDQQG+Y#~g^01xRBq`GmT z{tT&K1*JBys^kpBAVsU48(+!BK8*PwrR+V#z7T);Bnt@nlOivLB2>f}JO}GfP0G8X zA_Y6wPdNj|52jUtt1d_w6_T_FWz3_L@)4o@Qs9PKx*yDy`Yrv86x??4karBzgbh8^ zbHkX3Xr=rnL~4SYUwMacO%!0!OQwV~<}pgi>2M|@MkzIkp#6%5tS3@^xE?P>3L%Et zw2wRmqt%G@=cSN3^`ls!ky9gu#bE0p--{H#a_|h2eg)(0^z6?M2|C(cAzuzgcKGT2 z4Ccqx_Kei*rqtR*umN1D(%G&u5cGtG9wX=ly)9!A;~^P3fQd*@%FjXI{iLnhY#_h3 zap(zFNV*SX%oCN8X#<%Ez_EeM{6wW(K8RmbSd0z|sRtM~DC~Y&NYNbd3%Fch*i;87 zBL=Wv`Fn7LRX|6I5 zZxDV@cqlNOf>6*qnqMxwW8=ZFozdc%<0=Co8~kypL5yafqD9y@hA~f3%6CC*k0RVL zMe-_!nGdmDtkz^nQezqORHbBnEEAE6@rnCY0UL{#z<9^9z-Wy4EvOvK6^ze&DwKpT zE()1dJYSL>{ROXuc=3=AghGzsV1*<695C82^yrWx@0`G&Iq|&3DP%O5FY*vO3nqNdi*wf1&n;fqqeuJcrbG1=1f4LurrM@AFh;3hVqe$KypP9FbX+Tz*x)z zqfy3OV&R+{%9xK(%DmD=BFw5*FfWIK*9dH2w~@lbl7=M)Ps$9&JWnY}%3vb$@TQf) zuSxic<QaT!xjy5|)|gFg}kT+$^xp z$m60}a(EasKVK>R4iQV)&O@TeVa!J>AJoH;8Ds3ey+huOh{%pFY0 zM7nrLa&no7F<5N5%=|G*`D5r^Q3pN4O!pd&o^fL{7bzF$HMtSI1lE>!rmaFM8-a0S zB11gn9gyOKin=orj2{VFDBHm(u&{qmcBLv*5btD5U3K&D5rSHgq~$RYg-Ypa2ueDx z%D*Cohcm@<3f=}r@+SCcEEE{ls6rvW$P`WVk{gcVOYr+a02qZWznH^OsYQ7#u-c=#<2BUfSW3R}ELS5lk`9XnUkg&rV68=ytnt{Ho+SDrdl`aefPw6!7tnNx}Bh9;_FaM{EHY z4JBp|v2;gZ*qWxf%Et4LN`7}73`YAX8o=V34~7>HR}c9uq&%Qw%n}sxn-lOY?-x@P zibNs5*c33DbH3ztFr5DcW;0PF!f{Gq!@vT6u|r_L>Pbu{F%irt$-+s@H3y}%dXh-w z#vQ2YPZn{9ZGG<5v@00DL~!6YoCe0tmPjPR8@2)mO*|)_L8SpikMOqTFol^vM=5_b zg+IMu+Atp8Q~AZoZM*XEU}O||3Wanx7`~t4P*igoZ=RpeP=WEEsaPhQ^^zZjMq!4g z@ctp5&IcubqV)pvLLNSYU_M5H(flJ)=D5}X=??NM0_81d@Uf0D#HWlX#;nLoRtAkG z^jB1izc58bUhGRLV!QymQE&E$2w>5`Ih#xcw&)ECA*7 zsUwD4z$nP525t5H3Xm++Jp5=|?*-*SOZVz^qfpi9`!IaK-HCih?Z(zy{cLPn( z8AKx|8O3OIF~57a=9cp{i1cK}NuZxXUVq)MCE}$p?g2)NTNCyCCSc?sH$VpMq%Z{g zDo1{u*I&=K%&jPS7#IaVwz#GW*q=EM zj?!R2bAX1=bl9w#ZPfTlN8SDcgDr1`e73;&*SM2lO4P%n2*akoiQjzqXQ)zO{HN=5 zf#FnwZR!+QTh2dvgI8|my~TqBkB;eJzQ}{O1+Fp>z5!H|)-FfHbC2s-q^J<~IW)Wy zjCMV~;p<>D8a(sZqS(EFb(g>>tM3x$Z$akJ1OGWTd<) zn<*WG&kdx5q03Vga_d8UWbuDtlnh4u6Zh^YF9-AG7_H>@U{nvC#OsXbVcr4$v@#lu zmKHxad%>tA|FZiTjJ6jpqU26T_@Tn!z~(?O@{E6_SoDig3%9^JbM-Lb#?6oNHfy1a zb#Pm0HcRP1;I6oU(xA zPrHIN`4~FSlq7VJAwhlPr&D%ZdqW5UYll2+q|FqD^T2$-s5OjWF{WX@To)q$T3~WQ zbL60|cLbxs#a4hgoC!ugVaRY4JO@TYhM~r(+~g!*4-@98kaYwjcYbXu($P@3zvVZs zK&lPZg9CKe;RXq31sO8hBZCWb!zQQrE~A798x{ZhBkcnfA1k6fHIVN_VLs3iezMnK6j#6I$*}ovd`D>Q(>!y}V%bEf-rD8l z$Dr^XE5%=<8eYJ7ac{JqNVP>t{sEB+M)mlx+#oPKAcraBFMpM!NNahK-$3|hSPmGC zIEDbxzZr}I15t>_^CK|62NaV{F7YjJA8_S^!2YN=AB>`x-~Voa(MWP%Fy##{YvPrb zu|F7jjjaKn)IkKN;n*%PPh@e98R}dSHc@VPG*1;zs8j<>Ay^@s3g!>S5314PLb={m z{yfL+Akql1woD10V^feK2l-v+G#ELE%@Li}zs9$Vw|IDw1{TDZoam|xg3pZjTg7kJ zn22TWY9n|>_&??`zdZT>ZOjd zCx(lVcm@$%gj6~kH|fK0(?v-7aNMMiz)cq+@jN292&o*6ChcwGanq%RYOcZrh*YtV za&Zw#a8DwF>+g{2P3B7dD^mTbxXFPTxT*WIantn&B3I5-t~B)_GYh#)9*Hj!_r z%+wu?xv*I#)cPwVtILIaLgFiM({fpZo19*Un=Wmna_eyuZoo|!A(h`m1Q$?E|2m6k zJ8tUrF5Fb10ykZRr0*euOB<=&UfhKHaMQI9HA|%7-1UxSw9t7N_jZ_ZXJ69gtHFpt`z00^M{|ZyO(}auY>tJ+g zV=eHijoI&FTr|H%0O^@B2uKb@3Hkpea^di&f>bd^s7Odj`sZ*6;{=Q+f{TzG8!TY5pc7Iu1%K!Q z(*>R(U?yeaQd6P@5+y)d1WSYhON9c2lw5{CD1VipYa>ak1)Y$}Z2;1UYz0!*HUYN- z$>Cij(w0C8@^BB3Djoz<-XQ@G3wQ)bBU2^tV?eqH$>2#rKLsQ^=YeGRl8}E@z#9VI z0&;slCCI=X0q+a=2uKY+0g|B?K)MKtzX4Lc_kvDH`e%U?Qu2#{Uj?0z?0yI8aPbF5 z6?K7BMhYauGC?;Gcx@ryNZ=+w8Ok*T;(w6^{UIRPvjQi3O$Gh0kfxq1KxLW<1qmr> zBXB|;rh1Pp=dHb)oJO~|kV{DJh6Wvim-yxODmxx*dxCA#9qXh%wfYj{*!4RRCsfN2G6bkBJA?*>5;Kh;JXB@ z0MbQBZS58~A+@(3NcE~D*yAX1M##7Tq)uJ~QpM{)L*OGIU4Mnt$)`d-Atj#+_)@^v zB;xva#Hyv9eijP+PtX8%r0|9u*CVg~gw%u#I%U-q@@wiMq0dY$Z_EXQ85k97C}jU9 zNJTA$@_&b9w~0{hFHp_-Wi1pSqzcV})E^r`*G8JC*3jiZ7oogDDDNt8cL6&9=^~`0 z7ycl--h%GUZ}z-E;qE77{2h`5-2_7c0(KWL5J;ic3rG_)07w%Z2c(OT9EcZqyjlgNji+DP?ALMI1C3HfSG;;)c;It~S?>;$0# zVO{WIf&ULt{l8`CFYVAsl)zEyd8y#=zakdmzY093AzC6-&_f3c40@|L%}ThVIdZ zTaUW=e~R4k>3`NR^{hS|rx9r&bbye!xxfi&>a2lOzL}smQ)?1hNClb;TpLNZ5%m8b zqg2_|q<+51uVl)JF1rn4l99&k?vblAa5l933H) z%M;3JBRNj7$F2W-p#ULej0I8;3V~#BB9NkY7LYD&Bx$aoYa=;8myvKc1h&FW_8oB3 z1?1PCmcTXmzxZ94Yp4hJ=U;tC7S{iNU4XBtoliXo77YFsnj$Yj$p3FqX#YR2@Shs~ z56gA>I}d5@69q%sNYkB+n?@py^8fiRJevmNpYOtm1qzzI0`3FSwGTH1%R$_fe+V~S zgrpxOg6j_y)&&W)lN_U5T!geUoyJZ2Ki`EhoHT;EG_3y((t!Q*UHG5x!vB01{^z?e zzkUAmT^L*9Ki`G_`7Zp=cVRj_i2nI5%nbv+4-4l{Z=9{@ZRhX42U8Ww|L42#Ki`G_ z`7TT^8UK72rVrWlMphq4Bhr925dn$+^IiC#@50)jeJM8nh12s#Tll~JF5H)*_kaJp zaCyYxfVS+MKyiSC5wQ_Y;=YXkCquT<3Bnu^tKSyFCkV-HA+REL7YSvb4OxqJ5Q;?X zweAqYz8JF4$wsk=b?*T|_SKLr=>efc#6BTm2ZX?$5EhBp`8^>dd^2RflTa#Ry9GgL z@ZFGI7X)Fci2XuB)ptW?`Nsh9a_05NP$uVxArtZ`K)jME{S?aB{WN5xp993JnBdQ$ z%oVV$U~3rhm(V$dVnZhOOMrMCv*}AH>naAV_ccJgfl+-8Wgihe47!Oi{uav4lYnM@ z3lNtx`$7G6K%0LL5N~CMeh+0o5xoeyow526%9iPZ7W@bh?_|z_hDkwPeg=pun9)B& zS(zT_ebCA|PU28@2k4wR;sEj9Ik!O*YKRTlPGa!=>`XC)1~LfmNjS**NFY>^uv`M+ zF#DQ>965v#9SBF+QXL3(`VgeL5RS3Ix)83Au$6=ptXK-6uqK39DTGt(CK6l?Ak@=? zaE4XsL3l*MVG_=<#x)?!GZfcivulXEiGO4Fli*(qC7R1n;vzd#2H_J47fHCxTFD`l z)rL?Yhj5iWM?#np1Q&e>*V)nf5M;&>?vqf>I@N@*gM>LXA>3kblaNpcLMH3zQlaNyvLP#wL582XM5bWwfkk*Fqm<_HC;R*>`NqEYN zjUW`(hY)K7;W@jB1XoiC^^76BWL3rx9+7aEgx9Qb9SHLpK**{C;VrwL1b;IK%}vAs zf$wQk5H8)yx$?Pz>z|ZfIb_02sj>LQawm)522Qfv(d+rd*ZOluXJ@DH*b+C(n{m9* z>dVfL>J_`!Ha}{!X+vpN$LA+njx!#^J~tCLU@yY1_#r@}Y4ie_nhi^YMjsbNWWS)1ik;!X4OB?kp{%-rV5iL58 zx&5ZP*uMEL>5f)gD$K{-5kF|1--rEf?lP(Rh>77+>)XS8mYwRav)Vtvcf)ly(gMD9 zGKF3GF;~r{`*2oZ%RBYIeA&_BxzCh)ciY7^+A3)yR~|8SdR6qHr}?zBg*%!}tZv|Y zb>E!Zy;eUiDjr{cbL8lNhig(DqL#6P*0Y9|;s)yJ^*6U(R=T#^>XRjwyJ8ylt$W4$ zRE7NA`<|ml<=g4hAM@?XtY-t39ecU<e15hEQCaLa8LBwwTp#1mzJa z$&H{Gi`iYI%(I4KVS(8-VG}JdyZ+4}oFbtfYi0@I6A2?NA(*nqNGNL#!M-sBGd8y| zgfJTj)g&}zTQq?nvxP9V2?PuFDhWGC@U()^n4M?^A;Av9a}umrx26ypw18036oNJT zn1m`40<9r5XN#;MD>OuJ#ZrNod2$Z6Q1&A=ws!6T6dyc@7XP>>#vb6YU`Qw}Ehq1Q*t<1%yu|jBEix z!5$-_%n^cpO9*akZc7MZP7ta|@L*fCf*@-PVQMP~p6pc;c97uN8iE%)u{DH*b`YME z;KRDvLulX(p~N0SNA@uZRU`yDKQOYzG1Vq%k^&hpMNSNma!QKTzZ#LHj zg1MJbfYLvJ-tFgmr=NoP-gq zTSo{oe+VTVA&g`nldyw?KtBj-w#W}cLRSdiNf^y`?F6AgHwf!GK^V(^CZURi$j%T7 z*j1e&;ho|8{P$iU3UnTBur%G{t&K^kn9g(GP{$6!axWXT_H?m6T3oi?E&Ew z3Da4#ZV(=kFtQtjnd~tV=JkYNj|dYpY%Ya>e-MOf66UZixkXljgc4TX8^R6}l6yl~#O@>^p$`O$J`hUT#6A!j zgg`h&!cx{O1VR-FBSRo8XOEGP(-(q$UkEGN+`bU(LLpR>u!?OF3gHR~Q$r!FVXu-< z7zV*J48l5gVi*M1a0t&y*uc7lLwH0&NjQW}>|+wSlMuZwh6b?cksFrww6 zNyV1I(^ig^T6BLUo@+jF$MK!A9?fp`w^}i^D%P;I%ay8*J?>uVGWue@REM7Hf)m+` z(c(09a>e3fvxYq%d(G}*Oktmgc8kKce=*pxe{+j*J_ak;*ZG}#-iT~b-(+#!)1vW* zR;in>{w?`ar#Fil+pL`YRByqgu3C@sGunMz@L}q<&SCS^?jxM<>Q@Htcj`4y;gNmX zZhUNC=h?G+j@wq&t!`vJOS7*_Q-ia+^lLdfp(3^KfS|Y$!Ok;E+Fp0KyS+L_98`l% z&cuG3lY|L5j1B@E;1{ zJqhnwpEL-cNLZc*;UoK+gtBx9Awwa2W=n@c2+M#VO^5K64Niw3%S0e;Nf&p=u~D1> zVMiuP#AcwxPx^IK#B7$>P(A$Q!lmm^$AA2~>p+42?%^(W&-Tps(*1eh)zPO*My@Zk z`Ba(Je_Hoi?Y6v{YxVkZrA~6r?h1Op68G7Df{Rf5VhuJy{Pqt26%8Yi)e=yT}r(l;mNJ{88!G%lrjAsjp z-*mUE2bVsLJ7`zG$-C(@_k~SO9@=}}&t?sBw_iFUTVVe9=P2E|yFwOckA3j@Ve=tH zc~6+8x9--TJLr^bCR>?}bME5@N%txg5oecd%v$x{ethpX7OT5;o}3>N;CW#dtT!b4}*neuy=Paf;4oqDyH*S_CXGryk4uT+`!aM}Da#ed}EfZR~s zb~hi)ztDLgn>-BeO;Om}zNzQ4Ey1>hT~7Ax0nBn|^YJbxO`9!A7&~>`y|gpEbxpcn zIbd<6begBm+?)X&x7|-xmNa^>$XPb)%_Ji`E%$0@yJvT3K)r77YD^wg`|jvj&cj+v z+E98tJ91gM$HG2omMccHfY8 zYmo!@Sa!yix%cjURC*oW=jZl#=+;jT>D!Z%Dt7*ub+NQZ?ZV-vRim>F%}2+)7+Lh> zULDU%Z0$bz(}%QklNLthk8W3@<(^#Iy*_EX2T0rJg;Z2MANalU!J)->NA!De!YR}u z>2y@oxEWTCX*&*X-5y|;U$@PqvQP0kpB#&fwwk+JtSh{Jb?~>wa}Kem$i1f(3nxSw zo1aiWjL2M6nyTD+Zi;w9^vt}&SMH73ru)qC?J{;(nW0Cgah@T^>kgmh-Tl#d_vWko zE6<134NiW%s-2d5HMQM)QLiYVWAL&7!_X6#Y+XI-cK;H3(7g5KiS9`@W6Wnqx@Ry0 z=3Ll()vVx}@^;NbKcBt4eYpSRjvFT3>9nxSZ&bmsFYL%%xR+W{cGY{f+xY$q27YYf z*?d>;iIYEEQ`g^m=wn69SM&LUdaZDt>+65&NWbB?=IRARH|=t6>7M%swtFs|UwJp> zsjh;6lXUa>f zNwa#6xX^EDYwyda@9*4yBuQD>+28;4Ps1hMDxXxoSZUzl({za5Vkg^Or#o3sUu3Oi zw>I}fq!8%RU2fU7DwkJuh_xem7S$l}F?9rwbe(TLX+oor4EQs=L z{cUagg{Rx*j|*Nk|9GQQ1wQ$zx2Cn9ZGjEVNYL+;X)fJ*vrN_DtwWpM7`5l*tpRtF zEGzo=Qn@}4TXo^ajyUz|59_1tyO~T1SQh^>uluLth2NLfoUyoQLf`Po&gF?Gx(0e( z&@ybSZTR8CGp~Lc)IGaL$Hup|`TlD~W_4eeuaeF_J$vD<`vH4W>p2~7pL~xzyi=fS{CLN{wzo1`=`|v|YT^C3j<#X{13fa^eQ{WJuXd-FZbD*s=eDkH>>9INCVeFuknq+39)P#t|V~Ro6O1L`F^Sv(VCZ;RK(fc^@ZV zeQVlk?Yr`$3tFBTxVF_~o6pts*L0d8uB&aha`K2E&pz)H+%KzJkE;l9|L9%uQfFhE zJG1-w^%+*X&f5IW z-8THi%uUbk)IG6BvZ&vr<_+f;4Sw84z4FDY=LKiJ&FC_ItB#?6+K{LF6s?MPt-KoU zakKZ&gR0=Q1}W$4_P(T_pw~EDU)!$p885G^9|ySHR$CRlpS>fd-eO7j`^G*wmkI`m zb>79h|8&};zi#ym(|2Qc6xDSKun3+z&3=tyb!tGZxfSz0?5p|T_U1orm}(nV51;X2 zT-y(x`QuFYHooZlv472Zi+$xie>Zr1+*wcWK|@E6jR7q^JuOam8Fb@&T9i`#)hyAV zX%oY;b$w4M#LjuQwLEU1Z8)G$%nAJqO)qa;ZRp-J{ZqPLu zecUo+sC@CDy%!yK#u$z3l-l0D=El6l14Bac4sK5zG%~&Y%USk&#@)YaDQk4xr0J2_ z5f3*!>~liPu(_6D-GnipO)Vb`kw)AKG-n6J8}(?~{)^l$<`eDURPBwRGe_$Dr)$~M{T|K3|L=jmNjpYs_8z? zuC6E_*hnJ$Wi`?w-9~-pUJHNxH2(hE4NpAfgAcA)Yb{z?XTP2EnD-Ng%xSB)EbH=* z%77_pHqV2nM!h*<|7=wg%dOpHv&FZvt;RjGl*0y&#^5a|ja%cs zyxCiO|DBnW_guPre&gWmyn(BR+*H5Xx8-q{djTst^k|_we3`t9pZ%(rn>=%>4xi}w zYVYfeJC|nI&x8>%eiteqXsJCCjk{dhxaINHK?ChJ4%$ENlbhl&>mV!sDZc;x(G-vO zts4KF)v7pTs?7KCnJcRsegE?FH;Ko1&#FSB>)m!vnp-}|9`@*m*k#^GG}bn}hiMCzed4_K$oOsqa<4vuMxFvp{Z>Oqj_qthNHgrQuPd)!P z$JUt7N^$#mWld?fi0L=iWG{>Lh$*dTxv}}RAB(Te-S1-4Q7{bPejk{SE?r+m^oBb# ze1boBjB(jex5RQoU0KZJpt*jDw>M^GJe%07#i-3aheTiT z?=aWMagMQ@$;}CyDh)10pEn8ZVqTo()8DagtIJLF7MQ-?Rm|Jvew5!@+wR3T?n&SG z-KNz>C)DL_xt)Lw`tg<_3-6-b?!_1dh}X(E3DzYb?Wb@-rg?gZSj6~ zr-`fC1s1)ZHLQ7!Gn~&EreAQ@T)JU?qtxoPrxUME9IXGSW~=U{Wj3Q*HH^AH_}&Vp z@`UlspdZc0d@57bI=F06f1h3p)R!Yp2EKQC;2oaqFuuS@Eq%)w=70I1xwhf?h6i6y ztd8&XvX_;G;kaS$#}-!A*!cTCuj~)wY#Y8gu2&i{IQ3!+zdAX7abZ1|_&*CedTy}6 zGoyjkKVuJn@jGkI+12G7*8C9ahNP_|`kG`S(T- zhw5yq{`#T&^=!|QVZ~ow@6u`FK23kG&E$LO%etiP4c%{&7?#3z;S5VS!?xNE$EaNN z%DnR5g|0OpwBq%*OBZUauo-`NL!LVNbd)vL~r@ZInJJfjH zkEzc>@4j6o4lgZVJC7d;8O4O1w&4Z6dob58g?zm$@qXt1-zV7&Y+wGojhi+78DsMxxoRn>>oI&V2Cf;Mu&^hbrcN@7m7y z%b85|$-@h;u6*;ZyRF55(|dPW8J+mRHea4GIJ#`>ZttSE*DCen;`5C;!y*|OZuKvQ z)%sU!d-b-Ai5zj((L73r^fA6?Og4Ja8ak2kOyJg1w2Np~n47brX z+$D1Vuv_cOwstDHdc$!<>$vhuBR0HiS^VMq^_+xSm75Dbc{YkYeK=A7i##W|!^Yco zxxr2Ke4UH!?$2S5H4?Kj*Q0c))Oz#@lb+dH?$3 zoe`BC;x;_;NShfVecW#Pz|*tOCEHGvos2K~@|}5CqlUay)aj*d=hH7GX^vJ-+J>hO zyXa8!x1}W&gY)K9G2;Wr^lSL^VToQFlde1GCpNm+cF!WC7Aw3bJC1pmxX>a+9pc-5 z^sMn_dl)Cz*zU{p#x}X5Ww@=j;ltYwG-iEOJ$k>|t~9h2_S6MIm4PR@W?R@e< zrxqXlEROdr%<{5rbnj`Z&-x?9Kcbsj)QtM5Q~T>_H@}bD`)b*xAKv9JJpXm)nyU8= zoXp&+5jXC@wvZtSBL+^Gb7fLn>%k#6m~Ky?33a3KAxJ}QPy?O;q4dB6>XHMd`0@#I?S2Uf1z^k z$f;9jMXBe6DVRPtS{@o?wO7{hQ+ce-=1hf)dmZ1nukCAV8FtY&?6;uh+PFH*o`@aU zgCi1qwRy19=J1BE;|eYq1bQ!;v@G&+_@ZyeTw@fUj!NGSZ5z9*@7w;TnkPFgulnu# ztl=lz>uA|kx7Rk@pM4b^qHi!Xcb87jm0efym1GI*EI+d7Vx`*t@O`muNC=^w7$^j>soUE{|WJEqpU zGRO4i0{4e6X19{Hp7B%5VfwdEG?(tm!F#uVE>-WjyYzdP$#Vwmd|Ep8N6oSW5%0$3 z`OcnN|3k{j@QF1qL|Qpa-y(jN^e%I{{)Mcrnay>2oi&H3of98G&(b40BLJ!`D9%ahr@j#2en zv29(|inwgC*EJ{0R{xK&KY^#>4gddf=a90ri0nzClCo3U>|}3~v`9h`vQ#Q^NFrs6 zOd*t|P-!8R7A5VgXtPw>ONBP2@_Stz@87?wtYk*04#RF8ZHv_X7g4T!<>$XnYObE$@a{PF9W>KEVbb-G zTToi^$8~_z{`Tfp8TXs5zti)Ebks~wG%5b*7p^zP$bB}?&d<6sU2NYUx62Q5*NA83 z4JP2++X(+2GdtG`)Z=^=V)LO5c=agW#FZ+l__;DNs})Rs(cx?%%JJQ;_RaX z&$NnIIaTaB(q4A=!`eIdqz_lDFFl+T(5a?da$-nm)zLRht5>)$U3l?C_i2cO< ztgD5&o>sE=Ls5``K2w8Sc z>TPi97=^0?zocpHJY~FeZ)o8C9kRC5qKenm4~Wgk(%aJWTLXPHVaXP5bbaCRX7BmO zllOhuylT|J3;WH)zkMrI&WTwvCfIv|;@eNg;swqtm1A_@emar4eZsvfS?13I+uME0 zFNgH|sOdY5+P_cOiY@HY;Xdi8ncd3`&ezM1%{=V$YV+#575kpOQmvkGbbtTH3r#dN z&hB;-n|`$MRn@Bw#|72P z`|%3fLsDyV_K)APQ%iQ(Jg<*BNkYLtj|C6PkvSOK&wcvCdsjgWNTXA9Y|JmF`H%MJL0MR%p2Qy2GROc=$Cu{s|j1SZr6?t zI$FG+Zg$*L8_xZDKI_<;;jJG&)rao){}6Yw&ZZ_NFG~2%$@z00ZZ$bqlT*|-I!7dc zH|L1%)E{5hJstl;*MYA~{ZBxsUFOfSTetejY|k04ETcVDb!)PK#sra=v_hAnfu%u(XS7eO5b`oz z9ou=TMtO2W)`i~*T|=L=UQkVa`>OpyVVoLE*pVG@h1OGtck21maz+WQ+LJtN&5M0< zO^ZIpT-ql6OieGO=%&qlUjCTvIra6&ErvMmy)J6sw4zPXd6>rD`w5=MUACM#$`W>B z3l}Rd+mU{A{O2oLrMkc7uPbr7U3b|s$@A|IG6~DOVPmR;75?pWUbR7E?D>vb_ zanbRtAF2iGk30yT7Pza!>OWnSe^f|F;T zcQaYJrfcNaoEKBSH7v2S_%UJ;6L3G{lY8`PDSz9$OG`UC^XS==|8=%mY+X^U_d^~Z zQ3{jIYqT9%BQkMEv-p0Scf(zI4~(6EX9r#{9TWR=*HqgXW798qg}H9`pQNNxd27kL zcMGTe*t7lMl{EHk^Vw|S@1I+5rTrR}0h&Wcp8mD? z;^Te^M%PL$#u+N5-amEenf7+yb9IcBkWi(0T^28w6*2vISl>%%NZZenh0N7OHu>Xj zWQ{S%TK~RTFypPE>E5aVaS5qD%8?&uZml;n*EztwxmCunMmBuf;uWRc6Lf}rk&O#D z`Z0v1JD07y#lofCVczzX#ch>>WBho@-Tl&Qiq(f!appKbO}-=WYufZLJ51y={2%Vu zs9)j!cAvtkc-1+1qz{Mp{}yH6$#iB5AKp`&=XgEnaiRLr(x|*3yzB7s=uR6~ zBfER!>XsB0l&$#ev}=8Cd+H$b&}yfN&!gX+eB1 z`*2=!tGlFL(W&LmA^IaVMy+d6n6g39d#cfF?(qZ>v(hU96%AKwz4u!R`kKnNq>8U- z61$Nx`uA|>QQb#3vUK}?mW^sz$l>I#PrQn!MOU&l840(tt~0p<+s2QW*20Ored)cj z=dOMAACHP(Ov!aWT3V~koqd7pQ~J45@~eu@*zD%RyYDNPvxMif1I`XT`#UcAuj191 z#G=(k4Z@9GgY@o?JE4EK`^%ZHg|Aa%cDNlq>3ez4`tEtWx?2Wc{5jt@cF*DEKLSGil&+BGf{-La4WnW@0b^G1An>SfC zv5+0`Y8QdTw7b%xVtU#qT>4EHYs<8&OwqELmpSCBqigRqRYcj^NrWl6wjt#fcA)33KMHi5UK*x@r4@ zW~Y8K{g&1FMn>0s9C&x-nd2t&)&0V`dsN@g{~SBOE{1;Rwr@hQge^Q|vy4X8jdwqk z?n;-$o>LAv6RcSmd`@JWr|vNGn_D&S1x=rG(K6w(o3%|Vv#7edsrJK88M~{)OIAI+ zIeS6{Px}N**qtprd6e~5>+%V_i{X>+-aqwm`gPgOyEZ+&wt1cHqYb%}-Rn*6tQKCg z@!bj843)8lV}E6@-zsz^y*6d`IJ3Gz_Q?UPNoLQl8U9xjL8CkU+84h*An~dAdjc;~ zrB=@6d&K;)hZ6OR#H8)Les%v5ZYw+T-gUb~bw9Pn*Upi=%;4`^7F&iN5{mi~Wvx`o z3fO}kaA&dgPjS~d$4`DZ=ilt}(qzA!_n-}xE$2m>;yarny`r5puIX+_Y8bU-!l=th znPIE+>w+D4%U`^|?Vq*GE2vE32upYwTe!~of0;YT3yRh9UXuqf5qCKP1 zT9!s|4oLBJ>6Y&D9^KyYM?h#**8@3G!<yhTk6kEXFBoR~Fe*`O&?>zzBFX}Wi!|5onaLNX8;&d30k8X=bH$;v-Rj;m zy~u?DlItIC_22*Iw)B~FwHo=Cll<#>A0?chPx$g?Q^to&#Z_zW9zLHC^DV#q+GEQP zulEcNGTqFI*oQ5A@3VT#Ku&~Rc>0X=s4E^r?)|VfQan)NV;MY5e_5gPtwF+ejZdC< zKlW_@^PaosgP~H|{b#Blt=D=bPFLMCsNeY>UA+HJRpHAP)~NBfFW+AM{^i8ZYOyEA z=5^aMCwhz!9{Xs_v($cb8t(haUD4k4$jn@c*&COnp|VAJ_Mw)CGqX~z&s@|#JAYX3 zNvZeEs+DYAZH26-Uq`6(EVGWMeHxk2buiXaUw#^I@VsL)Hg(()kyc6WI%c>(z<=e0 zl)||iS4RoS_cN*7*X8@+&)XBX97n{g=!saM=XSgwTiA5t_DfORCG$s|wRBzf_T`&Z z#<{LTzgDSz-e2LRaQRX0`4vTGCTB(MCQ91+hwf_i6wj}?YqiBff9Cv#e0g4~QtxE2 zSJb{=+gHyS zl2f&PiOR~0PU>ev*4&*}`ZQC5A8;hn0Jd)Wr;#r>rmMc+*2r7S(|sKnUG`yUmaLoT zOkP@;(ec@f&YkKnyisVCjJ5XP)yKRAD$g*ft2>T&JDy&lE-&m9v!nNlrstR6{`-Yh z>_b3kT}7wbnA7u2wy&P7z5R}izUIm)&sIi#e|6HnYF=$h+u2y3>iMT}jG%rSKvrZ4x=o|m1sDdfxWxh?exYh=nI zryC}J5Ffg=?AWs>SLbe5s0i8})qQ)`bq(8)?1-I~y3A>b@Z+UB&h9>Zmqt*W^FZWt(H=)HT0X z#lM@LwI_jFzTvhAOE{Ptlt_i+IMHHeEj2!4-Ev2I8_y< z-!B`cPKo%)lWjl$ApVwg)jyPd7_X6F;@-9ZNWbEqvkdqa-!q@CVBylRlRn zl2R0mNEf(xN%G=#XBYWBdX+hrchdLC-*@pnRJ}P~>;9pe`;J67cjagfzm~Q*evNL$ zWtQ%0(&djo0z$`YMy5TiJkxPt_W-j8d)?BmtCoJvY8)^y;QGXzbED_B8BH(@OdjE| zGqiKj_d>0q79GQtW6yrjYt}h0H0O~TJrwW1rtAA1U6=%f-dyv(lppy_GFZzvR(s!v!%^eRNJ_t#!tvto$(Yk?!X6>47>eOsYlEn3(xW2u4F`)7|@ zS;A}CHL>Pm%#w9)?p~kav##aX=2c-sMdq3v_dWdO$qCz9a^P z?n6?$HFGWh)gt@dk<%mUJdOXnRqxg1^?W-dlr8MF+~|Q`MbTT~l=8m%dKxUSJ-DbJJl(b!LE;-xp`!mo^yBJZue-=^#N@E3Rbi^S`L zudO^6cF><287eJSoukdFiS=yZ>z96K$avIvoE|Z-rG9bbdimY2mOqT1b+Xy_fX5ue zJ+~{qT=0E8QRezNZ>#G&ftG zZ|X_@AavTl$#mvL@11#Ziw(!WS4!r#iE%)AP&mPl#d~;j*?uQR1 zm;9|1UjFM`P|DD537aF%t7`9zkxt$wL)4kqj~*EB zEIz&e$+_qWdIPpR>t6eAM?Cujq!H|ZRe5LjewO;SWBik$Kjas^)Hb?x-a~P+dTQyk zKeN9i7|c<5`6V~)bM39>pJBJ_FK7O8{TcW6DtBF}Tor-RB4F zmP?VnK5n|)wn#tqc}tt-6}aq>czyeZ^X>;-h2pW6<^8^xwDVRUe5-p?ZtINDl+ba3 zQ))k)D0;uh+G$ANM``IJuaWGC*VWxg6Zq9Cm-KXYweo||IY(<{uC4z#)p6Of*Ft;z zwj`GphMUSXy`DdEs(avaw>#suTG@ouM+bQ*iLE`M7%5KUP2Uh71>L^!M?ffY&^Vhp zUyn43q+8E?vUaa{+t8ir;T8RcKRi8s^j4>pvnIIhxUZnAKFQ+q-bW%Af^}B5J{f%Z z4JUBVQQ!7QonFo?;Z5v-W6b;c=^O7!ji}eXx$VIADRcYXshjO`bBn^IlaH4=@ua=W zL(6CDJ1FVY&dnU~y1e9jLuYcT&drQZ2OP#!ot4Ok{ZDc0LpB7-8F- zka_P#lhQkA^2PGUq1tKlo$xQV&->)ugEBO1bC1P3(Bp zdvx%6Zx(N63wxFEBtn&H}Y5Q+kSz6_t|LKHD0Ru++yk?;=p@s zul((Fi_e9P>z7H?x5-L={fz%?$SMl2wcp|#Iq13GHkR-fwy@qf z+-59}lV&gYGEMLCi~Hs~_vgMn&bcENey^A4KVr*A zi>g8Ijbfrd<#7x0rVqOLK66@Y`=+FvH3Qc-cpaY_Fo=DtCXTJElW_ik-?|Oqd4;^P zF~bV|lt%wpx_@b7OoxkmMZ>IJwYx5FoEgya?(0ci&x`$o4t!1t9U-D)JRp3B#Dx>X z?u2AEu>#)87XERz>9C6HdD$&SgB%SnESfq#N#Hi# z?c&q18WT6R9OqfOzFca(I9*)t@rKyLpV=Rck7o-fhlQo;zO}12_4+nG?!f04>q~yP zWc+k6l2pkb`lRU7mxUwbGUh!WH?h2Zo#k@*;}hJU>Bt|sv~%p)w}&r9eheAF3V0h^ zmsc^hHRWuB!o|<-OD+Gp-!DA$B0n+tNB@cAZK8Y!1awX`J9cHwu%dyjGWs!dyd_5# z*PpJi>i<&YY~yb3JN+*uxh&!BY~i3~@)P@s?D^9r_VtuQTYl=F^?Jg0tozLuIAWOi z=%wGfi@O9{28Ji_#!M(~-eb$jsvaLGeXY38RU>b9)V-Dz<%2BY1h%lt%Y%-|?{}1^ z#;-VV;%33q&?H-Jqu<3XCloacKV17T#qU7ZO~LHAN;H=S*hlCjO7l|JqIy8@B&)LHw_Rw&FvB4VRSUTe_)g)MD(FLdS#f4Q!oPr7}d|4m^F-wC*IPOyE{*^5!?L36&C%=$C)@73kS znpt~~UdrqLYhFu}txihgqpOb-7kim;{0<$TwA0l;wExjX*OH9Ib}V!o#tL``TerWY zj&erF%Hu=d#*~*8Mky z68cN}>%Y4yb+2ndP{D)6(eGU*&)hv_@!d_aGhf$+jngbrc|2~V!;H{TpF;8dh+-i> zspVhavI5@8*0s${;wEiR6Bg%{S1XFydR-~|{Oo#|%>bLx(>#>Ty(R~8v;tHwZLqsv zf5YU$anJ2n7giQoUzxbRQ8^+F7w}76Si&K<2F8;@#&BF zZ~Ji3`T4f%93VLFLi+3%QgDpJwvvoyxQPZff83o0`Cxve7WLm1scN&rWAnmT0y~cvQ?X|yb4&_gl zzt`T;&=|eomBze|7)SS@o9>ebboIBWPGRY0{*TZ920Hj28Bt%YI`&phas9oc))z0h zKXBXIX|cxKYR2WegM*GdnW?wr!NTSiskc^*zg>?dCYiV{f0JV(HDJS`4PD0UiAokb zV41ZC&nKjv3LP0bC8B0S&cZoccFuJB<+tF8Z(J>Jm(f+ueg4?_mpD2u)mI{`6UXUEN@bvPGd$en)Q2&c1KAWK#PQ zW|_Hs;Z-T~nNzlo6UYe5kQ!xZ{G%x#=(TLRt95Yruk)|eCYnGO_n&)bK-p~JV|n5y z&#nwH_12a=F3POF-g@@L>6ix9`_7*?e~;4^QA-xNd#Svi_Mz1KZ^eC2T(Gie3=S4) z^y_Zl^-u;@$!wa8M1P$VZZew7XMk4e5<`XktLkV7QPnjz3#!0Mx!@l1>;p6 z*Bm+j*eCXZn%tWF(#54q=1Xam8I_%QI+OFTqoGJQg)_*rx@ubOk;xI~GSi1Yzx?1KXg<9j}(|A_hUlw=rR-c&}(LD0asgEHx zBMbFkY>J(=ZOrL9^+m%Tg|#H^vND~JmN85&Oz7-9v3B=Z_tH0)*v_yC8vSP#c6C5JC7lk}F$^4#Q@<4Yt&vHavoYyXo z^0!Ohw^_eEeun+A`+Tf&sRi3#`bo_HIS8)1qFLSQv zS;LEGs7C(nz2?iGq<2}xw70NoqTrt{KL0D#UDQ4#+{o9mX^W}o z@t>RS3TD(-@Vxa$|B9GA{5@u&)%^9g%O7vkdR}P1z#?J8viehRzgNDl$qoJWSz3Me zrW1z;-w&2iPwH;5bO}CkbDPKpmT(a}U^&kns!M~Pf3}+SEX!}J(BRk4xKY7L=+ z9jC(==j|-w;3Jvz`QP5QD`5*Oa?&{Cry5LCZOgnm?}O>%q(5Tuj`9)Uubqox9rOq*AO6?IC@@4 z%zgGaafmJa(eAZ+(LAfBz)iZ}td1Vtt1_?KLQX0+x8QlH=PJ*{9IZnNr(UhTvP$HA z$1CMk(~4PW?(74c!V@X&1qDYY@(ix&LwJ@NAUi<1+T$JCh* zk1@2mRXbo?Yr~J(=7Bz$a?SedBY)q18g@v$@mKw)5Gx10g~^9cFeMMSvUE$?y6?Xy zsH_X<fkbZ6Adi+Ude+1qqS*urLdV%8=T7jou5E?n$ls~SE_q<`AI#2LzqceNV_ z8d%jF)DH=0ivHYQ>0N$%-vHjc)mHC9rJO>I;+4-yrinUF&t^q@lr20xc8gkExZ+`s z{pTm&CjRpD|GXio>f=s7kFv_1)H{}6J?Z}8ORdEZnzCn9K=a_CQdg6L?cuR=LdPDNkBwo2x$ly9h& zkIqs&87*2Qetgxj=%ecogxa}WS?!}WsA2E8`~7Ih*J1jU5+oZtY-S-NUogE$Vr%JXXpJ?{2!kHnTj26WEYA>&uzU8^2@JZ`>AT zzvWuS7S2hyW+gXQ-9&BcQIX9*_LaIe&W!x_PUO<|CxJH~IyRmvyf|7W(r0 z3Uhc;XlIk)48uyb&o{ypY7ed`bJ`zf_A%(f%RS-`E~Mzi6ivz9!!=?FpJ40ep1f21 zqx{5+f>-%V&tHgt_59s|KW5*)|DC*q$Jn2|9)8MSGEr}};ia{Dwf>G5V>4P zps_`;HM)=|(K&BaoLXJ@xV90OcPD+_yLLm?l92;l4%)T*?BQ*R{%f8dvsvppOSqCP zd~WoBy!*`?mmK-l@K#xNO=RLE-QR13-c4>*;^a?A);RZmO@fZ+;vv7jZL4UTF>1e9 za_rQDr*@3IxS;=+lEuN<4_LZq*t*|*;>Nla@^-Z8&o~wNsOa^N_jz9)o=aNvK3e^^ zPtcyv@2b|mcw5Y!mi8%ZhOk3UTk!2fr`BCAPGhGT8*cTB_~FMAKFby^oO;4PZuYS^ zZ3|`}nRch3sXDAnY-`%#!*{HPtC|;>7`}Qx+1O)FON;k!-+rpRxmp~V@^Hh}=Br

LR<~3$R^4UadOhE#OGcqgxGwb5ik= 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

p-wYOh4Z0w1I7keeL z@t**p6`gKBuq7kGwIP?0eIh?$VOpR(g+F zco2DsR-d91rTBDr<>m)MqbqbkAMtNPYG$YR;!ka*_)xeFT}xHiozr{&yLna1@!rVs zjXhGHLR%kM^PSsCIth0f)Mp3NpGO|Jo>ru46WEM5FltEb#EXHTCT(keNHs$E`Cb>~qK31fDL^3J(^ zGJqc0`BsfZOI#@Uss>OOym?}agfDK6xd_LolqzOKS-J^NJP|YU_c;cdC+#C&-jg+U zla(TdUdJFLX8l*B_P1E3;%uH)lLknk`jht-q=nOXJ46ZW6UnVYC&2i(a`WEL-~RH& z-ZU{eX5}7*JZ>0hN!pm0(=%M{bo^7({~jiaKd}O zsZJs0`olXXE9dV9gysO&{RK!E2Kwbd%!;w^htqXQRYa!jm;AYZcFcQi?wvmm!5?;r z<~}9Lzws=J+4a-%QGaGXs&}-P8k8N@6pwUyRy# z9j;we-_V`SX|$VM`Odzz4_`YKx&@U2&1F@REzuM(ZDdPs!Bn4gi3Wn4RFc#ny`_0q zk}au+I+bKgWGUfEf-166lOT^CxMt_9!B-7@f*AElp1D0HXkRN8ea zKQxp@xK;73bS)y%f9H@Cs#VuZa~=u(2zM&LXd%9P03p$79kTMlv2S-p)j->~BY;pm z1!`rj{rj7JOgI}dy~nA*le5COxc-kUq#Oa^Gi(#m1rPds|$;DS8{uaj@8iN zdq?E-vKGAG;rlu>HwY?Gpa_l&hm$CR#^N+N9Huf|qtg?1erE0zP6{c4kV?`TlF`&y zOv~vqxr&^M^KA47zdt=X1V(n^Q7LGumkJJ|$hu)T-5bXwV)V%0WVyhWKJBW z5@WV4r>rz%Soy@QiIYjiq1JNq~ZGH z&92*W9=#XLr2-Y|x4I&$-C_rOUwGo;g3`N;i@c^GN3jb<%6Oro=Z=mAc6AqF8-jB@ zVg^my{FyYaC0(y5y9#C@A4o+_Qdsg}HjM!?S?vkx=QlGynq9YEO`~@Tm0VsUmkid8 zLGDYI_^xZGuQ(&F!oO>Ul%Vfc){%KWqJnAs=r|n5%5PFeEcF8*_Ae!l&q<<6*a_?nu>Fv+WP`1a)^<5^aky{OQRwd)?-w7dG`g>RdH zrz%gdB0$oxS-fi(%p;Y5TgD7&!TAtO8GWreCG{&g!zQ79o;2rw*;&jGUz*}!ZJ8l@ z0-#}-e{A}Lrk}>XtR(}Oxcpi_PZ^7gD&Kv@bI0OD`07`DA$`ho`pEXdjui|PJ5>eK z)9Kr*OTfSAAP#$?3O@$ptE$zFa7A=d~Rb^eAyz#suwadB*0*RbDYF+s#b!%pz4<8hL$VkTCNS*rd7!~C&& z-fIHu!B7c!W&)U0y(Ql^fyJgh4+S6=@0+pd?>z$su3mz78uWYDWJ_31pOdfQoffca z^w8&Wd-XuwlGiDRRk}4##_=n@d^>F8XNK}{E|)X=Eh^!8_4iURNu8OyRj( zDR?J?d4ACTk4K%XT~cf&d7|H9>(l1eyc5dG1*$=9_C)uxE9Sw0r^NyAkimS~1eW5i z-criX(;eF%3@Hu$S0=aK+&1xDIjxts#8fnWwjwb_eJ^`=%UuHxUj6DGypy%=*K^1r z#|NEWd`N|NtleqFiggbp4OZb5-;^}!aewqDId~5RenE>_P0M$W9=5`PhHy0SXLqgI zw=wn5(|D)AckQuXmcB8f&8~%bZ-V!OKcD$vT;81hZ{oc+-XG0YDzq1%42yG8`RGiR%+Vn7&8Xz$DZHYbDYbJ= zPM0{N-P**>wzuQTb@os-3KRM6Gc11Vk~8du5dO~}EQ8N_l~vn%=sKInwjNo>8b{$< zu;=!&0TDS$uEnYtQ2?|n4p*7tG%5~<&9OE0L#F6?#2yyCb=y8%+zIKxcYeYS@)|Q( z^VYx$pi4F;2RHH~hgc$Ca+uZRpX_J#`Of{!z{B^j=38&=XT2KpsnhYEe}=W++V(6P z-~l`D>9v(2G& z&$n4^$*6QFMyKKckGflJ*#%0nxyVt>cTHk3d|fSlct{$5zn1<1zG^RP&hu*P`-F7l z8*A(Pg=B82qn}xW$J}I%`2!L9CA@hfeH336rXSrRuw$&!XBZ~SaU{sHE%JsQOg1X=)Y2H>xVnH*&z)U?_hg{A__ScnkUw zs*+%`nhMImYR|4$isipkq1s4hn>E*x$0sdfhI`e+c}zpA0vhF21Th7z4O&uIh`^IH zB)h<79&Ic^Rhy4l!D8+TXoN~(zx@#vhcPvUoBm`i(*k-FxYV@~PM(4RYy*jaG23A) zfi7Bd%Xs`87MJYP0Ga?4=n=@(Elf5S<|L8;mu1n}hp?|+abb_>`A$qeAA+aTW| zWEAUSHlv)FoYS1I6q<}Ko6#kN;^Dwn5{jTUObb^aBqPi0iqjVZd~n%p1=&ggAGm9!&Yc?x*Ryq#)J*TJwbE6%rw=KTA#J*LJgn26S@+oze${prho-n=@DwRG2e5(0-_4 zuF+(LVYcKLGcy8POpZctBd&3kK>LFl{E%`TijwX0?MrL%ptVk4jOGro`yi2LW|v*nNgtlBiile;6{hVX)exmdzLBtbf$MoDb=X0ipzich$yW7 zEzTk`WYlm4duYGppE~t#C(A^;#>dpx zHy4C=c@Q!)Dxu2ExD!cwS|uduX~85djoM;;2(+eP^t+5+Zut;+8-qz&89f~Lq42Z? z6SPr9MeLdniO*gJ6D6rcQUH7zCdt(HstHwb3K~ys4<<}eN7SSOrxr7 zYVC}wWeOb1w>fyERvMY#KprC(OpxR;lz{_j22`{M6W-+^^czZ}@>$cs`7FM(47h!* zJ9&1$cZ3EMZfJoDVgiSfrv`d~>Eu;&z0#ApOh_wK-%6nk0^R6Jog4O@#qqGTKKcdJbW!q-N7UTJf@FW^oZ zZ@7oWH_>KJxd~9{1ChqSgDl}b56Cx{AspX#>GA!-aQyXT_x=i>5s<`9b&B`yn_P4`@-W_Kr%w7vszt!W(X9Y zH-vtaEMWp7iB%Vd>G>{HC_3sG#M{y};7p!8oIp5{7dtVJcQ2KD_P^}lzV3KNpq0Bn^)pn zvMs9VTSj@iAzAWy6PnUM9(VvEANbK_VA8NxSy)KA2wc0#i)uiS4@TM`!66fNy+kp( zaQ{a!mMJde75G!(iV>eKNP-q%Q;PYRxN(I(#HUC-gcON7e0uZoB#+{2ADOP;mFf*cLGbe>gMmrUVp27s=Eh^eVT%Dp_N6pgdLeKyQ?98^6@!j*8 zA;P~6WGYa&`7l&$`AaKsGeBI;qE1AG5!;O#D2fbXk>(P7-3E0>v>Ng315uoX9tfU& zAWpNxVt09f^3?~9l7iJ~Cx2wK7L?_5)cW_dOWaDk@o0{smT}zbOtCs`&hiqP;ELI4 zx52n#)10;63~F6s$5K-Q-qQl!GXmZ-%}{uk(g6XUsEmj!&SFQ4 zJHn0^iUpcYs11?l>h3HtCzqIM)Co-U~fE> zzLTZVHOjztjk2AG(swl)m2aCyk>;WB?GudAhyt25x>_2Y;BQS8n_ikQbs65S1NKJi zI-ptWIz{VR%_+6L*2v_Hv{sEOsS>K7WvJq$(RfFaQxSba3bm2^TQ#b?JR_+L1(`4oB+}XA|G-`and?y#sNV82H_=Z*M{!r)zz^Ye;*+Mc<}IjT@5vs~Ltr|oh9P{fUf)cQ+sLAn z)=v06xIGX^ABbnfWom{YoQvnoj$i$T#f|j!!65Q^1s$$alT}63<#Lt5s*$HQI_)N_ zzmLwPqb8Sso84wDL#l-A5W zR`UdYzgvnle`+qP8CFQKxrdELoKPZ+Z=_wGB$#@SQlv<=akmt0_@AFW!4ji=!yL5x zz6xcF@ofn}z?61xVl7*!CyPG86A*pg)Ob&vi11}MS^XMx&JvK7YQ87)Qiv z=)?Qs6*PZzGlbBh2$vM^x7iXP(-uNO%~|@NNOiV!q)J2JLu^Z`IE#taf==xO7AV>y zKfI46Hqa3AYyjoi_{ifv(I^gc(Te|}zG~H}JI;+z2`R85G)bn*U+q4=gZ@@d?LQ|NLNopa&a$2oXFcvC1!2oj2S#W)&zP?UfZ36-QY zC(mfI+vSZwaiLL#2q8=LZ6O)+dk2%rghDH2v$+6=s+13F6dZ<(RF zNT6f`2z}vH*g++Mge$_+0dPFeGGlF73wJHiY*+Z16RdTrALr2S_m03`-A`(!gx-|R zH@?GS;=J#;fgq_Q7|}G<+vw=KwRS}l2-+i^%Yk>`ToT3d$#j=hoZp4w0eJKdnN1fJ zktljmcbH(_H#%Nx)mW1Rz&ujHC(UQA8h9!(G+b&&asYAsxsxoMw^+eiHVHU#1?%t| zZKCMXRK1ajE~!96mou^1Y5dv-7GG)ghHf>+?^3HbdR!S5OTR7}JYe)8D2YW;9;FsDP!$}^7ah0Y?n|tJo`i=ElB0c$ z0nmNkG?zg2;a0+K5S+Zbc%ki*x=H!Gyyn9mj56RuuA1&MYOm6PvoAg_y} zSw4uP>0Uld0mSDG3&S4J08YgPw!3T;;o5S=GEq3BWx8+}jG-;L7P?&#+syMSiaTB? z(k8ka73bd*#`ABWAhdNYJLx|PQheE7Xt204iw5zDEvE`jw9k@Bx_n6Ayw~E96I(!j9~V z)c?*0HPyG|-$v;p^;E@(trRgQUgqkpKYoiz`u*oKf_a&v)HXWqV(k;!c`zliPkTv+kA+m=srYH7!$NVtEK%BEsb)T Wins=dPJ=$HdIH92z~3|I7yS=EjaLo; delta 38918 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 { + const { buttonValue, inputText, status } = context + const fruit = inputText || buttonValue + return { + image: ( +

+
+ {status === 'response' + ? `Nice choice.${fruit ? ` ${fruit.toUpperCase()}!!` : ''}` + : 'Welcome!'} +
+
+ ), + intents: [ + , + , + , + , + status === 'response' && Reset, + ], + } +}) + +export const GET = handle(app.hono) +export const POST = handle(app.hono) + +if (process.env.NODE_ENV === 'development') { + const server = Bun.serve(app) + console.log(`𝑭𝒂𝒓𝒄 ▶︎ http://localhost:${server.port}/dev`) +} diff --git a/examples/vercel/package.json b/examples/vercel/package.json new file mode 100644 index 00000000..53e7d968 --- /dev/null +++ b/examples/vercel/package.json @@ -0,0 +1,18 @@ +{ + "name": "example-vercel-edge", + "type": "module", + "scripts": { + "build": "farc vercel-build", + "start": "bun run --hot api/index.tsx", + "deploy": "vercel" + }, + "dependencies": { + "farc": "workspace:*", + "hono": "^4.0.1" + }, + "devDependencies": { + "tsx": "^4.7.1", + "typescript": "^5.3.3", + "vercel": "^32.4.1" + } +} diff --git a/examples/vercel/tsconfig.json b/examples/vercel/tsconfig.json new file mode 100644 index 00000000..8f786b5f --- /dev/null +++ b/examples/vercel/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "skipLibCheck": true, + + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "jsxImportSource": "farc/jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["**/*.ts", "**/*.tsx", "**/*.mtsx"] +} diff --git a/package.json b/package.json index c1e9972f..51b69ef6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "workspaces": ["create-farc", "examples/*", "src"], "scripts": { "dev": "bun run --hot ./examples/_dev/src/index.tsx", - "build": "bun run clean && bun run build:farc && bun run build:create-farc", + "build": "bun run clean && bun run build:farc && bun run build:create-farc && bun .scripts/postbuild.ts", "build:farc": "tsc --project ./tsconfig.build.json", "build:create-farc": "rimraf create-farc/_lib && tsc -p create-farc/tsconfig.build.json", "changeset": "changeset", @@ -22,10 +22,11 @@ "@types/bun": "latest", "@types/fs-extra": "^11.0.4", "@vitest/coverage-v8": "^1.2.2", + "fast-glob": "^3.3.2", "hono": "^4", "rimraf": "^5.0.5", "typed-htmx": "^0.2.1", - "typescript": "^5.0.0", + "typescript": "^5.3.3", "vitest": "^1.2.2" } } diff --git a/src/cli/commands/vercel-build.ts b/src/cli/commands/vercel-build.ts new file mode 100644 index 00000000..98a4f336 --- /dev/null +++ b/src/cli/commands/vercel-build.ts @@ -0,0 +1,52 @@ +import { extname, normalize, resolve } from 'node:path' +import glob from 'fast-glob' +import { ensureDirSync, writeJsonSync } from 'fs-extra/esm' + +export async function build() { + const files = await glob('./api/**/*.{js,jsx,ts,tsx}') + for (const file of files) { + const fileDir = normalize(file).replace(extname(file), '') + const dir = resolve( + process.cwd(), + `./.vercel/output/functions/${fileDir}.func`, + ) + ensureDirSync(dir) + writeJsonSync(`${dir}/package.json`, { type: 'module' }) + } + + ensureDirSync('./.vercel/output') + ensureDirSync('./.vercel/output/static') + writeJsonSync('./.vercel/output/config.json', { + version: 3, + routes: [ + { + handle: 'filesystem', + }, + { + src: '^/api(?:/(.*))$', + dest: '/api', + check: true, + }, + { + src: '^/api(/.*)?$', + status: 404, + }, + { + handle: 'error', + }, + { + status: 404, + src: '^(?!/api).*$', + dest: '/404.html', + }, + { + handle: 'miss', + }, + { + src: '^/api/(.+)(?:\\.(?:tsx))$', + dest: '/api/$1', + check: true, + }, + ], + }) +} diff --git a/src/cli/index.ts b/src/cli/index.ts new file mode 100644 index 00000000..4dfb0b8a --- /dev/null +++ b/src/cli/index.ts @@ -0,0 +1,14 @@ +#!/usr/bin/env node +import { cac } from 'cac' + +import { build as build_vercel } from './commands/vercel-build.js' +import { version } from './version.js' + +export const cli = cac('farc') + +cli.command('vercel-build').action(build_vercel) + +cli.help() +cli.version(version) + +cli.parse() diff --git a/src/cli/version.ts b/src/cli/version.ts new file mode 100644 index 00000000..6af1fbc4 --- /dev/null +++ b/src/cli/version.ts @@ -0,0 +1 @@ +export const version = '0.0.1' diff --git a/src/components/Button.tsx b/src/components/Button.tsx index cbb8fd6b..a1ce46c3 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,4 +1,4 @@ -import { type HtmlEscapedString } from 'hono/utils/html' +import type { HtmlEscapedString } from 'hono/utils/html' export type ButtonProps = { children: string diff --git a/src/dev/routes.tsx b/src/dev/routes.tsx new file mode 100644 index 00000000..7ad4acdb --- /dev/null +++ b/src/dev/routes.tsx @@ -0,0 +1,187 @@ +import { Message } from '@farcaster/core' +import { bytesToHex } from '@noble/curves/abstract/utils' +import type { Env, Schema } from 'hono' +import { inspectRoutes } from 'hono/dev' +import { jsxRenderer } from 'hono/jsx-renderer' +import { validator } from 'hono/validator' + +import type { FarcBase } from '../farc-base.js' +import { parsePath } from '../utils/parsePath.js' +import { Dev, Preview, Style } from './components.js' +import { + fetchFrameMessage, + getData, + getRoutes, + htmlToFrame, + htmlToState, +} from './utils.js' + +export function routes< + state, + env extends Env, + schema extends Schema, + basePath extends string, +>(app: FarcBase, path: string) { + app.hono + .use(`${parsePath(path)}/dev`, (c, next) => + jsxRenderer((props) => { + const { children } = props + const path = new URL(c.req.url).pathname.replace('/dev', '') + return ( + + + 𝑭𝒂𝒓𝒄 {path || '/'} +