From 98df494b7652d672d085dfdc461bd31e31630eb5 Mon Sep 17 00:00:00 2001 From: nvms Date: Wed, 26 Mar 2025 16:17:32 -0400 Subject: [PATCH] add tests --- packages/ms/bun.lockb | Bin 76713 -> 108898 bytes packages/ms/package.json | 4 +- packages/ms/src/index.test.ts | 157 ++++++++++++++++++++++++++++++++++ packages/ms/vitest.config.ts | 7 ++ 4 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 packages/ms/src/index.test.ts create mode 100644 packages/ms/vitest.config.ts diff --git a/packages/ms/bun.lockb b/packages/ms/bun.lockb index 415b550801b6dd46b485cfc1bf491dfe8fb13e11..45689ce619c0450e0d44449e7e08a2cfbfb7bb5b 100755 GIT binary patch delta 31529 zcmeIb2UHYIw>COG49FlzR0c!|0xAjuBA^IjR+6A1W+f>|P70<0BVxo-$DDo5`kHgj zC@SWhF=EaM{%3bj1HSrw=bUxF``>lfI=$A@yY}8yyLQE{?t!Y+S7i?_Xial+STJC6 z=HtyC$@@~;mc|WIbbhL8cscD_+qZ#7Qcj&It9I|gDo#R|6_?+=w$iGWz)2*&$*E}x zjS|uZ$EHW8rAs955U09ClAQxu74$BsF=$h%L?Q=Giyau7I3P)K4srwVlR$Mr-83YU znxM(y=`qoe9RjL>pAD)98lRMrO!6%xS3 z3`mO}9G#e+mYkH99+{RVaYrihv>~VtXkvI`Qf!n&5}g*25gQ*RsgGhBL0$utYD5ZZ z0{RACll&Ga@y9`HfNlY$cnd+PMkj$%yv(W+B_AH+Vz( zr=VoulA7NSN*S#MrFgSIDWg$peY{%VUCp-xrSz#u%J}$uF3Dg2q1!@jD zR4oq&H3Q!ov^J*25^69xHZ>gGT%t@EO3@?|O%wyQoQ*!47&{j%w?K7KEz~*hf|5Pz#Ex;%%B=M; zKnV}n37#gzCdMX*r==~2oIKC47ZMhL(kPgxmPghVGVTUS20PUg;@g0td9%N%>1*iG zKeH#+7y48-DCM^Wdg_1K=?;Q{BcPPB}vXm%!*8kivETOdeEmP{kfC=SDjPrl>e?X zD&b5;Z$xLK&iJo7VHHHCs{DXRh?>0t?otzp^TePe_?;+`P#=lNl1LVL2vt1`l;QVo)-8T}{Pae-1pg>2Xl9my{Tt9-9y?Nr+8|jdUE4_%CNpC9GjC z_%Ele5u|35WjI{f#iO!i#n?+LU>|ULU?*)%wu#7YQbF{nV)8D zquYK$y~M>wXQZM&d-}1Vn)W(50YbZF2Cy}nLDH{5?3-pghksSs>Zu~DqLSGlt=iJv zK`c+pUfB*=Pz{dhD)f;oHH`ZsT3r8V$N$+Ti`` z3_rH0gXyY>SnmJ}d-IJW;+nkC@|h4lU9+CPvPTPzLe-mTotGBuU~wIjW^MOhrtNX` z^H;;@xKg)5@+bkOC*F;-o=WlWxQ|J?S+Z~Pww)envBryP6KyW3;m zhdlzUnjdLve)6-b#MXK1wnl?Ggy!T{yQ0z0?ENMEb>8>dPZ(C~UT4oWhcoZ(IUVpb z!*_A~DYGx}AE%6#xZO7|IKF)A(aYPePVG=n7HiO6{w;Iov{9yGU*+EE9e%c;BtSc- z!R2MCMRA*Zr%mWkx^;!^@P3^vZEX%;naFZ=e6<_KnO1p!WKcVHQYY6cIR0h_{S__q zb5rNly`9@pPya!YOT!Ql}TldHrHEv`XLj!Vv3>eZcYA~)b95_FPZjj zE2%_+DJEOO@(n#Shl6vcScaPs^8L-yK|{F#6s;%$E{p()A!W^cedL@5%QN$lFM&^( z$6!9h(8KT|ILt`DJ7lOY6Egm_2wrj-awL~; z0Otcv%8K+oq$OIcz}QFbT160Yl+TdU&^cbWaev|59Ci>k% z2&Dgr>n+!XFyI#hzWTiI_q-ZlrlpSktG5}D{v$6Vxh{nN$f~Ja7YnjqvYK9tm;EE6 zp0?gh#H8WzYfcaUnVxE0uMwWezx$d2>92MV8pw4a{D-UX3eS^YVovwsWxsgJ=QI;B zf6wVAq`%jS9oGB5SmiAwK>826sH@+j!YeFzesOiW884$gBtx~>VZ;l)r^da3|o8{^GNc&i_0+9WdOsATUw3!w21DR;W@<0w*u>ueS zYo?>`BkgI;{6MBzvpkTq)~rC^M{ZyvbZg|R=OGM%b;A88X?mIpG>mK7NKXwI>vDVH99B?!?>slnTEvJ(mg4)gc` zJ62%iBRy%ybc}tZ8urW&#LJ%LfsC=|=lE;(!r)NXNnQ0E&kT({q-k|oo{5iqn_8&N zS6fy+AxafKzy087X2z6m>>-!c7dTDgq`vi8L3JPbQV6@1JNN}06-}E@?(QHK6vfue z0oRHZ8hc3#9hi=(k6e!THEKp`5D$54aFkaSo>QthA?H2de4)cr4mrykGCzfnJg}i) zUCxS7?-Luc0)>y}DF~afLVYi(h9mPc^N|j7WCeK6-*;3mHOPXzfs-&l@y{P=iWAE- z_mS_1u)+Z|y!+7vB;%_k8XP^_kO0YNf}_5LMFX0%5F9m;j1{4a>N_(X3m?rkh~10n zS$JtKLZ}BH`cf|I;({rIm;HrMA3mgkWk@U^ibp7%4;3OLXdN13Ec3E_grfP-CxrU( zp-`-@gwR%mgcOFD00mhxLV^dU5DKFdax07mp+>2H_6J8#5uvtsfTMQ7f(3?jcVH*Mhf_k1E&#j@lc; z4%`QDM?vp$(Mkmrhq+T z56%0;@v*Go02s0b%l*J1W1)#O=Yc~vH};ZWMuzL2F-@=is9`6v8%a zvV)iAeuUcbAz4ezNPH*&AwfH>Ty_ni0A6bgKZO*75E9~TKuAdY2_Yd~tJb0{51}AF z?KOndR?whoD+mc`HzOq2`&2ITX)C74Lr6$*9w9&8o;lh_NE?BWV0lBi>=Qz~J!!M{ ztiahv9^YPEol-ZR4UXywwTbpU3r=WJLv%SCtUoHap5Wk-x(yeqIiaoIgQF!3|287^ z?#K#UedHM(g#>73RQmCbEU&ST)WnY!fTZ~`9XB88N%2We9mI{1)ds5=6OetMGfZ{a( z=pw2KpqP9*7YV+>(uDvoK;ig{C^?0i;}c*S<*)w^r3`$9=scwYwN&#&^#L?Ae+5(i zT|_DSJpg61A0V>_0J?~h{4g=NDpQVmw>4Fg_5?twP6BihCHZM$ zaQ!<<@y-I|)p>xf%9QLD0Tk~NKo?PxUlxZr0{lhP2zVl}{}-rwi2b_^Y0fB7JMHHUbEpsQEupQjJpU5#;0ZiyP{H zmH_Fj0J^LI%D@Jot1_i3w*x4?JwR7wO6lqW6z|`xZlDzwH+=u2RSjK4|L?4B)O|;s zga5CuZusKT;zm9G|KrQ2@(hFk*{{618Ku^bQs@64U2Kr;@(jd`{ssMyEVKUStDEx0 zjq;DH8gh0iK;wE9F}R3Q@BWXhZeWLB<KySm}) zyz**?=Jo$w-Td$Brt&K1|7WY4QvFiu#dI;f!2Z6PJ2a~;OVtXyuw3>y=<->~)9;s! z{dBz^%Fey={`&S<$l99sJ6lEt*U_$RlxZB>)Tzst^p1y;lrKV(S6=JqoSMMa2P%|J zliI$!J>izFrZJ~CdibQ1EB?;x`?SrRfRkyHY>aoAW_|d2(m*n+<)mv3Oi%b9?0U3s z-^k93{rlVvK5et{y^Fuz$(d|7+-h4&_%$JzbdxMI?#(CuM2 z`nEbhcjf8!J;%>kA70i#Va9UX^jXxrXvZgcuJLC7i*cW~eO}S0`26{PtWS_aIo9uS zZ2vx8JzVzXtt_bJefC*Fq4BKA+q>l6+M8}zC*SGL7~k^~ww-!8ta$E~H@iISI@`E< z+}qqo@}*mBy|?cNyszXP&57bAyPPIBR-Iqg{kY{{EnYr;a`1hQQ7hR39|O}73yN!v z3>^}-@1dKOvD|FOnY(e-KekA>4%4|d?A5RrPajEccJ`0WNn(1P6v|V3)4RV^zTKMB zu&rvq+gh(QYTT~>*|tZw+g?|%q_>H8Eo!3CGxOr`?(6L{E%ej1rqtQ`vaLzSMQpeYuxiGJGt#s)U_ec?>ug{%&>4-^iKJW=jox7HHI|Y zH2V7tv#kcttb$!1loZ732K73rn{DcAyI}L+nmazQeVr5me_t%9{bN~Z>AiyHMh^{H zY|>+$l;MXnUrun9L zmAsR)`+dS#X0V>JM~CCdI#aL6%u~nI{&KJ5-@#svcQj57n_=Ugm2&oL@}}2ycOBglKJuWUEv*eO>e(4COl^Q$m zda+s|3T0l%nc}zi2c8SiS=f_X=Dpjr_;TTdA=Oh6J{pWYb&Kf0@3##R0RU`3?Q6?|9v3)bpzo zx{V)isa@~0>yY>D`<9Gzts7xvrZTUSJYscKHrBC3<`-Kuu}r1yDl_c8YBwu{cN?t@ zn`Z|t{Jc@x=J}U>(fao;nwa#S@?_$tE;B|9tE$xad82miFGJ>i`SM`3V_DNS-F$BS zJz{0Sg$||Pt&UBOwqIAtJNl$4Ub2_fbw*?wIiG60Aol_1YI# z=jPHNBabSFEs*?Rjw4m~@q_kzIZg~CWj3ztT=Bg%Z6SXWJP^GJSNro&8j8!5TBS(6qZ3(~8$?c5S;=He+a2-)kE-Y*;wy zK@^+ZRiPX|r$up4y4CcyD?Ls>Pun;7uMKm)oc;N8@}!MV`_~#hwdu~47fNrp7}Rst zpn);I@mpT)%G-B%o7>wcS54QiW?LQ=SMtuZvUi^HUSEAK-+Mm7t4h?A7^iUal_}R# z9?f2*)X47Kk(oX%OdsAjaCwQ@gQLFY^G}-&t#)p{?@5=nK2>scyV~nMdQg{nhbokH zJomP(VmWg0!Y17{^Q0>#_G&o2bIs*hhr`ciPtQ0Wkv(+O=0T?(zkB8N@!Cv-QBeoy zXFo|e)nt!Z!%pMVJkqYvr!DcpLEqcOOZL9y;Ona<+=_VDE&V{1l=nHc^M`f|-5vk% zQ`4$NinIr{T*9|>`|zdMthG=0twk673>zdQ_r7^2Y15<3ABSspi>{f;Uc$R0DGN^Q zJd*n8XY%!*lLErBOY-KFc5UkZt^1+(Z#HGmTUgsa#7@aJXc=r$tvhuzrcLGqtG@%g z#SdH6sN=GqZJ+n8l+KZTG?fGh&;O?<~a8*#?JfH*w@K>8ZGHI-hN|= z*^}xgUwpjUVr|+>%M{6r_6zD9*fy-~?Wis@SYVhUpiXn$C%K-dFZh-j)Rw*Psh62! zdN_VmpUawhvs?eD7P<0Wui*h14t86|4$+!2Lf7y1>Y`@tt6Ls8w)=zErKOuZjnv-J z2MxS6B?7aEFyZd9_*y`@z8MLzMdox{&Iz`%@8*MR2+jH{oF*!Al1;2lw(b~M9 zFI(STp*(hC{Ebuhx9t!3)O}60Q)7-STrq6qw>j=nhRTPA2a1jsr4H3dRPC6&Iat-A zsP)u$xAwICQ7>Rp%EM0!Z}hDF_tCDEysJ~$JCCEQhkvZwc|orR56^@rIdmKt{jt;E z2QTN|mu_mB{qDoG2Fo%g_1itztZ8wG>CMu+Q=TnYtvB@jeR?RA zvdCRdH;z}`^LF9d`P}OlbKfnn@6pffuNp(FxC3?S^^y1MfBaLz*2K2O`HzdVjLW__ z9_cvs@{8#cFRr>`SUvxs3*PSGpmsJqqfcDoC5sF($T;!FrS3G3@5|cH?0Is_giD4u z8oX#&5GXNj{IKeaj2UC@Z60Ew^jQ*_v|^;w(Pw2B>K&N0Ze(-+n1~T=zDITAi>)om zhDGsP85x)DEa_}(V=?H%(oQStY8j*%pK-l2!n#?jcv;E2lH`NCoR5Bg+1mDKNY^^Y z^Nv;Rc$-G3h5w{J_sl%($6OKyBD{{E3Z z;!;ic!Wezb6EE4d5k;Lp+Xrvilb+MmFrxk27xSW|o+qkhT6SMypRNpyzPjq|rGvWd z24Af<;b!!q{GsFQc5MAFFSNhq5t1I$aLzHI&r7teV6nbv6;#$K<@?(aORn5(Ji=tr zw_Ck-%$lMWa04?6TL~p&peGkrdiyiY-#n$ZJs|7Jp3jP_wZ7bZ*hu{`Ses0WpED^e>$l+j^Wq09myYdi z;^VOW?ai4d!j$h@B{h53c;yn$D%p8`uf7_$vv=P9yLa@v$G(ZRb?;%|R&UDG;8#lm zUZrLBjhMt&F^zrx4<&d?H<{O+)r$*N=0-19c#hmMb!Cg~Qtc`?A6y7*+pYcZ9IwIh zxhF~{wTNEqa(hbF!NeHZiTW-jj^XErKHlV_G&}sa(&sU6SfWk8pE;JBh2dj6E{%JA zZ{deAqwi}i{m}bcheJ}o*V_YsvMO}`?!A3vH^Xr$(n~) z$ri`;o%H;0|Fnd9Wu~o+HEd5Oj4jGkm@R8RV8h*7iRqH_Ed|5;4}Oix&BEaY4c7lS zlQk-H#n^)FCr4Lxd3i;Z!9Y)M^sIt86?7tTl4gWlHK=0deslsr^XA;>JuFa(`zTH-CFB>;;{otJ@=XRYnA96B+uL*75kqU+*{lLRh-dlPktghs-_tBdgxyr#kgjBlVM3 zUEUaA5-qb1sCIq)y?oxTjJNA1e#+)Op1f>Gdgj(2&gX{qaGSrwv|YlWlExkXYVz*2 z-Q1p^?oRuD^82>Jj^~PXpB-*^=ib>fTSmQF(?P!2@BPmu$<{6IeBQ+ymhy(1RCc(@ zg(+j5oJwZ5ZlK@p_VH$$28~TkJsC7|`kDrprONH^tyg|dc{Y9A%F~L$x+jhm&->ak z?{-=7okxAYJqT<$w|H!XU|2$bJkS3Pg=kxLeq1*v+jr-7J-%2ocZ=V)$n+YvPJ`PY zpWe@OXHlrjyu~dq8xNRv?`5y0C-z0fncGNrhnc>d_s()v*2tCqdva}$z+wE9A(N0{ z{3%}fCA(B`ctD|L^!mkbI*si-dFje(%Z|)l)5^MZYnvE<)xqJbi%u*HvmBAo+bH*T z&jC*LPFt>9n|nO|=)9hN0>s5BC z!_{p^hMSg~MQ3|#XjboY=>qL*OB~9EcKdcca71aJ0Z|@@#VYojh<$zPOHqlM-2X`JhHj8#U{_{YLDp&g1?6bPpTU#ogB9 zo$>bW$*q>m+H+~=BF@OT{eIBZe$X7^w_+VX+3-&I=f^qF&~rUXWVtZ zRQy!j@u&l~u$gwP>RgcHBA-VM4^Q;Yyj#hzZ)L;FS8X((EpI%#`4H_7 zrzOe5-rnh|X|yY}7TK3|WG?PEBb%?id^P7`YEZ)KfX;XN?%1>~S#{UyR*%rITC=U1 zE()Hs{gYdREqcv{af;Tbg8d$Q&z+_}E5=YiX8PZ1!`ZOaiVUhRnd5+~!4`FY?x=bq z&S>+xJQM=ZO3*FJpOs$}afYm$%kE1GBf=#kEXQ}yS* zDyd=KW8qGm0!R6J=Jt2%N{;tx9VDZ`M#GIcHg;XzO|mu z`CQ+~6OS|+@9cH0?SP2$p`9&$DV`-t7Ld$X3HH;qb@tWg73lr@rX6xY3cnF8X&no~~{?evWTf*|1*YWYu3gQ&TkKFe?9$z)6!7eymN7jPVJnysK)@MZ?8wk7Y-gZXYtOvSwo+`XuMHr zRtv5k!_gev9@x36s2XXf7)M-F$(@8RfidhMnfc5yFe`%g@d{irx@F^^R*`IJ9e zGN%7D=iIxQJ8RAv`m;sdFKw+xwc0evbN()s#)V-mD%tH&+3rbeH}_%d1C))vTSYtk z_*iA`_&M>D9BwTSzc_GT$G71xd(6MQ@W%EBA>lD0&O!YgWItjZx6aev*4}D~M#6J{ z+jh%&!@~PP$I6C>DL;1Tv8|cMqVCx_*V{MTuD9S=_9H#_c6zzayFS<4VsfHjdHpS+ z2Fek)O?;Qgl-C#f9X(sH^UbyCgD$!se-u8n4R2U@jQUkJJh@%j^w=`9yR}zrDll4Y zsA0Y(;Jp5?ONX&{y4jK=>B=Nj_%Fd*~M z*PK5+BJIN18PBhU4D?8Ok{O!au4wv$CZE-YsV4`N8-`ug*7af4W^o(s?!0NTw9IWP z{+p7kcd1wVeba6hCZ8<}oWAx$b>;rm?ep_A54v`;I{87dYU$>i+^(x{9~X^Xq*X(Y zH!Q4F0xKI{@xxzsD*k(t?DW8uD@L5!?@}j*as6f%H@6S0srZtAA+^@cshY!5!XN(_ z)YC0)`}1aF=k$upE68krwBMPYIXBEI*;NKrHoW-8sbfctKa8)L8nI$pzuD*F26)xz zU-SG=GxPnI?ln!i>GO>mvPHFaT&D6rG?{|c>8ae1hzrdpxX0Ga+(3-a65Z4o( zD%&-AXlfq*@zJyOEyEqJ?r-$rXU8?GqH}U<|Jhy@>-`$6J|1p z!IKkxd$0d^=KI4#8L~|49*ds{@8H5qV{m1|_K7!hk8hcD>tdJDFIwIB9@@wzp=8~M zub)2u>@_bhyrj;j{GZ!CFQ}S*Hzy|Wuex2GrVKlqwkGR-@vI5Go?M(UMGNm=yvNjb zA(ah33%oG1_oQPbFW*i*kn7t!aZ%>u$B}ilujj?>d10>g>f*LRWuaahGtM1(G~TWG z;|Af^rW#&1?PKtH`iSH2yx)8oqpk^>F*{eb`_1-zan39A$d^}JcR3R<$y>R7bMB>E zO{ZPiw6{litsV;_o(weH_Nu`PZ@aNx*S?vp?tbxU^;`3jH|%M0%{e~JthhgKSa^(z ze*i-EW!!|DSJGW0rzQ+54&l1n7k;*yJZ9gO0Zm)9DF}9+XmD<^d$P}MpS9h`Ty3*m zx?)xAYTKF~D%m$V_iX+T)ufC~Y3z2ag8j_)r@t#MzhoEhUE055Qs`>`xixmr+Hb3W zGTV85`@%jgVpbpCHsI%hJ3B8oJ@?~KuaeL1N#-uC+^$OeUYyG4AN=I?^}NZmdX5{) zCJ$052lZWvWrbUKkW1O^IjtM+a#C(QpZ>hW?&P)W16C`~mdRh+pU}~<8DkvOcG~P4 z@t1bWpU%&py3*BRD+(G-8JyrT4aQxjGn9BMpE z%VCbcg?FCq{O2{~10R+xI%uZZ*l^;;w(C|j9r6D1_!$;8>euf+y+wg6U==jD!? z4r3?5&Ft*Y#j^Y0GE?+e+b;fG9Lw(##_FZ&v5(*qSj(>9WgUH!Qv_7+@jnjQ-c z_2*L9lF%^bnXbn)yZLizETmf)dkStFxD3XHg>i#f58Q{aO}J+=dG|0bi-qGpl=(vOW^?+X93%AD&wl>gRMxRS$}v)p zt?%#8<+HEgJe7K^Pq;tF*y`{wZU*Bb!nm2N2kx`jCfrp_9vQ~XX5qNcVY_gj%M7E! zxOprV_xbD)?hBY%bQrggrQp7Zox*)FvmOw}En!)>FJ(mox@gibw9D9aeDsVNtH-=! z{J9luLJZnwoF01#ZY66Pi?#u`Al9E-&7OhF9IwX$2l;br*_=UWn_QFv+UfkXPmk#(_;XuWj|8+0xP9QZF?nJbn>|sFB_#TDJJ>F8 z9VY3qT1o!gF8m6Jz6Y)l+#Y6@jJ`KnkBvz7=k~Ev;JQ!IV~#2Q+yR!Ag1$FZkKG1$ zh}BO;-vc)})t@`Uu7iu2hVrHPbH~_(G?XtNQ`S zX*MS#j61{L;$Fx)4i4kavL(2mV_$JU&q9WTaYbx3?iU!B8OB{?J#fFoHsOAm$+N<^ zD=ZxMt85qU*O=kZFzz~w#r+05g!@fqHY|+0#Zqv;%}(KdhglB~-0!pc zBf_``EC=_8>^km`n9Im8u9!{0{V}_b`xDkw8OA+j`M5u0&v1XvT4slFFW4O1OIXL8 zFzzK=g8M7>75CRHWKODY*Y&r*QwttjC9Or7R2gGFCJ`Oo~6Ha>(r_nKj!g&A=Gb!(ImcQ}>?YOW*j$jR9D4_%%Q3%6 z-K2UPTMAN*W8XmZIo5e{H>m-~)_@ptOgg2T)QDp}L5w-J8N`HRI#atzt8**@qz1=! zgP3y6Xj(U^f@6a~%s6%!#GGU1`Q4;7IhG1y!Lb66S{$>P-c4GYV?#kKId)-s1pYx= zrYCO3ML!MeFzXrgKe)1LcfsMuzwF5PSf@d0Tf*o6#qqHtAjco3W+&svb3MdvQEr1C z0E6)ER29-NYjH!XLx@}r@$p7nzPXi5hhlA7v}{ZA{I0xNc2K3Q*%tZftHm)Kb7Kl= zeM=U^&PsdQu-Y?v>eaLrwmPu`HBd*yf9b&8f20pywoZfhOWYKua*h^4iiV4{&9t$O z)m1x}7M(CSIu(Dh3mFwGOlMGh?O;NavCC?A${p-I}TXPcD1$?ntu%7c4-(|P#w*)UUF)-?{-XCqa zCFU_)I?b7DfsgV&f+P_C!b9Y#COw6ik_VOI&>z;2_@SE85=Z>|i$@4kI^t1a{(6i% z#iw-b)%KpKWoTTbq@7y$R4t_U;y|_RnOcU{j=o@Mr z!eoTj(kKO=Q4}S>Wu=a1gfRV#OqaD{up*A32@n~RVbyHuytXw-nz9#kb%ztkyc=Ae#14NvVN_A;s#`g`(`fD*_C z`~iBC^aH5ZwFS`8l#&hz1Oe2;S_AKp_&x9e_y~LgT0!m$&{zH@fHOeWM zd{-cp`hGVcjCmI}Rz@Q<02m0w0I|RzAPxut(t#u(5f}kv0E2;4APpD>WC6p0Y#;|n z28IA5fq1|dpcyV6hyYfDPXQgw;b*jD1ZWCN0@8pXKr}EA$ON*0gGg`y*w2bi8yge1 zAIPPCjcb|%KehCs?*9sW4}df#KyAPRph4ap2m`3_p@2DH2$%sH09A}GU<_0PXo9E$ z$N>C1|9N9&S*43oP`zscWSvq=0dYzpOEmpZJd#sR6o;l7(ToAYMgVzAdWuWw6o4sE z10WmK0koaXFU6?|VJ*N1um!9D%ir7-vl3|?#Igab0qP>n0WY8#&=l|lJOFo~3E&1a z23!Fbz!_)+H~}<}8v+dg2cSMskAB~;i-0{~2T;GW1UdsDKrqk=2x4Q;x9~1O2qoiZ zi(=4+Kml+NSOu&E{sNW*%Yf;?B%l}2lP_#8LgRrbAQI>c^Z|MU;Xnk?59kjNPn|Oz zNCBu*4*+No!~g?<1b{lfI1u6yrZhANQUU7pGypPy(KHtfMIZ;r1hN6@`7}~UPBI!D zL}`T3Xc-A$4&a|=Fu^AbJT;vRnh#6`rU26b14((_6>;={UtARbhHefSAy0yT1U>&dl z*a-X$Yyq|cJAv)M4uI0`0(JxYfRn%p;5a~aehfGY9HCk{jKCp)8sQZ10Jsm_1MUKM zfZM<=;3jYbxDH$ct^!wp%fKbzB5(mH0?q^HfU`g$a0WOHJOW+-RG7`wD$fw0QalBo z0G0ri@;N{<3cm!XkD7DBKYDgW_!B_2^#OPfya8SV?|`?!M}VH&;xqg^cn-Yycql`# z6#4T5;VbADfW~YoC`JAT{8UrY{{U!VPz*{&X@Nk`a?v0?d+2$t4bZclp852=r$>zp zAel%-J4#vzP)1?~v;v`(2(3t{tp)`Tm=nn)hljk2#pJ@LDK_S%aOIX=^-?(PEE;L zgjyqR@u-w?>ay{Z7geITjbw#pFcOhQ*dWq#4WALR66PS%h!#t2n+ ze*>qCkkidBRA^`b=s=_8e`3+P8?T3%l-D+;L(M76`>Y8^^FnPzrdJ!Px>v2kuU1b# zu*8HqjEj?tEB`8?4~?O%C4TAt@wCDmt!JsMDfvfI?Hdlvs&FAk$mkDEMEi|5q7BEz z9Z4%%Pu!AR+_O~5p;4)4QJ?Lq?z8{8iD~w#4sR+dQS4;mUgqk}PUj#?7mUYW2g5Ht z%3k{%uUCe*&Oq{xE#2#O1F#PMXiJPm7yRWJ{2wX@=qenPqQrEuM zuim&)jCP|*2=fNbD5Mc52b1#2LEMI$->y`NOi?+o9`#ErAX?Q5ZN<0m!N;*zNcbz^bIdvQx##PCG_M(+^!#1}Wsm2o3oF^@Nv zu)sStnfV=aWqdTY%EvXg`GuzidKzyk#&8<8FDFgsC#~`f^J6kAH2fz!XxzT(?hBi_ zsjs@vp_8PgXT@hARf~n;jjQ>LJy?+@JvudwzWu!&)w6769j+zP;ECw2g!^e31H)61 z*RI0IO9wPhZm38^+0#rfK4L4Ts}=I|QSe8Y@v7o_I09OiELxxQQ@S=vUN##8U*sZH9S`D{0yxff3T&xpQE_ zTGxF|Wtgs9`KP?NLI24r!K!vo6Ao8s#4Y?g`c$R>kX`5#YHw->ep%G6TI4pV9 z-u{_V>RX`_4I>7jd*0i&Cvtexy-t8s6rziYOr+m$U(2P?JiVktkH5c zP@uK#V*8}Fs5`$xBOZ)Uw8TJJ>u9}aohnq~*$ECt^%`>%A1*a) zM&e-+TkK?goS%+0u1F*vC*k>KSf^?RA`dy(Z#hA24iNt-uD>UNi8Pjtt zdW;hodZk8f5N_c94izvm}^lbWI$@}si=xX;yDPlhIZnLhhNUF z(1^!)i2IaRXvBj)#GTA5G~!Vp!d~aqI_g!Z9@l0EFFtkuj42zxRLkbi6X1AN|PEdu8DaPmFhxI#@BV(E7&%wC#>4Pd>a;XxciJ1Qto?Q{tI5V zO+9w&hChMT3-uRkO1XxR(9&8wR3!9biS5uNgC2aYWLgrB7}NqTI&WV% zv@?-Ox$cnA^GrCQM3NoU=^ru7g0;7mvuIoeUO3JdX|lyyliTjO6vE<^-+ z9f0k02j+W2;eNzHuu#-}&H0WW78Ogmk@Uz%EC0b`cW8Kz*_0a!sZdWAfACK2gF1qE zwn|A<&(Pb=54M31P4VWAM*7}>8QfI3i-)P)FD=|q&rNSOBA^FSzZH*N$$Go(+RYYw zg)Wa5a5ssY2J3rMVIiK!(!XP5RhtQ+RC&~W;UpiShRjW})rqaUsgQniV#jZ~N~<(t z-$1l9nbR#-i$6UO_~jEG2yFN*g~gv{e<8wmWA^tgh5Mi8b0NZ?=5s+4X2MF5^iPww z5aCagx1hOW!UAq9EdDg<3K3dYXW6$E?thwKg$RF|Ug+6R|2k(1Q>GAMgFBPn zc`BXd!AkBZEW`t0&OX|gJbTJVdV4~fQPtacGON1^3-Lgg0}bch@CsGEve2=bl1p z;qh zR9O6R(aJ|SUUm8-h5H{DsJ#A<3shbs)n!4C6c&G6jPeoc>#|Xg23WL0Po%fBh2!?L zUiGuuUzkbp8bs5aRtF|4c9oiRV4lSR7UF?Pq5VtBzD*1N#J4;@+db&O78fhr#bbGf zYxSAuJ!wUvx>upw{V^&3NX8L8uaHGMKW6iI0FBVR$F5Qw(6b-hZNDw{Puw{v4(RFo zR3Xg?V3|+166f?R8wc-f`TLoaqhouvK7UHmg)ai6$Gus}3x&lW1^_)?(fR)M0HDuh za8(!p(qeCxSfa4_LvN=i7~-L~FD;oXjql2QUMi$&v*NKoeRcO|7T$j9jT)d85%L|= zl}&o7XeplmBTs66{CUXSJ*aCuoA6YTbfDi&ah+6Co#w)y+c>q&#JhK5czl=i)Y!y< z?7>TWw&0?vO&-?iSgmIlyjOXTJe2i%0eJeJ_}OFHU-kboYy4Mj*6da7W-3deac_nW zTOPL7%4{ik8rV6eq1DPv-0o}uZvg&S(|%oA3~qMyi#q#)Rc!hz7j5CQwo`&C#FDF} z6u3r?jf8+B|AEdaec(|3vF>a&e7Kb`(a>k8i0H(~7>ekah-1Wj)oJl@DmpVcIx^ic zJu4ZFfM8a|$xtKe7<`XF1fEu8Ysh~lgq)|4yQsqJb2g6ZR6<`N zclb^tq$4+Q#Aa%AwBwNQc=RO|XU|zQt}H={Ut;hH8&g7c`wLoXVU@j{Yi3$rN6A@8 zi@q*oMQv&#e3^xq+EcBf3b(E$rV<7QWh#siet4;JYI9aj_zeki`iASs|9C_`;QL;5 zYI2$LJYzl-|p5mD;ePPDmRD3 zOFq`I{zra@^ACyYjS*+(RB3o4N+r&b*2a8iq-NnqrFvpjIVL1UWyD82 z#^X#pp`mQkevwgDzeJuQEgvO5c3@08%^f(Els>9DMkho>M@2MyyD z{O4OTpBx*R6qyvCgzuwC8L5%cjtSw(j{IcGnwROAIu0U#Dyi@Xm8d0EN?o|^qQjXR z(>smYP2u~eQzW0fhQJ}U5I|+2*Sn~qjJXzElO4;AxkOGQJT+lfb?yY$L@?N>2B)w3 zQk|<_Nnl?oELUaM;LLsz=$dlcsxviyNg`K4YAr_VWXjoA3LBUqQ+GG=D>^+QEy|H+ zG4x&4PINMZ6U$9Gz5ctX1^q<@QTmT>>tTX z%qm)?{D&b3v{egh{-bJn>GPWZ zs9FaL&P)T#ubF!|Uv2vAMXj$g;J9e50hp>H(p0`2S3@Fj+yRmBsEiAk#cF$ z#vU|c+*LUmoVA*9wyP8s%_{ty;aExNNFT>2owI7A6f^n*4X&n`Sk*{YZpmGR*I>Eo zgN!raLz?9Y-N`3?(%6){Ku&9s(~TTezM5POIfW~wfWE#MxoUaQQJOb0&cvjWz;R$= zMtM5kMJ?4vP0mi8xT#8Ci)&cU+~7DJRkjvqrIt9W0<=+&x3$V$>!a2*SIw`&S&Gr> zixnbv|9{kzFbsaFDJ_+rHZuEJg{vi6q0H)*GnO2utJQXr zMrQOR;g?xxm+~;?wx;~NXG$XatzWIBAZ8a~wl^jv9Wbg^Qc&gVz}eMQ|5X9x>JX+D zPhl2fM_$Ek@q9h58lHG{w{$K|kgBRw;cCu&2Cr^uqWxb+T0D@{{wopN3s9_ delta 13423 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 { + describe("basic functionality", () => { + it("should convert string time to milliseconds", () => { + expect(ms("10s")).toBe(10000); + expect(ms("10sec")).toBe(10000); + expect(ms("10secs")).toBe(10000); + expect(ms("10second")).toBe(10000); + expect(ms("10seconds")).toBe(10000); + }); + + it("should handle numeric inputs", () => { + expect(ms(100)).toBe(100); + expect(ms("100")).toBe(100); + }); + + it("should handle decimal values with rounding options", () => { + expect(ms("10.9ms")).toBe(11); + expect(ms("10.9ms", { round: false })).toBe(10.9); + }); + + it("should convert to different units", () => { + expect(ms("1000ms", { unit: "s" })).toBe(1); + expect(ms("1000.9ms", { round: false, unit: "s" })).toBe(1.0009); + }); + + it("should handle multiple time units and negative values", () => { + expect(ms("1m 30s")).toBe(90000); + expect(ms("-1h")).toBe(-3600000); + expect(ms("2h 30m")).toBe(9000000); + }); + }); + + describe("unit conversions", () => { + it("should handle all time unit aliases", () => { + // Milliseconds + expect(ms("100ms")).toBe(100); + expect(ms("100msec")).toBe(100); + expect(ms("100msecs")).toBe(100); + expect(ms("100millisec")).toBe(100); + expect(ms("100millisecond")).toBe(100); + expect(ms("100milliseconds")).toBe(100); + + // Seconds + expect(ms("10s")).toBe(10000); + expect(ms("10sec")).toBe(10000); + expect(ms("10secs")).toBe(10000); + expect(ms("10second")).toBe(10000); + expect(ms("10seconds")).toBe(10000); + + // Minutes + expect(ms("5m")).toBe(300000); + expect(ms("5min")).toBe(300000); + expect(ms("5mins")).toBe(300000); + expect(ms("5minute")).toBe(300000); + expect(ms("5minutes")).toBe(300000); + + // Hours + expect(ms("2h")).toBe(7200000); + expect(ms("2hr")).toBe(7200000); + expect(ms("2hrs")).toBe(7200000); + expect(ms("2hour")).toBe(7200000); + expect(ms("2hours")).toBe(7200000); + + // Days + expect(ms("1d")).toBe(86400000); + expect(ms("1dy")).toBe(86400000); + expect(ms("1day")).toBe(86400000); + expect(ms("1days")).toBe(86400000); + + // Weeks + expect(ms("1w")).toBe(604800000); + expect(ms("1wk")).toBe(604800000); + expect(ms("1wks")).toBe(604800000); + expect(ms("1week")).toBe(604800000); + expect(ms("1weeks")).toBe(604800000); + }); + + it("should convert between different units", () => { + expect(ms("60s", { unit: "m" })).toBe(1); + expect(ms("60m", { unit: "h" })).toBe(1); + expect(ms("24h", { unit: "d" })).toBe(1); + expect(ms("7d", { unit: "w" })).toBe(1); + }); + }); + + describe("formatting and parsing", () => { + it("should handle various number formats", () => { + expect(ms("1,000ms")).toBe(1000); + expect(ms("1_000ms")).toBe(1000); + expect(ms("1-000ms")).toBe(1000); + expect(ms("1 000ms")).toBe(1000); + }); + + it("should handle spaces between values and units", () => { + expect(ms("10 s")).toBe(10000); + expect(ms("5 minutes")).toBe(300000); + }); + + it("should handle multiple space-separated time units", () => { + expect(ms("1h 30m")).toBe(5400000); + expect(ms("1d 12h")).toBe(129600000); + expect(ms("1w 2d 3h 4m 5s")).toBe(788645000); + }); + }); + + describe("edge cases", () => { + it("should handle invalid inputs", () => { + expect(ms("")).toBe(0); + expect(ms(null)).toBe(0); + expect(ms(undefined)).toBe(0); + expect(ms("invalid")).toBe(0); + expect(ms("123invalid")).toBe(123); + }); + + it("should handle default values", () => { + expect(ms("", 500)).toBe(500); + expect(ms(null, "1s")).toBe(1000); + expect(ms("invalid", "5m")).toBe(300000); + }); + + it("should handle zero values", () => { + expect(ms("0ms")).toBe(0); + expect(ms("0s")).toBe(0); + expect(ms("0m")).toBe(0); + expect(ms("0h")).toBe(0); + expect(ms("0d")).toBe(0); + expect(ms("0w")).toBe(0); + }); + + it("should handle very large values", () => { + expect(ms("1000000s")).toBe(1000000000); + expect(ms("1000h")).toBe(3600000000); + }); + + it("should handle very small decimal values", () => { + expect(ms("0.001s")).toBe(1); + expect(ms("0.0001s", { round: false })).toBe(0.1); + }); + + it("should handle mixed case units", () => { + expect(ms("10S")).toBe(10000); + expect(ms("5Min")).toBe(300000); + expect(ms("2HR")).toBe(7200000); + }); + }); + + describe("caching behavior", () => { + it("should return the same result for identical inputs", () => { + const result1 = ms("10s"); + const result2 = ms("10s"); + expect(result1).toBe(result2); + }); + }); +}); diff --git a/packages/ms/vitest.config.ts b/packages/ms/vitest.config.ts new file mode 100644 index 0000000..4ac6027 --- /dev/null +++ b/packages/ms/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + }, +});