From c29a151be3ee7ffa0bb984ed856ca6395bd19871 Mon Sep 17 00:00:00 2001 From: kazuya kawaguchi Date: Fri, 20 Oct 2023 15:48:05 +0900 Subject: [PATCH] chore: continue e2e setup --- .github/workflows/ci.yml | 39 +++++++++++++++++++++ .gitignore | 2 ++ .npmignore | 2 +- bun.lockb | Bin 313056 -> 312363 bytes package.json | 23 +++++++------ playground/deno/deno.lock | 39 --------------------- playground/deno/main.ts | 12 +++---- playground/node/package.json | 7 ++-- scripts/e2e.sh | 18 ++++++++++ scripts/replaceDeps.ts | 65 +++++++++++++++++++++++++++++++++++ 10 files changed, 149 insertions(+), 58 deletions(-) delete mode 100644 playground/deno/deno.lock create mode 100755 scripts/e2e.sh create mode 100644 scripts/replaceDeps.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ba3384..6c032b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,12 +106,51 @@ jobs: - name: Test run: npm test + e2e: + name: Test + strategy: + matrix: + os: [ubuntu-latest] + node: [18.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout codes + uses: actions/checkout@v4 + + - name: Setup deno + uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + + - name: Setup bun + uses: oven-sh/setup-bun@v1 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + + - name: Enable corepack + run: corepack enable + + - name: Install dependencies + run: bun install + + - name: Build codes + run: npm run build + + - name: Run test + run: ./scripts/e2e.sh + edge-release: name: Edge Release needs: - lint - build - test + - e2e runs-on: ${{ matrix.os }} strategy: matrix: diff --git a/.gitignore b/.gitignore index 97aed75..45f8f29 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules coverage .DS_Store .idea +playground/**/bun.lockb +playground/**/deno.lock *.log *.swp diff --git a/.npmignore b/.npmignore index 985bb72..d7627bf 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1,5 @@ coverage -examples +playground deno.lock .* *.log diff --git a/bun.lockb b/bun.lockb index e17772679513d75b132a85ca5748595e57749d29..5c2dda014216538d3401616e7554313516462f72 100755 GIT binary patch delta 55358 zcmeFacX(9Q{`NgH$v`%}N{uuX0)`F~3}gTS=|!bW2@qg_&;m#lOt6BAs9RltqKJ)v zs3=NN6vP4|b_7J4m8htQ1ytbu+{cYX5p#z${E*1223_-+-y8h+(7_isxK=(_N( zfwl6=*G%vX|3{fXAisMs5U2^yip|K%nGp!&;!qBI8(bBh43~uGgaZKwzBiq*$aE2WR?6SHz>slbM0rV3xdk4kVFTmycZbg63DQUaCX0#eJq6c1tBly>v6Eus#?N?@^eQ8J;+WXDEbT zlJ^ppVrOJdPaVr7S&?izV#f5W%jGH%Zgl!IFaH<`Bpj^cJ08GRbKkT*Kb3J+7ye$?k8fYk z=P$6&L!UHd+@!2oS(D-;{k~0i*9E@c)#GEM$5YW*PS$Mo-yU@3cds{JMhEiOA*u(0 z7x@wE$bdTJ=VneHmqT3r`o5mqENwDopoX>oy+S{rS0UXOu<|Pbt6_h*YZI$Dr5gJE zx5<4!u~vuE)_R&U<@-q^-#2H<=!q(G+{J#GF|UsUfwzgLTKSt{&7=8lvv8GWAEo-K zvvQ_Rk7Z{D<~R1s7~RBgdRETN8L>$@fx*_!b92MB^3FE(^PZ41W%AhAq%1oU`7fhu zgk$8&;N-8PEZI}1PZ>8oD<|hsTh~f0Y=30Vyk-)0z0cYUVb4En@)-3~d`Fl=N2|_b zU^+f8KitZ%c6?1S(Z-}sojC4ibWN4GKEAczDLr6jSAN#?=~JesX3bt4@zY;ou9uTf*uQHKP^VVBKAh&yhjAhm34Z1R}YnNtHRqJGPa z<*BKYri{*1G#y&per(v(rkuzv^N&W=rvP0h^7`S&fMIq@2jr#t!;Ujb)p zXNk|o_*{<9+1j1_8ppe=E*YrB9Xk63wYIz+Ru3e1@mK%U%o*cT*~+(s{Q|RL#W!|? zNmcT;T;^L>qOw`#cY)O}?SuY+$5&i@HN7&QT80y2leLcRd|NC}+Q6ImY%loRK%(yNDRN(08qf=XO=Xiq*)B}^IjLFPlcZ&7% zGmH;xd>}uzh0yr_~jH4^PM$GbJ0pN3ZmI#_K84 zJ6aiv?m#QAwGNL(AI|Fp4h8tNBvK7N()s|>5tAGyk}Om-|gD|O7Mz&+Ti?6_fm zp_4Mtq{edMlRn4ly3?sQCQX?+HH(}#V5=7@k94b-Jm0yM(p3IZw?oNVd2djN3cF^E zuWo^5kD8u2I*a8WAqRQSh1G@c!ivw%nm#Uz88HR_lGw4FRBsY&8teOyK-ZKVo0&6X z8kLxyH8UqRHa8F*=ij9Q%pQg+FTW=Nbypvopf#s+1m2$LPmPUm zMdBZWE5WYS^Q^67lj4V1y^GbG!rB~bT00C^q1W?&nBYfz3M=7uSQ)Xn>9Ie@{|}Osfj!@hgsdkZ)T2);ktE>-;5k~ec3m{nsc@d;Rd3t>)``Lkfvb)q}3OrPKw z_x&I z3~M@^zrgp)iH+j~J0+ljn>uC6q_uV$JPNCvoEc+MvnErcYY{X9VzB1fa99H{bMlzj zXvTKb%$!kEsLG1l{DMzYk-Eg6x!oU-@37Tb&n@)xDS3zAcr6zS&pCyzd^tXjW(Nq2 zTI5&MzbCq1m93CB07?BDzYTV`b_ZB(ZV9W-6DMWOWU2%nBuh>CY^qQezV&WD%UoDh z88c-DP2<3TT>*Q)t>RVKYTB2i)A;O$nathu*WTj~%!>#rXuIV{;Huak-0Nqw09yk& z$HotXwHofHQp)g6cWb#wo#z(&%{jcpPxU&iX|Mua)iZ9j^0o4wA(1NgFsw#s+sfp$ zc@wtkkhzRi1$Tlq$x>kDa<}zQ!mfi|A6s>pkdu|8DRDKnCd44P7F_mWKi!Gt{^X3H zlWyp_Q&jx8HGPF&?bsv!z+MHbB3)r^L~Y?x@Rj)SRFmHkRs$-Kp|=6q=5<=^R;bXp z{E#R7!5f>ynRCYU%(HI43Qh9bDw|CFH{QuMKvoWpGzEcsd0dtg}GHF&;;Pz+y z?!6w?@~I7Lu9k&0$nUT9hqaj1Pd=?-;Vcs%BQ4ZI-++ys0O_|CL$t@9E z1?u1+J3DK}_$gy@0`Is^rCNC}QoO4BEUauEhSk1$R8MQE@{4{mTv+yJoBjBVm;LsS z)iX!t=dz1H)3kr;6@T_bxA^(*Bwpn-!7is8^Z5i+U}fv@2nkfsRx;4^ z`-lYUhgH~BVAt|I8$S-#n!TP1DxdFcMf#wt8!mw>!;N57hz)pp*0`+M)v?QKz+yR> z)2C4-y;Wy|a>c4mMoz=P&Ph3BQ|n`Wb%rw%@h! z2gQlI{QRcI#_+Zx>)acWGn@Pwrl*z4Dk%OA;M`-28#}K_-A~^0t5NTLzdi8>VO|l< z$Q(5(>xcKK^Te0#Zd zs?-Yhbvsn4Rj2=6zsMt&9KfLdnzIVAWc|W^SFT^~(=CdvcLKU8?cT~#$Bui58* z?~EQlC|C=)|CFzugtp)SVbyR?km5U*|54P5mx2ve(g{5pYhjh+5yWy zJ98q({Mht$*qXjC;V1u3v8!@i$bW=@<~z&9OZal3Z&&=rx35Q60w_@CxqGW!k(5-n z+xC&AKi#tOxubR3mvlFzmMeEU+Hc2(@n*^Hnp-}-V%=+xx(!mNmJ8G^yy>==-@C8m zzMtZj7G`+=3QSXMX}W zTZ&9{r?pB;N(=;|7)kE&RT1Z=a3GK#w}QLff|k)>b+?e8kGm_jjSI;N1U=?bbKRfS9Hw9?KYEhhSc9bjqOIf7k}z8Pj#RdV8@n{>Ok|r@6KQ^nh_f0?T@%#U1dq8X zoua{u-55Vdy9N9-ZegdW^BId#ql?!AX-U-rfu_C@jW|QF)PK~a(2LT*QT?`&;2t-n zOEjr9_bqj|=}$tEp-Dt2ik z_@rA%%yBoRd(>%uetb5l117r#-J`6H!tT+ekBLz`&y8xZq8sZG4fb~ndPJQiZ2xLj zg1fdmORToruxEzTt9D$}WO@oqLy_PO^cgJe8(u@5uAE+bVkNrA-%3luP*ibu?X8}n zjF~Jfj0@@(U00K^6j#ifd@SMKQ75sUulfGntyRn$&zs$pKGEPOZmdt#sc?Zm(O8po zS${0$6n2kyh&cCKi^gD`u%02eS;vTT;e~!W76EM1Zu)S4p}KYXF|-hR68`MN`S&#ww)vol3n~Bv)Z|A&zB13s+!iL3+!~`2i9{VbMZ(1zNl%TW2iv-_0ny+rw_rfj`4&~f zNq+aHC0Z6yj6rbp|r51aTR*|=XIoVhm^MGzOP63vmllFl_HqM(J!5VJC zkZ5p#TR0@@%x7@qSInCYZ(^zE=wm8cvYB5u79Lwq4=lxbHxB0pte##v)$3g>)r3*z z*5|kdS80bSyeb-gkgiX2Q-`!oBB0^(cIjYkw_upJ>+y4in=(A=e9jC~7JeTkGYXnE zSb1ql7!4i;s2>^5&?}c z9o#mOv;|A0{*}#1%)ag#rdU_jm$LD;jo{60Y;-iZ-7Od$4JBUUelt45nNIEf225+6 zmPlxvdu(*NQ<3&wNjh(HaF%0@^m1Xx3)i7lm%D4)qzCVIV_6(xun4jyXSegvp5Qi&J&CYIWG~F3Uh?%F+xRi4cmU3r5BZr+>8VWie zs~E?np;%1G{t+h=%b#4@l-6M3Odn}Yd}}TLzMjGwP>=cb$izBV4`&6I(os6MxgXtv zSTs1&EsRB-XV_|iENcIZjbhob{d|wrl{hxo#c4^M{Zw=!Yv@*M z(M;Ci9xQ)gXi8E;g4FV_Y2r*mQG@&g!lQ0%a@5&_rqfnQue#?GRClvOw~Pb_yD3wm z<7xARW|fB5M)LFGB-TnR*TJ;;@2K+?1&-H8g)cHJcO()^ZEbMs@RR&7FmzT8_n5 zq%Mj^g1g+_wbi5Yvp$KvFXu@PoeZB zb--Rr@+-JUnqTN0g3nm*bIZkP%+{iOIYhNfOTtj^`YZZbEDe$0y+2`T`Fb-m)V7z~ zFefAF_Fnz~`)88nQ=BA(LB5yHWE|%FN~@_uu(Te$4Zyhr%b$npyl?*U#A@Bg?^xE+ zkccw}i(#i^<+26KpWB)bXRuUb|5i4VcFXgx<~@p{Hux*yIF@R_@J-@|+|T!>>GRp_ zW=EX@6xG)|#5rGLHN|3!UXqq{x!+Ru-ENU^AFTH7n$hXOMQ$uN>TJbk)57(5ED}8F z7NT{!!fznkaQ8@f4%TJvvD|cL8zFY!{PVn7`vN-+J?oFP6Y9^eB4CyBmUt9PasD0a zHY`<#;h^C!VyXMcylzHNs6Ad3hYwu>aO?T=H^as zf1uZnjs(}a1#_cL2}V&X#@h z9P~!pY0dVh(eiJo)3N-SK!cr~Sn5dcRFIT(6}vXpU)?hV0(I4F>wi5emd^gRIvk=Jd3-{dZi^{bi(ilelM0f*jpE& z3S-?>w`Dk8#>RVs8%p>_EDoCV-fM)E4>KV`BgVO_ZqEo^KFKqJ zqVDa-?nn>Uo8)Z)geDN`=4sCn@?%e)(>i3w{pJ($V|NkqQ=B(B5a{Kl9ZksBo+Q-A z)BZRY+jUAjmqmnpzrBR~{F0}}wXuZ!{GKDk7DfGjC)C3Wb)FXYyMvJLw?D2q7fkmD zf|2G7G8{{N#2|Hu1P{3>_eMjNa@+~`^2#J9KKt}=i=i8<|KPj>OD7QelH2B4H+El? zTVBC^QRk@{ej@GyOv@j!BI@OE{h8j_woVTZBhQt?RK^CpPX|EVd?V z^}OCc)cUzRf%R7|#cl`$hMn^qjm2%trh5k~!?Seut9)a8ptN*nV`)3`59Lo{`Te59 z#3xwVz8DC8`Lfha@kdG8<)mS0xTy>Gs_|IrBJT;1*Hwj&MxBG!!yBAXt()Bmk7YPR zZ}zj~2019=EX13HwLF0R>Z4GGg^?3Wy>DL5g5y6!Zvvj zOS_-Hd@h*pZ&P0D_+RA0CwR(6^B2Q=gnE0m)`6$~g7|XP2AhecspZ`w9fPIzQEhHA z?^;jdDABpquc?0k>w%?o^cjnO9+tLOCOLh*8LKlEea7Ss-R8H616H?4sLgHeH>)z7 z$%q;bzgwTe@^@LSwePV;xv8x2N((jF6dF#by+Y1rLMn=ea{#*F4*$6AA7QS;QuX~C z#0yw{KTo4lp+)BoBWaPOnON!){|>zTpyL*<;YsCAzft~EQ3Ol5`FT&lQXM%%@|f}T zzr=lQ)yT zQtiAFLK#clhU+te_qnn4(eNirRl)4_>EUIH&+=K3_jTzzV9t;Goa#Po*JD(65L33WUdU2nPD@I_8_%hh2N;kblGo{Mhyu&N)v{$aK|H+xfh z_yD0Sg+kY@a3}De3>#LQTV))qzIRhLM}v88Y;)8(@Q8mLq$4&*D%5_|9ytR1{xoP7 z;$iP1J?sUiyD2Y6!y9oJ;gwPKF^!fgGh87m!<=CyJ&L6nN3S!#i$Ctqc23n-rX^wc zi&eYjEm*B^EbTo$y@aJ<^%u$a){{k&8wuBaLL;Ixr20}I$LVjuG*TnPd zPsrDn5%TjZB;==P@|3s9z1BAPl-ux)XdroYl_+0%H+bUQeebtv$C#uHp26<=-l_58i^MarR%MAI9q9SsL1lo{bL^C-LA& zx8SX)^B|f$_+Pe5(~>ayU{rIDuZe_4Jm)rKl0NiYJbyi%?ZfJdOW1AJIW1|OAH`^L zsL8_8*3F|d|DUnfEqFWXlz-kIed$BC;=C7s7p(WUcy1Igr6pl#*?PNA=-2gb!w;fK8~j%!XiTnISlV^`9rtmp z*5@+)6pP0)&PY`^#+QQnvL}}HqVm^c`8nuT{w$X6FidOy7bUPs)jCE~E+M4;x9>5q zbY$`F2jPof)PKyZX^|d!@I`mR`x&7Vo849KbB27`9|N!Uj*FE>8vmrY6H7S|mmdi` zukhAV%?}SF#ID>iJ-m$&dpIY>u3O?Ar_R3qoW)=|FJWoi=q{|pt?^oF5AKb1iC+e9 zKj&ky|C8SvgfuTH`_f3L!mI9tk29QsuloO!;8%9dzgP*|&LyDx`e0pkuE^C`wqtsx zC1KcBF*Yq;i;o_43*Uyt+t=IEodbk4H~pgOz3%sme=-<~WwT?FJcgx_@}JfAV_m7o zY^VJjzL)ph;XH`d*RK#8%=cKDSR9wPrX{|qDWLA0MCeMd`CAC7%a}5pq>{G#mGK^2 z!@aS%`=nV|3|S;S{1zehB2t%m%kMF-g5e=p z!@aUM5E>NECtPl)h9tXBdQxvfnjGg2A4&J1Xz>10-a*ksJ*PNlP*f{QVP%eTV~3*7 z%D1Tlnzv^s{etx`xj0RB`R(%J!#7|J@@iH{NL|eVVnD>H^^Tv8J)0LPgR!*N`*BOK zG|0RIT+zBmoG-CdBIf~)<*D!cFG^UV4EF>qO=fR2`R~-&7tvsXTkr+{-T8rEp7-43 zEXHbyA8lZ1?7?b>MXlFGoK+vjpH*ZzAH|j3mj4{1xVpRJ&qi3mo7}>$ zqRtL9z9_ z)3@HlQjLA9^INORy-NL*xl8%>%FWU@JHFT{Jv( zKmKlZTDtQLA^H0Ge1oNt_x~TV=BM$L%5^xF>gLBS#Y)HGJVN=qv9vmPvgs2EhTYir zQ73vJJ~xjqW8=iKTT3*O^fs3K|5{CdqNqLe?dXWp^5D5!2Dy*N>g>hwj@Vg)r8@fC z&mkp` z`%ag1=S{2gpDR2=ls-asZtAG?a4$k_z2&ojkW#W#dDHSDR%36EJf)CVN!=&wf95xr z`#Y0kAXZneG*$T_EL-;Sv_u(tJMJWW?q|Re0;eumnqA&aBYX`Or*>|w&nn~>KY{-W zu$Dgy>V6Slw;G|5Sjxd)8TVkd!Yb$O8#}N%dAV>)3RnM9yRdfcs|a1@y&6jS%J*=* z(OG~s*vre?gRt6TabBUOEx-0HZyduju)4a(x}`hY3HA2N7@U@L)UUQbv3p}(?nSAo z%dwQ5e}g!TH3-XlQQ)K%#)p@~Y;cYn`#lNF2QYZ#$g4%!y9SDMUK$o~07ywFwOb~L{{8=R?uPmTTtk|hQ`ZS=c zD2K3fJoUe`($BDd;^J<*(^cH7PS|7iBcU*?J+du-i1IT|7&{dRGo4bJG z?*_WWvR%vfz`BZX-Z?=97|;6etZrFh{lprQRX_!;2D-#007q5t5*G(A`KHJ6-^{O# zde>$f@qfaJq}d9T(W^kCz8&ZiOXtMkU1Hg90reF3ZSQ)!R6GEO+|y^Ocmu-C)4PhY zl5sQiF0r!vz&HPe)sNhyyaC$_D;*oOcl{kJp3T+E?|?o;ri*}=!C_bh9RYG={d?En zvEo_JosQD6 z<;4R0Kte}|P(dz-EU z95TCu!CGFQcDC7w)t+9k>fP7sVkN&44#R`3{&%dXAvRvDj=l<3ej{K-jnogHC&U9@ zM5c8ZWgWyym}TvvtO{vkRsj<&XIsCbtoSMDL31D!tnUq7j&&=_a+@jLBq#9UeT8OQ zH?f*M7nYkBX<07${1DHx@i)le5^JF>fYplIEibb1f5*!Iu3(@cqAbu#0q}O59N2z>P5LK`ma|1RVzb|C#@h>@RYTSvZUW_{2w-6tl*#gP>YmV$Q%m? ztC&B-!K8CPYIl=YqKf(ttf*rAkY90F{a3>Ji=~&8ZiW>j_c_Iao{w zm8>mR+RCuHw1(BinpE{*`Cnu?Me*i9v0yDN(m*4b|Hg7}Z1w*MYXn=6URku#4>PQ| zUAk#D+oG&$v_ThNV&laMwzYaYtBVzkTD`s1i?WLEjIQzO2J3h^B4n2W0q^>MpLsCT z^*<>%(d=Tqju0hP9Mu*!ZHX^fS@Lvur$^=gqG< z2s%&R0;`8_gXObOKmG$NYLWH3%le5`p?ju+0Iti0c~c2So80eZ-^D@mR`OR`__qpCNLb`zmWd~6enW$&@P z*XrWZ=wHGrxX|)3%g14*`^oYNSeMv=|Fm`yHv3Bk%bQZAf=OOY&RCEC#wy_~e(Fv~ z?fMTazY@fYOIkm%>{76#viwky>`vwZ+Q!Ay|IPtzMM5E#w7Wuo3^?@MY{e|APuB$wq#7M=?0T^eW2& zzp5-NO09j(=J|K5UU|c&-38149qTVv{Ck!^fHl89h2?hu=3n5jepuG1ePM0bpV37G zFTvM1$njfP8GUE@7|g%GkNWX%EdQUaE>^{Uwf28z%Ga)Q7DxGp$fZ7<0&5;MhE;(k zmYc%5in64Z{E&Ye>vxIebjxjFRVc&SQCL?rkAMp9Xd^C#l~Grie}SI-P<$WDms{?y zNG`GB2U#9!c{r>BN5cFI=nIo{iRC}ea^3_RAy#lQKh)wWmi3icy2MJDV|kX1zZzCS zxiJ3%bNL~^d|3I+v-XX!=AXWGM*a(7t~@WG1a~4R!CiiY#|qwSZLxw&tSweX_glLt zE1w6fE>@2|3`<{O`4KOk@%ID&%6et=wCCWnD)=n63S4LT1sg9`#_O&9cdQD$WaIyZ z_3-g8g0+KYbA@32JeBtf>9neL*z|wL+I-)&@nV(t5v=qdTV1Sr?y>qlYky+n#fsl= zZP;I(MFcOy1J*&T#q*W5{~POI^*w&7*a_?Zzh=Mue@URUzwtvgJqgSHQ$PL}tR4zc zx_U%kw5O{m>+Vq&T_at=##hLT2a2#JaW!mZSj*~SWn2eV#p+sJEW4hyi?Zrm-|Avb zIeoX3D$v^MSqeyKV+FAaO1F9jtOBAoz9=hQN2`nFcPXs&ovkhoo9xQL`v1IGr(4uT z|GZe=ZhK+}tV^t(c?)RrybW~y^J3lahreF1+x_aF7wg{JS$apTtv?0UepK{@x;js` z^d_2LmbEdqu=d}vqFUN`vHa6u^7-e*`adt$nGOH?g8iQt>;Jr1Pt<*jORV5OFV@p+ zj}&EXs{g!L|8Fnc|9P<<2rLe9%+d41-@Q;r_H^CUm)j{O{^!Lyo$$|#b?-UipBL+6 zSRPs-|GZdVPB;AXV*Q^N>qTFv>mDLo4|e~&SpVn6`ro}!*Bp_qbI9MlKiAhj{%yoR zFV^(}{+}1?OdQ>T{~vv^zJ6Kb;E%!f%LZQk&~3jsw|`##ySI)Wy{PIfmEZj0>~|*y zZFzS6+!mL8QvR-1bKCT(bMv%Xmjz!R>^$4}c-BoR)6To>gI_}*KJmi(tM6Mqro#INH(q$p-YW{feEsR=ThIUg=ejjI zFGzT~a>a2kzF2%tkIN60NKDvMEK+R!h0TH+oc7Be>|13?pB-+u8Xs5hzHV~=Qc*@V4gP7k{JF_~~C%NU!_J^fHwnFa5zCKlD1U;k4T8 zlhcEJliTm?Q2)!}ecBFhTYGxXYd&6>S)#^`4S$=tzxESj&FQyxHd%J%wAWWXFr;IX zw>sYPMA;7qmCvtV$5~x{@166S)>^djjlGN4uNf2^RIzdurtKd;ZeCHP*@q}~$jVdgIgmNxAc z1bYPeQh)`)fhO%%gkus)nl`s09F?%_R)o@~P{QKd2=%%Rp{!YQ8$#FH5l%}eZ@S%% za8kmW+Yu_7QxaA#L>RUZp|UAhh%o35gwl5)R563^KuB7IuvtPi<19khAR&7ZLJhM~ z!uUH8lJ7)FHnBT{1B2(At)g0{+Fe9%zl-R(cM)C3?2s_~ZiLjk5$c)TyAc|=2nQrw zXi{8+y%H9>2=&cA3G?qkXm<}nidk?ELfX9u$0Rf|ZSF-lDq-2Z2&tw}!s7c7dfkW6 z#4NcFp{qeSEuop|W)MzFSYr@cm{Sr~E=Cx(7@?IZSd1`e2}0>52oW=Q2}06Rgv}D# z7-uQM1_{|q5z@^@3FGfaNWLGTor&F#Q1tgsy84PD_|(x~*aUPB#yWa?B~w4Abu^ zXr?I;%`(BKp{vbc(QLC;lxv)4pleK~=vuQ8GUL~hZSq>Oooixi(XTUGMR}&$vrxX7 zCYon%d6Hq+(> zqL02n^s*O-UT6v>EMAY$Ydyjuvt&I&*9{1#CER7YZ9q6FVa)~v*PN2DawEd9jR^Oe zf{h4+HU-O=GMj?kgT@Trgpl+i9-BAevBWqpB5aV5{UXBsW}}4hFCiqqgs{xSUP7q4 z8DW=%hfKB22-_vh-Hh*ikC~KL5cWz~_zJ=kW}k%l zTM*i9K`1Z_wjiW!MK~s5wP~{z;i!aVTM^cnLJ5msMdF!m_s!c9}v6i+3UP+J*40S+WbE>pKXi zCA@FCy@PO4!kTvwJ~XE!tb7+?*t-b3O~JbegWf|Z{T{*|Gx$A(r1udvOW0?e_YpQo z$bKJTzu72Z{09ihA0Qksu@4Zceu%J3!XZ=bLxk-T=6;B9#O#nT`y+(Zj}SgLxgQ}k z*o|;N!j~pxH^N>C3wI-YZT3l+|1m_8=US@U3aH2jQrMWqS~gnL-JR z_agM#i|~V4vKOK2K7`W}j+<`#5Kc;1vk&2fIVEA`CkVqnLHNZKe1b4&KSJsK2)~)Z z`w@~pMc6FilyN>q*dQVMQ-nXvMhW8&AS53^IBjAF5UL(T*d^htsdf-yyM(z15rSri zgxQA>QV$^{nA}4M4Gtq5kPtR0hY|KlSa=wrxY;LR{t<+BM-Uvd;0Qw6X9&k6lr(KV zLpUm7*=Go)O`(LvpA+i!IYL>p8P~LR=0^y{DHD4f9G^Zr2{1RcA@v)CdM5W9ga+Rt9FTCKN%6ZrRIT>vGeC z4ZqxT@`w7{J{h^~k zDHQcK9Zo@g%o0&wb6nKVbo(8;+&nD0!kiLaY5M&E^*05g0Ven-G|&u&Owwt!^-n53 z*f^&VHb}@mjWE<~lra8`+Ij|In2DW1sCrgyl`z6oJBzSg!rZe6nPvyVy|Y85?@bMH z;J7z8#QX_j9>B~pDM9SL*k)l6VVv0~VSWgqT?ip&7K9Me5)kHAMwn>YBp@7>uq*)~ z+Z0MzoQTjXG1Q~il%n&gWbS*fA0PbMmHn45E!JQ~+nqUODlDA!^G6xyCAR$O;s;Oe zNPGL^!PWL2dan2V{VzFFs?uW#Pu;n%U(M!SUzyf^(UJPAr#V@ zGE70c9E2S6zJ!&<5KdDvXP0hagh9m-)`StRHm4*cB_RwehLCFtiXm)}P`Wt6wPtW} zgz*l-W(jkRlY~&U1VVNaLY~`{!chsmsw1p1OR6I*u8we8!qcW(4TP>W5Z2T{SZhv6I4NORO@!x6 zK~02}H4#cDBRp>gCnF3>M%XN2y>ZS*NID-O`+S6rW}}1+5|V2nyl7&z5XRR+*d<}J zsa6}IYHftMwGm!1J0xtEkXi>}tI4f{FuM-I0SVhoN?n8obrBZUMR?upldxApyLt$3 zng#U`=GQ|wCSiwZb3tfe@GWzfXs0O@y=^*N2<Y10HDtqH=iCJ5h}LJ3DD^lFN5%q(e&u(&D0X$e1= zZp{$7HbYp`4B@yrCE=umVa*Xvn1bdAE1M&fZh`QN8QcP4Pz!|35`HsION6AB2-z(W zPMM7oHb_Wrh46=owL%!*3SpOo)23Q$gsQC(=C%&?2%Qa?w_1k=nC((hBWxN$y(F?% zVt8!7ivq80{^HLKiypYI_A{Gryt`YY{hwD@d26GMJ-U8U`q_Ca?kU-R_-m&&ZGNqw z)nk!jzh_lHbm8}vzTaPV&z#1u41B|6N7ytDkS`~Qlr)NNkVZiZ(-6XDpM<><+OLRr(TEkf6}2y5CR zlsBg&oRl!E9YRG@&<K-%MzDtW&!onK*nyRM<)q0q%O*5A=9)IDUDs}Krs;(ynx)nd^^S5vmdlA8ya*EZ5)FD^xP% zRnC+e7^>-eM?zlmzJqDP7k&9Gl$!8}w6OPwR!yCLp;|ISt*%(#ct~h+vEb+HmyHaa z2nOFkbd%iL@p9~b&6`0@IM<3kCF zJpJA^DO54+@&y&8RP9Dy1`}d4Vw4l8wS)?J(?N2bc)pqK{^}$B5$aaBCOly4az$9b z(ejEpkR5Wv)tB4uSfmUpPha8v%60zeNwLNg_=*oTCT5bSgkB6^_PDLVA$giDQ<(|g z7=0HkW&hw^`)8<)KLO;kUhNHg-nFk`;P>yMn^jq_OU+bid)~1PI3YhLduGlI{t{f) zm1gd>q59#s`I-r@d48F<&mqOHA2X-V^@RB=XBGTz&?}CDXZYpjh3*Nzc-Yo_oTpuo zAL?ZLQ$26qn-WSi?YoB(gKgK}l^?q0e)DO~ggWNv^`YqsH7_x!roY`yt#7I(C$u%M zG)M^NojL1YbWmV5-K0L%r_FT9R?i8QC2*~=KFX?}{(pw+DXZ~6Hs^j@|7okqCH_%> zXV8>Rzg+*Sob?Hj=d7cC^ZqwtRe^O@)9;m>^eY{B-fFC!!24FyXD{Wi4^Uiawe?oh zul%>L+6JrXxA0p6T^l`(g`m$frg>5zu*o{I@8~Owyz51)saN#>PP$&QS~;yYH$J8Z@3h{MT6!*IlEH3;8f z9Y3>LO|%`0_a4 zNgZ$@VO^)KR+n%`tLej`@~a1qDZq8sY8MdB@DzTKuc9vmy@7^R_k3v=fj;&#Fo6&v z|GZC!T?y+7TgL{3zqJJyvswz;KC2bCT0^u?td@kvzd$3Pq0m**`dv);fYnOrGncAO zD$r2qDs8pKgw>t8%2=%l;g`@f$>JYfZA$oM>&M4fy$RP0?QSyG+^J~OHYZ$(IisPd zWVO5&)=`s3A9+<}v_#?`3p&qg+Ir)kL8@Z4)@XZ3pgB?1Y7xTmFBZ{9XO*8;*H8i) z|LRt2L%4hV6N36v%W8m@Tvq~h;bb(`R3DV@PGXI#*0cQDf}YBmtCiKbRRpg06jl(L zqBRe0uv!`#|Mb=Nft#$BuFu@cu|2rOifwJ;4%oL^O%qfFcLe&{3tds`cPZh`R%>sy zPH2m**1>9>(Uw@Pqt&`leqb4*X5*z+yo~U0P#<)%T35pQkhLabXEd$KZeRrS{jW2}qr^%~cMa80ZAuv$+vePm4K2YMo^b-lo7Dx)#%Z5_32v@d83^=H!6fIc9X zu*R^j)%p^itw^qZR_jOj8Z-^z2X9+b?rrX5h32QEBp5$09Mp)mFqw$|%(@r3)Z`sjxwbdpP?uVwKzQ(4Vr1oEK z#rUVlvvH_q6VI`UC!^J{T71Wxf_4_@%C~+~2`AvEIiU}e^UwRjx2IuUy7?%Z>EIa& z>i=7;n1lHo7!2my#4`vl0waO$W=cF0XxGbxZ@1bk!ur-44b4KE_G-fVjvfueooJfW zvw^l{_4wUNtMSjZqPo(x8D2y9MjX|Zy0!8za4opmYR3A_L7Q*2#nx{wnm#F_F2CRU zT}Su=G+hs%sWK`%?|dshXdUwr^;KT#-iNH?Ji;Zd_OSK49<7wsR#@!@v?MeQ!y{I^ zk?=cU8h8|qf8O?cH%#y51)i{uHzO#qTE5b1+LBA7sg(s*n@_lm)mEXYB?~}Vt37G` zv~}wbORME;te;kw@>AuX_WZcj-HxH!sIX^j;)PaIg0)s#UY`Kh_||4=gM@3U>DHQ)H89ugXqZqV? zg0_U)fet{wcQXbbeZWU@aI)LBqfUgqMMbz;bXu&}Z6p8eRm>Cg^Xe5eR}0X#Iy^H~1Lr0iOVUfx??$ zJ9rCh0xyD>z-I6=7!fjEE>0Mb`8;8*^ZS4{6>S*Wt#t6n08x-lVYfUwf$2cs z>Y@jYcR@X%le50?N2ldWK~0csf~g5rDpx0XkoFw{hrto>nMqAeXjJBVft5PaAz7pv_%3^UHxYaNV2R0)739j>b9)>*%W|5gm7RygdjGgU`U{Kqpx}<=hJl z(6gJK)$|;u$1Xi)=@hFk;L$@S50$1~6mu~xDs>%I&XFXSJMXC|3G-+cpgpSm900B!^~0XE^{-gbU#zzlCnWnLk{2B6clPR|D1 z2Xw?60lufOA3+@|s7JsMTnr?EDnJiTdXUyvC%pl7kw)MB)CN>zHt4Wi1L%O93^LH$ zg57lB?fS;Ng%qZf@^>U`O~ea?*8zP)#ZsW}O`8C2AbcIriE0iQ3r2%(pc!ZZ%96ee z_?b$LQ95`QxEjm`lYtIkQ^7PaIDuVe2!RnGg@n4>1%Xc5xj-lBUO)%s-@zZ?PjDKX z0Y88r!Ev*>SwfY(2M9h09s8-hllHh7=7 zi{Vtz7&HM*!EbcTAD}w%bLh+qn0flXi&Nltpw~FV@p};7hu;pM^JjZ}51{L*>>I+} zxP7!rxV-yt!Y={6gL(ig0I%b77rr`gxRwV*fX1AZd$qu?=60G5IKfDUas)a}AY&qV9N zTA=5iiRdRN{AchB_#JEmb?F>^&xam)_5zi!j=7dPEYdchR?h|3fqvj}&<<1r=YcAq zDo6l7Q^*0Jr-@bIE1;GtJQL)AML<2Srv|n9S?~lX0IR@i@YiT@RNqIfRHMH{{|P}) z1oMGT{DVMUa3Qz|)C47f4(~dw7X!tC&e=MYzXH~SjbIbF8>lixwRPCftMwWup=c%! zc4<%slm*j4D-Z#-K-@R(CoY<~OM%iu?Vpz%RM0L2}K z4*`|KTpHz_q;@0desm$ChJnfAz5f~vYo&e)_5)2strm^>$3Qnitss3#ta??ebPDJJ zx`Emt*(^&-sF$o!)J|3pXcRS~>NJgF@%0DN5?%@CX@o0-8ek268j$MXD#98d#gzxr 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 Dm(Fpv delta 55222 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 diff --git a/package.json b/package.json index 5b1ccf9..8b8cbfa 100644 --- a/package.json +++ b/package.json @@ -76,15 +76,20 @@ "test": "npm run test:typecheck && npm run test:unit", "test:unit": "NODE_OPTIONS=--experimental-vm-modules vitest run ./src", "test:typecheck": "vitest typecheck --config ./vitest.type.config.ts --run", + "test:coverage": "npm test -- --reporter verbose --coverage", "test:e2e": "run-s test:e2e:*", - "test:e2e:node": "npm run -w example-node test", + "test:e2e:node": "cd playground/node && node --test", "test:e2e:deno": "cd playground/deno && deno task test", - "test:e2e:bun": "npm run -w example-bun test", - "test:coverage": "npm test -- --reporter verbose --coverage", - "play:browser": "npm run -w example-browser dev", - "play:node": "npm run -w example-node dev", + "test:e2e:bun": "cd playground/bun && npm run test", + "setup": "run-s setup:*", + "setup:browser": "cd playground/browser && bun install", + "setup:node": "cd playground/node && bun install", + "setup:deno": "cd playground/deno && deno cache --reload ./main.ts", + "setup:bun": "cd playground/bun && bun install", + "play:browser": "cd playground/browser && npm run dev", + "play:node": "cd playground/node && npm run dev", "play:deno": "cd playground/deno && deno run --allow-net main.ts", - "play:bun": "npm run -w example-bun dev" + "play:bun": "cd playground/bun && npm run dev" }, "lint-staged": { "*.{js,ts,jsx,tsx,json,jsonc}": [ @@ -109,12 +114,10 @@ "npm-run-all": "^4.1.5", "miniflare": "^3.20231016.0", "supertest": "^6.3.3", + "pkg-types": "^1.0.2", "typescript": "^5.2.2", "unbuild": "^2.0.0", "vitest": "^0.34.6", "vitest-environment-miniflare": "^2.14.1" - }, - "workspaces": [ - "playground/*" - ] + } } diff --git a/playground/deno/deno.lock b/playground/deno/deno.lock deleted file mode 100644 index 81cd7c3..0000000 --- a/playground/deno/deno.lock +++ /dev/null @@ -1,39 +0,0 @@ -{ - "version": "3", - "remote": { - "https://deno.land/std@0.204.0/assert/_constants.ts": "8a9da298c26750b28b326b297316cdde860bc237533b07e1337c021379e6b2a9", - "https://deno.land/std@0.204.0/assert/_diff.ts": "58e1461cc61d8eb1eacbf2a010932bf6a05b79344b02ca38095f9b805795dc48", - "https://deno.land/std@0.204.0/assert/_format.ts": "a69126e8a469009adf4cf2a50af889aca364c349797e63174884a52ff75cf4c7", - "https://deno.land/std@0.204.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", - "https://deno.land/std@0.204.0/assert/assert_almost_equals.ts": "e15ca1f34d0d5e0afae63b3f5d975cbd18335a132e42b0c747d282f62ad2cd6c", - "https://deno.land/std@0.204.0/assert/assert_array_includes.ts": "6856d7f2c3544bc6e62fb4646dfefa3d1df5ff14744d1bca19f0cbaf3b0d66c9", - "https://deno.land/std@0.204.0/assert/assert_equals.ts": "d8ec8a22447fbaf2fc9d7c3ed2e66790fdb74beae3e482855d75782218d68227", - "https://deno.land/std@0.204.0/assert/assert_exists.ts": "407cb6b9fb23a835cd8d5ad804e2e2edbbbf3870e322d53f79e1c7a512e2efd7", - "https://deno.land/std@0.204.0/assert/assert_false.ts": "0ccbcaae910f52c857192ff16ea08bda40fdc79de80846c206bfc061e8c851c6", - "https://deno.land/std@0.204.0/assert/assert_greater.ts": "ae2158a2d19313bf675bf7251d31c6dc52973edb12ac64ac8fc7064152af3e63", - "https://deno.land/std@0.204.0/assert/assert_greater_or_equal.ts": "1439da5ebbe20855446cac50097ac78b9742abe8e9a43e7de1ce1426d556e89c", - "https://deno.land/std@0.204.0/assert/assert_instance_of.ts": "3aedb3d8186e120812d2b3a5dea66a6e42bf8c57a8bd927645770bd21eea554c", - "https://deno.land/std@0.204.0/assert/assert_is_error.ts": "c21113094a51a296ffaf036767d616a78a2ae5f9f7bbd464cd0197476498b94b", - "https://deno.land/std@0.204.0/assert/assert_less.ts": "aec695db57db42ec3e2b62e97e1e93db0063f5a6ec133326cc290ff4b71b47e4", - "https://deno.land/std@0.204.0/assert/assert_less_or_equal.ts": "5fa8b6a3ffa20fd0a05032fe7257bf985d207b85685fdbcd23651b70f928c848", - "https://deno.land/std@0.204.0/assert/assert_match.ts": "c4083f80600bc190309903c95e397a7c9257ff8b5ae5c7ef91e834704e672e9b", - "https://deno.land/std@0.204.0/assert/assert_not_equals.ts": "9f1acab95bd1f5fc9a1b17b8027d894509a745d91bac1718fdab51dc76831754", - "https://deno.land/std@0.204.0/assert/assert_not_instance_of.ts": "0c14d3dfd9ab7a5276ed8ed0b18c703d79a3d106102077ec437bfe7ed912bd22", - "https://deno.land/std@0.204.0/assert/assert_not_match.ts": "3796a5b0c57a1ce6c1c57883dd4286be13a26f715ea662318ab43a8491a13ab0", - "https://deno.land/std@0.204.0/assert/assert_not_strict_equals.ts": "ca6c6d645e95fbc873d25320efeb8c4c6089a9a5e09f92d7c1c4b6e935c2a6ad", - "https://deno.land/std@0.204.0/assert/assert_object_match.ts": "d8fc2867cfd92eeacf9cea621e10336b666de1874a6767b5ec48988838370b54", - "https://deno.land/std@0.204.0/assert/assert_rejects.ts": "45c59724de2701e3b1f67c391d6c71c392363635aad3f68a1b3408f9efca0057", - "https://deno.land/std@0.204.0/assert/assert_strict_equals.ts": "b1f538a7ea5f8348aeca261d4f9ca603127c665e0f2bbfeb91fa272787c87265", - "https://deno.land/std@0.204.0/assert/assert_string_includes.ts": "b821d39ebf5cb0200a348863c86d8c4c4b398e02012ce74ad15666fc4b631b0c", - "https://deno.land/std@0.204.0/assert/assert_throws.ts": "63784e951475cb7bdfd59878cd25a0931e18f6dc32a6077c454b2cd94f4f4bcd", - "https://deno.land/std@0.204.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", - "https://deno.land/std@0.204.0/assert/equal.ts": "9f1a46d5993966d2596c44e5858eec821859b45f783a5ee2f7a695dfc12d8ece", - "https://deno.land/std@0.204.0/assert/fail.ts": "c36353d7ae6e1f7933d45f8ea51e358c8c4b67d7e7502028598fe1fea062e278", - "https://deno.land/std@0.204.0/assert/mod.ts": "37c49a26aae2b254bbe25723434dc28cd7532e444cf0b481a97c045d110ec085", - "https://deno.land/std@0.204.0/assert/unimplemented.ts": "d56fbeecb1f108331a380f72e3e010a1f161baa6956fd0f7cf3e095ae1a4c75a", - "https://deno.land/std@0.204.0/assert/unreachable.ts": "4600dc0baf7d9c15a7f7d234f00c23bca8f3eba8b140286aaca7aa998cf9a536", - "https://deno.land/std@0.204.0/fmt/colors.ts": "c51c4642678eb690dcf5ffee5918b675bf01a33fba82acf303701ae1a4f8c8d9", - "https://esm.sh/@intlify/utils@0.10.0": "0fe85fa01c25d7db7f11169ff8988961fcdd7e336b40456647495cfcc3923837", - "https://esm.sh/v133/@intlify/utils@0.10.0/denonext/utils.mjs": "302b975d6ff52aa5bc2932463f1bf65e54b18d26d3ca486f13813bcd13baae31" - } -} diff --git a/playground/deno/main.ts b/playground/deno/main.ts index c4d90eb..8b01aec 100644 --- a/playground/deno/main.ts +++ b/playground/deno/main.ts @@ -1,11 +1,11 @@ // @ts-ignore: this is example -import { getHeaderLanguages } from "@intlify/utils"; +import { getHeaderLanguages } from '@intlify/utils' -const port = 8125; +const port = 8125 Deno.serve({ port, }, (req: Request) => { - const languages = getHeaderLanguages(req); - return new Response(`detect accpect-language: ${languages}`); -}); -console.log(`server listening on ${port}`); + const languages = getHeaderLanguages(req) + return new Response(`detect accpect-language: ${languages}`) +}) +console.log(`server listening on ${port}`) diff --git a/playground/node/package.json b/playground/node/package.json index 9f5e43e..d7fc08b 100644 --- a/playground/node/package.json +++ b/playground/node/package.json @@ -9,9 +9,12 @@ "dependencies": { "@intlify/utils": "npm:@intlify/utils-edge@latest" }, + "peerDependencies": { + "typescript": "^5.2.2" + }, "devDependencies": { "ofetch": "^1.3.3", - "@types/node": "^20.6.0", - "typescript": "^5.2.2" + "bun-types": "latest", + "@types/node": "^20.6.0" } } diff --git a/scripts/e2e.sh b/scripts/e2e.sh new file mode 100755 index 0000000..483e73e --- /dev/null +++ b/scripts/e2e.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e + +# Pack packages +npm pack + +# Replace deps +bun run ./scripts/replaceDeps.ts + +# show the diff of deps +git diff + +# setup playground/* for e2e +npm run setup + +# just do e2e! +npm run test:e2e diff --git a/scripts/replaceDeps.ts b/scripts/replaceDeps.ts new file mode 100644 index 0000000..e4aa724 --- /dev/null +++ b/scripts/replaceDeps.ts @@ -0,0 +1,65 @@ +import { constants as FS_CONSTANTS, promises as fs } from 'node:fs' +import { resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { readPackageJSON, writePackageJSON } from 'pkg-types' + +const __dirname = fileURLToPath(new URL('.', import.meta.url)) + +export async function isExists(path: string) { + try { + await fs.access(path, FS_CONSTANTS.F_OK) + return true + } catch { + return false + } +} + +type Platform = 'browser' | 'node' | 'deno' | 'bun' + +async function replaceNodePlatform(platform: 'node' | 'bun', playgroundPath: string) { + const utilsPath = resolve(__dirname, '..') + const utilsPkg = await readPackageJSON(resolve(utilsPath, 'package.json')) + const utilsTgzPath = resolve(utilsPath, `intlify-utils-${utilsPkg.version}.tgz`) + if (!await isExists(utilsTgzPath)) { + return false + } + const targetPath = resolve(playgroundPath, platform, 'package.json') + const platformPkg = await readPackageJSON(targetPath) + platformPkg.dependencies![`@intlify/utils`] = `file:${utilsTgzPath}` + await writePackageJSON(targetPath, platformPkg) + return true +} + +async function replaceDenoPlatform(playgroundPath: string) { + const denoConfigPath = resolve(playgroundPath, 'deno', 'deno.jsonc') + const denoConfig = JSON.parse(await fs.readFile(denoConfigPath, 'utf-8')) as { + imports: Record + } + denoConfig['imports']['@intlify/utils'] = '../../src/index.ts' + denoConfig['imports']['cookie-es'] = 'npm:cookie-es@1.0.0' + + await fs.writeFile(denoConfigPath, JSON.stringify(denoConfig), 'utf-8') + return true +} + +async function main() { + const playgroundPath = resolve(__dirname, '../playground') + for (const platform of (await fs.readdir(playgroundPath)) as Platform[]) { + if (platform === 'node' || platform === 'bun') { + if (!await replaceNodePlatform(platform, playgroundPath)) { + console.error(`cannot replace '@intlify/utils' dependency on ${platform}`) + } + } else if (platform === 'deno') { + if (!await replaceDenoPlatform(playgroundPath)) { + console.error(`cannot replace '@intlify/utils' dependency on ${platform}`) + } + } else { // for browser + // TODO: + } + } +} + +main().catch((err) => { + console.error(err) + process.exit(1) +})