From 57e3f41c03ddd9f4c84c8ab774dccfe0b016bda8 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 23 Sep 2024 13:02:36 +0700 Subject: [PATCH 01/12] fix(elysia): native static response not setting headers conflict with recent Bun version --- frameworks/TypeScript/elysia/bun.lockb | Bin 3513 -> 3513 bytes frameworks/TypeScript/elysia/package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb index 0020cf63f06be5b698becc47ddfdaa4336096013..00fd340f661d91ecfa703f0d3bc4b8e0ece98a57 100755 GIT binary patch delta 163 zcmV;U09^mM8@U^hE+B=IVN#l3DBnqH&WS2>t2r2D%~FG_y>0-rQJ=a2zW%XJN&x{6 zlK}xIv%mp`0zlgA0hz&dTkm)vHLl!~*Igoxbh*#SCMH6K7=0Y&xB##C2d0HEM3zqP zajIn`d7&S6_0=qwa9EpV<%08K6~42D1T_U3H2`pLb985NWpg4j@vGQDB1{4T00000 R006Vp3AOAXy7>zz#n-{Aa~BqIvx7>G;#p9;d~{~Y(!;7f26TaN&x{3 zlK}xIv%mp`0zi8Vor`N~o6^K#JN*J5nDLFj8oTMsO{Q>wuo6HLarpRoG)m`Sg(tOR z0B=8avj)fOu$pz_wTfNmNkay3S2eSR1T_U3G5~OIb985NWpg4j@vGQDB1{4SUNbH< RE;O^$3AOdE&{JtLwf)K diff --git a/frameworks/TypeScript/elysia/package.json b/frameworks/TypeScript/elysia/package.json index c23716506c8..bafbdcff3fa 100644 --- a/frameworks/TypeScript/elysia/package.json +++ b/frameworks/TypeScript/elysia/package.json @@ -12,7 +12,7 @@ "compile": "bun build --compile --minify --target bun --outfile server src/index.ts" }, "dependencies": { - "elysia": "^1.1.12", + "elysia": "^1.1.15", "postgres": "^3.4.4" } } From 33fe11bfccdc63569454123f6f764bcf19ec8848 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 23 Sep 2024 13:15:34 +0700 Subject: [PATCH 02/12] fix(elysia): remove lockfile --- frameworks/TypeScript/elysia/bun.lockb | Bin 3513 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 frameworks/TypeScript/elysia/bun.lockb diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb deleted file mode 100755 index 00fd340f661d91ecfa703f0d3bc4b8e0ece98a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 zcmd5;Yfuwc6yDHSG+GdgN>wz_D#fy!cZwKj1;z0(I0aj&6fne1TnxL*?uLgQ2Yi5Z zIy!AdZMBxh3R+=&j25j`NA1JMi0`U63XImVOcBXgDIGNQ-t1ls;~=U2;bb;v@9zD+ zd+s@BcfZ%eR1Tg~Wl^+>r1O+n4q5>Y+|F1QTPZtbYE!vugI0zAaSID9dLcY(?CrS&1s*SsM7ECA30 zJjA{X|9murF9P^@39kg$@c)Ug19%g_4*)oLz#8~!FjpvF&_g_G(7rreZD3P3k$09q$Qpjcix<_w z!~1qAK4W?I^5OKYh^_VORBYql+0KWb4{bHp+&FdAwen8nianbT)z*$=n`YH4GY*R= zeO%qOML*)hh?a?;K4?D4d+~brgFJP+VtznI%IFIV?IYUK8grbTGQnAY+}#kDskUEM zM|~jQd~;sjPigOH>$_SLrtkN!ta6_J$4L~d*2jj9^VOz((@X!#bd{eDx>)$z33YOveE%S2=hAO7xzXkISN&K03wZmJp&BFq zJhAn&Ej`Z``Xy$!^dkL5@(L5rSqO^e1+(2wAh|)zZHWSKu=YpSNfUpXvh-To-ac zE{H|n9LNcyD??mT+zL~g)|l>y2AeZ>$EE4HIjColE*U7xFc1a;d{U7jLdwQZmZ2fQ z&(N)zkoNKGekmiBgw&3oOik#tgienk9fkA|U{e!DLXBZ%Aaba*kYe(zqb4*M<^*@3 z7DJi}-qC^(bl|$E!cf$~vbb2Kflw3b?b5#g?B2h3y?HVxkK~AH1p>*@W_yajQM4^i zsdrq3U((1<6v srxp9aJe48 Date: Mon, 23 Sep 2024 13:16:24 +0700 Subject: [PATCH 03/12] fix(elysia): update lockfile --- frameworks/TypeScript/elysia/bun.lockb | Bin 0 -> 3513 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 frameworks/TypeScript/elysia/bun.lockb diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..a67fe38cd10e666a6dc1149ce0e180e91130c3dc GIT binary patch literal 3513 zcmd5;eM}Q)7{6kj+9_3o-=YO41m&*ZT~iC2Mct+b<8YJ7$}II-4@>X3yB5$n(224* z%{E0h9dmVpMhQyhoO8P9+#))iY&sQ#Ky*$`5FvgHgOt5*?_Ml1NT>hsG}q_eyZ85d zpZ9s5yZcRuQhGR6nL)Xgq}!{=@VI5*z+JR`iGy;HxPxZ1Y&`B&$-*!Us~A)`ci!>o zRg>myI_?;BzE4Se#qtRQE**)H+v~sbPHu}E1SSFNFSsXsfp~o}nt+k6JdUzq7(;Ws zlO;Jc_JNszte^<^QNY`2dI?2hSPmEu0b}4W8SqJ8Uu&&Ps40xrwCuSwHF`E0%j>sZ zQ?Fl`GdQWJ{Pgkd5gX3!_**V;7iwM*eii`e z03KprfPWzx!si3LMZ_xrHu`_!&j7p`;QIm`Tp#gcHhy2fn_sjjE zCL1mmiUB?eCh!JROQR02Yx}c&)66fed$B1OTgv7vGl$2WX;hZsD{9S}2Tj^i>jO*d z=pmP4M&x`pb@r7R$+!2btCwmQVl!LQ*Q{v>;tkHP^m3!*i({U&JGlydMeT-**68*8 z4`-`lVl0Itmyf-E5Zl|@udGltZBz1{?A_!`dA{-9`+vo6W>UA3*H_-n81_>TFRBCF zru602_!}!TR}OPujondGtYqr%W%}-aI=IPDUVHLr%c|>fA6AweK5$?J(=e-ig<)vy z>h?Vy+jYa=iEW&;_U^4JE{GRClgOm0yJQQ((^JO$vB)*NIjug+*Cye8H9!0765ms~ z&a2|zmX=(Z@BK0D6-`Y?Q_^eS_bV;)RsZWFa@Xk+BIi{_2l2vQK_*Q(^6p7P*`Y|w zwCZg;9Hs;74sRZF=4i{o(TyELQXBGF$M5aRjV4d#`Sv`*8m=8V?nYeXcRRn`-ki_O zJiAAk6T}<*3`v)Gb532Dcx$}BX@2&JWcie|aa(2&FV25dYO37#$hiCJ*eK@LgwKBQSke3)g25r|=Vp;}-~eHQ%5&^Uu5?EvS{(|os*emFpVHEMHA@IO;AqV7w z&no1AT#yq+SA@94xMk)vjlt?Mg3TE^<5G9s9Mm&Nm-LsU>j^ypKB-6%A!QRLNmmo# zr|;BENc(_0T0#dgNF^b)6DCm+S`DGqVMs?IJp?c+!a%4ntO!I7l@?M=fpt`b8pC|x z4%A{uQ^7kL5P}w57gQLEIzp0|pwJU4LbXfW_s!1z2iKb;v%DlrOwZ*>)@^g8@GRwa zCMwjAQ)BF!8jR=cfz^(-MU=7|KZ$^X6<(9qePeEl%s#|(9LWMs>p8`WHyyKDkAcDf zEmW||s6Q>q4fl_HF#yM+M1=}^1k^&^T`4d=k0CibOELUno@Y3dQpu7|isRWl!p&r5 zasE`174C@DY*C%8~g2zr&H+;*3ZVwEs}3_90g<9K`#X{Q&F zxQC^1JDtVQZqm)u4C%Hp6dnllDQk6^2bSzI#)Ufe5N@|I0J?7PflYzt>4913MnEH+ v;DJ``0rNzP09;HKzz4b Date: Mon, 23 Sep 2024 20:20:20 +0700 Subject: [PATCH 04/12] fix(elysia): update elysia version --- frameworks/TypeScript/elysia/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/TypeScript/elysia/package.json b/frameworks/TypeScript/elysia/package.json index bafbdcff3fa..fa95e553bc3 100644 --- a/frameworks/TypeScript/elysia/package.json +++ b/frameworks/TypeScript/elysia/package.json @@ -12,7 +12,7 @@ "compile": "bun build --compile --minify --target bun --outfile server src/index.ts" }, "dependencies": { - "elysia": "^1.1.15", + "elysia": "^1.1.16", "postgres": "^3.4.4" } } From f70e553663a66984754bb1da308682bead3ffdd8 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Fri, 27 Sep 2024 13:37:15 +0700 Subject: [PATCH 05/12] fix(elysia): update lockfile --- frameworks/TypeScript/elysia/bun.lockb | Bin 3513 -> 3513 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb index a67fe38cd10e666a6dc1149ce0e180e91130c3dc..5d4cdb0b97af1c97b83aa10bf44cc1db342ee378 100755 GIT binary patch delta 384 zcmdlfy;FLEp2BDLxQ6$S8|PZCudFP6c7D24_zNK?wv6hWkB3+Da3r3Y=;x&{m4Sgl zl7XS21xO15>2e^=3#60t^RqKk85kz+P*4zX?pSl?@FEfUxl9jCgtk2Azd!r2VP8V| zB&)p`5zi zSeoO_Y3`@NpD!ifn!2u+k%57c;UE7$Ak94aB}@3^7c9J!m$G^@vQC}|=F?E7Sfx(a%d^Ap-*g zF9SnE2auKo(#iSx*_o*f4CO$+Ado+Chk^qC{n?KV`x43poIBQ>IlM?@^5rE@41?dY z%FktbU?Q~T`NSU!82KkNGOABLz{oS%hslQVJDKbm>nC$E*>66kZ?~gQd~$D-=xE-I;tnR;jOK=lK(AYEG>ZwK7k4Fs%Q2Wt!jn!d0m%l?&y| zzFyUtUJx-m^=Z@RB+-403=E76|M>p_Y39j}tl^Viu<%Zv%i_(*I(a6LH-nXT@>dq` z%^z4#F*BM@-pwh^SU#DXOVSkPDVW2V7~>4|%=8Qx7+~Ipc?~FIsAr&O$iT30@<&d| z&30TqjI5@5CFxa@=WuKB<`<;qB^G4rmQ)s`7Ee~-k)B-3<2?BxchuwqJd%@_0{PZF K>XUEsJOBW|7mSSn From a4d0334dfb76073af6bd049a64b26ec7a0241c3e Mon Sep 17 00:00:00 2001 From: saltyaom Date: Wed, 25 Dec 2024 19:46:02 +0700 Subject: [PATCH 06/12] :broom: chore(elysia) update Elysia to 1.2 --- frameworks/TypeScript/elysia/bun.lockb | Bin 3513 -> 5662 bytes frameworks/TypeScript/elysia/package.json | 7 +- .../TypeScript/elysia/src/db-handlers.ts | 122 ++++++++---------- frameworks/TypeScript/elysia/src/postgres.ts | 44 ++++--- 4 files changed, 86 insertions(+), 87 deletions(-) diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb index 5d4cdb0b97af1c97b83aa10bf44cc1db342ee378..8af53465a6f583c93ed35f4cb92e4b39a070bf81 100755 GIT binary patch literal 5662 zcmeHL2~ZSg7Vg184Jsl*5_O3j9;G-vCx>z<>TcF(P(%?C4;UM07-q)l29Y%~AW}p{ zaTO2LRq#T<0|hm@tQhe&9+8b=q6ESF*i~`kuBGmKJ@b<`8wJa%Ew^f4)j#j=?*IGV z`~Uy_Z~C=|n>>j#$)j1loY5z{Mknd*pviOwZ9)vIV`MP~Q(_b^OIFy~P!v_RKXR|* zgDk&+Y2CxdZirm%c_C*^lR9NzMYUwvF>|NUi@L%f5POTF+W$hEt=C~>0LAELacmSt z84VmCYhpNZy&Fb$q9}7Q=np_I0o@I>)?i3r8R)=u7f^Pfq2Z;V7l4~M{u1a8pk3Nf zR7cQft@nqmZ+Ln&pmv_S>S4*HAoo$^x^vy?2IZn@GkbMuQ_+8wexSp!?9$VR3!Ro; z*x0BHy>Hudt<8@b$MT!&dYcD$&SRoaw(VCrQjy;DhkLQ#WINtTw@N1UqJg9lB^V6=pt64$s+h-FH>E{n)==`{ckUWnJw>yd=c124H$ z9ZELsnM#HBde&6FH2e5@9}%xOFG+o}WFs=-GrH=p_1##TCpXqL#TPtT;_$$`^oJ8w z4>Pa#n_IT_&wKWKWc+btX}Y&#->l~)FAFu!6Z_ulzu@uh#E;-_$4=ufhA!W^ zb>*VA?Y;M(n;uJP=e+-;TRj%R!d=4Q_M-C>8v_dbt1V4i%&V3@Zz zgLQB|Ci%;^B3|)1kcJo8Mc7XX?Qwp(&iU_?>Jkf{N%(@=uU}jZoT|{(CB zd|=XGRqe|M!#>^HZqw$1b3YZ(DLI+|mvP74MZDttE^R7)xp;2Ht;`*d6+xN#?)4RC zrqwh$?JoX(WlcwyzB#jpMqb>Vb1$!SP1eAKX>-orxjdp`E)_XDt^Y;0w(F15Yec-5 zyNF0q@ZHPbBnXJe^m_jB2ae*~!24z4x3a@XDNp&JyPyz1m$j|qzhROTl<8b5Jc zw)0~3=F+)`=1GU_IruCkf5;6HFL_fyZs~&6skgg4w14t>Lr`6(E2DP~um8CAy29hb zt7@nH*p}!*=H2mh>H_v%RAxUhbecS+?pit6h`UGcQC__tA># zqUhQs+nhc2&9DA!)YfYi<;4{azlq=M_~{ny-bgo(?Pi^b7xN1dY1xUxH*45wgOiS? zcm~-V%^kgeY+21tP?*D$h^9roAz8;oZwVgj_($cJ+)6@ipq+n`S``SOUxy3tWB8td?*vGQXBPi&@xKxO z$M8P~^DX8^T59mrU`ZeP|WcTw9YG*G4i$NvmimBS^JP zs$h7crZuz|&;T3O)ui5qCkk4vp_OVS+4@9DQN_T9)i|lD1vV9} zpeRz`le!x*Dq2aag`E=5$4L?x;Oa#yXa%Y5NzH8|Q6j>JqDXa5s%{&}9ADatRw^j+ z9e~v5@Is{t z@+MXv8|bS1c~gCxHKkyD&o_XwbYw!jA!Z22>b1Hk)+9&! z(T0?mD2|s+XS9atj4a8-%Cv?=qe0K;`9vnsz?#4zgOSlk8CjX&@EdHtG7e0?axJq& zRSRx6+XQ%XUk1SqVfW?`15aqpIveQ delta 1325 zcmbQIvr~G4p5|xvxQ6$S8|PZCudFP6c7D24_zNK?wv6hWkB3+Da3r45=c!2hu=Q4axcW*_o+e)eKw{-%4u;ICrc$b9j-6{9L97 zCPG`D^WUHS*sw35eDdWbPYi?Kvd&j+(9v#9O`4p*=po1j)Mx=Tg&9b*fbir*M)k=H z7&!!;fIL&63?q;RVF8#7(>jL9tC;KrIe?--MGZhX1_dBif-CT1oUFxU$J+~3U;gVa!_|KH@ptXU3+2tv`B&TUX`X$fzf8CBj*Zc`cg9O&zd5N(3Eof>FQ4S-bJxx9?H0oe zRmKSnUO(d6+aFBMWs~sPKE+Jh`2Mke`8th?NTq8sjh9RcKK)&M%Co-w+8LhBj|(#| zgm3Yfc2sT6^8REC<<#xQ(j0G2b3YCKd@1?X)ODcnVr2No{|`trPi|xnpRB>o>yuqp ze(IX)OZk8A!V8c4@mojB&GHeOTK{LM)y55fELJ^|Q7kxWJHxLybmPZ0*Jinzy*$o! zFY!ZR`ttd1>&+OroRADdk+_hzIpWY3KgxPq8Y^y7ISDFP6_(LhiYy?AGO*7k#KN@H)R*zZ}U>c2E>R0gGuq zvuJx(dDCjPs!_TWUtgU+f6Y{#U3aeK zcX$4)woAM9F80As$oHsE&Ie1kiJk!u4q{*Q1>PT;dqfLQbIKLmhyAlpAc z74dLR-o|Gn21>@@#08`+IDrHZM1Z7}v_PtvfEeg}1~woDDFZ17r67=*9Wdowlk51k z>VcV~0hU`h7~@R!O!a{2IW?!UI5Uxf!Fj>sANOo;wlXos8R`L{8ACySaY=enYO#{h z$JI9+m3)9Q#(E|oJ+Mp)%Y#4}13fc60|o|IHiqR=kZDFh&p#>3_O{s;Qg5l%|{E}QHl?AEA$wiq3C6gIN zq$i6DNidpBRuq<>>@OrF3JM6llJu(lg4Ddkf=peo;>j68T41#f!cmjY3Cpv9d;!*S cSjc(uEMWmwaA-{aDD28^re_4w4@?I$06h(Nk^lez diff --git a/frameworks/TypeScript/elysia/package.json b/frameworks/TypeScript/elysia/package.json index fa95e553bc3..f3624e0652c 100644 --- a/frameworks/TypeScript/elysia/package.json +++ b/frameworks/TypeScript/elysia/package.json @@ -3,7 +3,8 @@ "version": "0.0.1", "module": "src/index.js", "devDependencies": { - "typescript": "^5.5.4" + "@types/bun": "^1.1.14", + "typescript": "^5.7.2" }, "scripts": { "dev": "bun run --watch src/index.ts", @@ -12,7 +13,7 @@ "compile": "bun build --compile --minify --target bun --outfile server src/index.ts" }, "dependencies": { - "elysia": "^1.1.16", - "postgres": "^3.4.4" + "elysia": "^1.2.6", + "postgres": "^3.4.5" } } diff --git a/frameworks/TypeScript/elysia/src/db-handlers.ts b/frameworks/TypeScript/elysia/src/db-handlers.ts index b75ccfdea60..6ee1ca3b62f 100644 --- a/frameworks/TypeScript/elysia/src/db-handlers.ts +++ b/frameworks/TypeScript/elysia/src/db-handlers.ts @@ -2,74 +2,66 @@ import { Elysia, t } from "elysia"; import * as db from "./postgres"; import { Fortune } from "./types"; -function rand() { - return Math.ceil(Math.random() * 10000); +export function rand() { + return Math.ceil(Math.random() * 10000); } function parseQueriesNumber(q?: string) { - return Math.min(parseInt(q || "1") || 1, 500); -} - -function renderTemplate(fortunes: Fortune[]) { - const n = fortunes.length; - - let html = ""; - for (let i = 0; i < n; i++) { - html += `${fortunes[i].id}${Bun.escapeHTML( - fortunes[i].message, - )}`; - } - - return `Fortunes${html}
idmessage
`; + // NaN is falsy, fallback to one. + return Math.min(+(q as string) || 1, 500); } export const dbHandlers = new Elysia() - .headers({ - server: "Elysia", - }) - .get("/db", () => db.find(rand())) - .get("/fortunes", async (c) => { - const fortunes = await db.fortunes(); - - fortunes.push({ - id: 0, - message: "Additional fortune added at request time.", - }); - - fortunes.sort((a, b) => { - if (a.message < b.message) return -1; - - return 1; - }); - - c.set.headers["content-type"] = "text/html; charset=utf-8"; - - return renderTemplate(fortunes); - }) - .get("/queries", (c) => { - const num = parseQueriesNumber(c.query.queries); - const worldPromises = new Array(num); - - for (let i = 0; i < num; i++) { - worldPromises[i] = db.find(rand()); - } - - return Promise.all(worldPromises); - }) - .get("/updates", async (c) => { - const num = parseQueriesNumber(c.query.queries); - const worldPromises = new Array(num); - - for (let i = 0; i < num; i++) { - worldPromises[i] = db.find(rand()); - } - - const worlds = await Promise.all(worldPromises); - - for (let i = 0; i < num; i++) { - worlds[i].randomNumber = rand(); - } - - await db.bulkUpdate(worlds); - return worlds; - }); + .headers({ + server: "Elysia", + }) + // ? Mark as async for Promise result to prevent double Elysia's mapResponse execution + .get("/db", async () => db.find(rand())) + .get("/fortunes", async (c) => { + const fortunes = await db.fortunes(); + + fortunes.push({ + id: 0, + message: "Additional fortune added at request time.", + }); + + fortunes.sort((a, b) => { + if (a.message < b.message) return -1; + + return 1; + }); + + c.set.headers["content-type"] = "text/html; charset=utf-8"; + + const n = fortunes.length; + + let html = ""; + for (let i = 0; i < n; i++) { + html += `${fortunes[i].id}${Bun.escapeHTML( + fortunes[i].message, + )}`; + } + + return `Fortunes${html}
idmessage
`; + }) + // ? Mark as async for Promise result to prevent double Elysia's mapResponse execution + .get("/queries", async (c) => { + const num = parseQueriesNumber(c.query.queries); + const worldPromises = new Array(num); + + for (let i = 0; i < num; i++) worldPromises[i] = db.find(rand()); + + return Promise.all(worldPromises); + }) + .get("/updates", async (c) => { + const num = parseQueriesNumber(c.query.queries); + const worldPromises = new Array(num); + + for (let i = 0; i < num; i++) + worldPromises[i] = db.findThenRand(rand()); + + const worlds = await Promise.all(worldPromises); + + await db.bulkUpdate(worlds); + return worlds; + }); diff --git a/frameworks/TypeScript/elysia/src/postgres.ts b/frameworks/TypeScript/elysia/src/postgres.ts index cc6d4389a02..a6f4dde5b63 100644 --- a/frameworks/TypeScript/elysia/src/postgres.ts +++ b/frameworks/TypeScript/elysia/src/postgres.ts @@ -1,30 +1,36 @@ import postgres from "postgres"; -import { Fortune, World } from "./types"; +import { rand } from "./db-handlers"; +import type { Fortune, World } from "./types"; const sql = postgres({ - host: "tfb-database", - user: "benchmarkdbuser", - password: "benchmarkdbpass", - database: "hello_world", - max: 1, + host: "tfb-database", + user: "benchmarkdbuser", + password: "benchmarkdbpass", + database: "hello_world", + max: 1, }); export const fortunes = () => sql`SELECT id, message FROM fortune`; export const find = (id: number) => - sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then( - (arr) => arr[0], - ); + sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then( + (arr) => arr[0], + ); -export const bulkUpdate = (worlds: World[]) => { - worlds = worlds.toSorted((a, b) => a.id - b.id); +export const findThenRand = (id: number) => + sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then( + (arr) => { + arr[0].randomNumber = rand(); + return arr[0]; + }, + ); - const values = new Array(worlds.length); - for (let i = 0; i < worlds.length; i++) { - values[i] = [worlds[i].id, worlds[i].randomNumber]; - } - - return sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int - FROM (VALUES ${sql(values)}) AS update_data (id, randomNumber) +export const bulkUpdate = (worlds: World[]) => + sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int + FROM (VALUES ${worlds + .sort((a, b) => (a.id < b.id ? -1 : 1)) + .map((world) => [ + world.id, + world.randomNumber, + ])}) AS update_data (id, randomNumber) WHERE world.id = (update_data.id)::int`; -}; From 4eaf1b6df79cc9fcdf2d5e303b9a273fb321c4f1 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Wed, 25 Dec 2024 19:47:00 +0700 Subject: [PATCH 07/12] :broom: chore(elysia) update Elysia to 1.2 --- frameworks/TypeScript/elysia/src/postgres.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frameworks/TypeScript/elysia/src/postgres.ts b/frameworks/TypeScript/elysia/src/postgres.ts index a6f4dde5b63..0530ff3f8c7 100644 --- a/frameworks/TypeScript/elysia/src/postgres.ts +++ b/frameworks/TypeScript/elysia/src/postgres.ts @@ -28,7 +28,11 @@ export const findThenRand = (id: number) => export const bulkUpdate = (worlds: World[]) => sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int FROM (VALUES ${worlds - .sort((a, b) => (a.id < b.id ? -1 : 1)) + .sort((a, b) => { + if (a.id < b.id) return -1; + + return 1; + }) .map((world) => [ world.id, world.randomNumber, From e8057dbcad363a9df9834c7147a869ce3ed60996 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Wed, 25 Dec 2024 19:52:29 +0700 Subject: [PATCH 08/12] :broom: chore(elysia) update Elysia to 1.2 --- frameworks/TypeScript/elysia/src/db-handlers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/TypeScript/elysia/src/db-handlers.ts b/frameworks/TypeScript/elysia/src/db-handlers.ts index 6ee1ca3b62f..6674829bfd9 100644 --- a/frameworks/TypeScript/elysia/src/db-handlers.ts +++ b/frameworks/TypeScript/elysia/src/db-handlers.ts @@ -8,7 +8,7 @@ export function rand() { function parseQueriesNumber(q?: string) { // NaN is falsy, fallback to one. - return Math.min(+(q as string) || 1, 500); + return Math.min(+q! || 1, 500); } export const dbHandlers = new Elysia() From e2e28d672e9891f29c1670c738cbaf5cfebc92ed Mon Sep 17 00:00:00 2001 From: saltyaom Date: Sat, 28 Dec 2024 16:53:50 +0700 Subject: [PATCH 09/12] fix(elysia): incorrect /update --- frameworks/TypeScript/elysia/package.json | 2 +- frameworks/TypeScript/elysia/src/postgres.ts | 22 +++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/frameworks/TypeScript/elysia/package.json b/frameworks/TypeScript/elysia/package.json index f3624e0652c..9d38195023f 100644 --- a/frameworks/TypeScript/elysia/package.json +++ b/frameworks/TypeScript/elysia/package.json @@ -13,7 +13,7 @@ "compile": "bun build --compile --minify --target bun --outfile server src/index.ts" }, "dependencies": { - "elysia": "^1.2.6", + "elysia": "^1.2.9", "postgres": "^3.4.5" } } diff --git a/frameworks/TypeScript/elysia/src/postgres.ts b/frameworks/TypeScript/elysia/src/postgres.ts index 0530ff3f8c7..d92e57d9b4c 100644 --- a/frameworks/TypeScript/elysia/src/postgres.ts +++ b/frameworks/TypeScript/elysia/src/postgres.ts @@ -25,16 +25,14 @@ export const findThenRand = (id: number) => }, ); -export const bulkUpdate = (worlds: World[]) => - sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int - FROM (VALUES ${worlds - .sort((a, b) => { - if (a.id < b.id) return -1; +export const bulkUpdate = (worlds: World[]) => { + const sorted = worlds.toSorted((a, b) => a.id - b.id); + + const values = new Array(sorted.length); + for (let i = 0; i < sorted.length; i++) + values[i] = [sorted[i].id, sorted[i].randomNumber]; - return 1; - }) - .map((world) => [ - world.id, - world.randomNumber, - ])}) AS update_data (id, randomNumber) - WHERE world.id = (update_data.id)::int`; + sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int + FROM (VALUES ${values}) AS update_data (id, randomNumber) + WHERE world.id = (update_data.id)::int`; +}; From 1939d1f33d621d0aeae5a90d52e5ab08851391db Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 30 Dec 2024 00:42:47 +0700 Subject: [PATCH 10/12] fix(elysia): incorrect /update --- frameworks/TypeScript/elysia/src/db-handlers.ts | 5 ++++- frameworks/TypeScript/elysia/src/postgres.ts | 10 +--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/frameworks/TypeScript/elysia/src/db-handlers.ts b/frameworks/TypeScript/elysia/src/db-handlers.ts index 6674829bfd9..14f4259badd 100644 --- a/frameworks/TypeScript/elysia/src/db-handlers.ts +++ b/frameworks/TypeScript/elysia/src/db-handlers.ts @@ -58,10 +58,13 @@ export const dbHandlers = new Elysia() const worldPromises = new Array(num); for (let i = 0; i < num; i++) - worldPromises[i] = db.findThenRand(rand()); + worldPromises[i] = db.find(rand()); const worlds = await Promise.all(worldPromises); + for (let i = 0; i < num; i++) + worldPromises[i].randomNumber = rand(); + await db.bulkUpdate(worlds); return worlds; }); diff --git a/frameworks/TypeScript/elysia/src/postgres.ts b/frameworks/TypeScript/elysia/src/postgres.ts index d92e57d9b4c..37134b79db8 100644 --- a/frameworks/TypeScript/elysia/src/postgres.ts +++ b/frameworks/TypeScript/elysia/src/postgres.ts @@ -17,14 +17,6 @@ export const find = (id: number) => (arr) => arr[0], ); -export const findThenRand = (id: number) => - sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then( - (arr) => { - arr[0].randomNumber = rand(); - return arr[0]; - }, - ); - export const bulkUpdate = (worlds: World[]) => { const sorted = worlds.toSorted((a, b) => a.id - b.id); @@ -32,7 +24,7 @@ export const bulkUpdate = (worlds: World[]) => { for (let i = 0; i < sorted.length; i++) values[i] = [sorted[i].id, sorted[i].randomNumber]; - sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int + return sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int FROM (VALUES ${values}) AS update_data (id, randomNumber) WHERE world.id = (update_data.id)::int`; }; From d659116302d57f89efdcfab379863ffbeaa8e5c5 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 30 Dec 2024 00:52:15 +0700 Subject: [PATCH 11/12] fix(elysia): incorrect /update --- .../TypeScript/elysia/src/db-handlers.ts | 5 +---- frameworks/TypeScript/elysia/src/postgres.ts | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/frameworks/TypeScript/elysia/src/db-handlers.ts b/frameworks/TypeScript/elysia/src/db-handlers.ts index 14f4259badd..6674829bfd9 100644 --- a/frameworks/TypeScript/elysia/src/db-handlers.ts +++ b/frameworks/TypeScript/elysia/src/db-handlers.ts @@ -58,13 +58,10 @@ export const dbHandlers = new Elysia() const worldPromises = new Array(num); for (let i = 0; i < num; i++) - worldPromises[i] = db.find(rand()); + worldPromises[i] = db.findThenRand(rand()); const worlds = await Promise.all(worldPromises); - for (let i = 0; i < num; i++) - worldPromises[i].randomNumber = rand(); - await db.bulkUpdate(worlds); return worlds; }); diff --git a/frameworks/TypeScript/elysia/src/postgres.ts b/frameworks/TypeScript/elysia/src/postgres.ts index 37134b79db8..33db0497fcc 100644 --- a/frameworks/TypeScript/elysia/src/postgres.ts +++ b/frameworks/TypeScript/elysia/src/postgres.ts @@ -17,14 +17,23 @@ export const find = (id: number) => (arr) => arr[0], ); +export const findThenRand = (id: number) => + sql`SELECT id, randomNumber FROM world WHERE id = ${id}`.then( + (arr) => { + arr[0].randomNumber = rand(); + return arr[0]; + }, + ); + export const bulkUpdate = (worlds: World[]) => { - const sorted = worlds.toSorted((a, b) => a.id - b.id); + worlds = worlds.toSorted((a, b) => a.id - b.id); - const values = new Array(sorted.length); - for (let i = 0; i < sorted.length; i++) - values[i] = [sorted[i].id, sorted[i].randomNumber]; + const values = new Array(worlds.length); + for (let i = 0; i < worlds.length; i++) { + values[i] = [worlds[i].id, worlds[i].randomNumber]; + } return sql`UPDATE world SET randomNumber = (update_data.randomNumber)::int - FROM (VALUES ${values}) AS update_data (id, randomNumber) + FROM (VALUES ${sql(values)}) AS update_data (id, randomNumber) WHERE world.id = (update_data.id)::int`; }; From 9857835c811b4d90e5e8b566977c436c868996d8 Mon Sep 17 00:00:00 2001 From: saltyaom Date: Mon, 30 Dec 2024 00:56:22 +0700 Subject: [PATCH 12/12] fix(elysia): update lock file --- frameworks/TypeScript/elysia/bun.lockb | Bin 5662 -> 5662 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frameworks/TypeScript/elysia/bun.lockb b/frameworks/TypeScript/elysia/bun.lockb index 8af53465a6f583c93ed35f4cb92e4b39a070bf81..8b08fa7e91bbb929515544883dbb6414cc2ddfd4 100755 GIT binary patch delta 151 zcmV;I0BHZ7ES@ZoE+B}!tk0dCA613u9*K0_Z*)Ild!u^m#I*8e0^JGc@|>|wssRBB zlVJfTvmgRx1VB=wbdPemg;~>Xy0YsFGOG?h7nWUGP)Qi`^=lo;ZOjCasFo}a#|ZG+ z59Hd0uc7Wp6f~gI>1&8Q3Ju=3R|d1i2J{FB0bVgKF)lGQlfe%%0Xehu4{rhiIkRLE Fx&x@b0~K2~*i80oS|70at3ias%<#Au>*Xsp__1WDguHE7}&%5Ule1%a+L~?P3N1 DMAANP