From 0ec91e1352683677e0b4cfd1e2445f091d341236 Mon Sep 17 00:00:00 2001 From: "oleg.pronchenko" Date: Sun, 15 Feb 2026 01:42:06 +0200 Subject: [PATCH 1/2] feat: add reflect-metadata implementation for metadata management - Introduced a new module `reflect-metadata.ts` to provide metadata management capabilities. - Implemented functions to define, get, and check metadata on objects and their properties. - Added support for class and property decorators to facilitate metadata usage. - Ensured compatibility by checking for existing Reflect methods before defining new ones. --- devisfuture-electron-modular-1.2.16.tgz | Bin 0 -> 20763 bytes package.json | 5 +- src/@core/decorators/inject.ts | 14 ++- src/@core/decorators/injectable.ts | 2 +- src/@core/decorators/ipc-handler.ts | 2 +- src/@core/decorators/rg-module.ts | 2 +- src/@core/decorators/window-manager.ts | 2 +- src/@core/utils/dependency-tokens.ts | 2 +- src/index.ts | 2 + src/reflect-metadata.ts | 160 ++++++++++++++++++++++++ 10 files changed, 179 insertions(+), 12 deletions(-) create mode 100644 devisfuture-electron-modular-1.2.16.tgz create mode 100644 src/reflect-metadata.ts diff --git a/devisfuture-electron-modular-1.2.16.tgz b/devisfuture-electron-modular-1.2.16.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6d88f286999ae7ad537ee5fef85cf2c44e0183de GIT binary patch literal 20763 zcmV)tK$pKCiwFP!00002|Lwioa@$C@DA>>Zifp>3Ox7kr-L(&GSuM+QS*NVaNOE~< zJlZA%q)3!OfQS4X;U7mR2@uwPTtL1IB_lA^{@#{_ z8PSBr5s5ESH;96$Ph8@~qe(5kB5FknTZF+&gj@^e(TNknXc*SK zcoa}ZaIV?tunY`+1OQD1h#0)N9>ha)CIPEmj*}>01B!M0n6Mao{FQnsyn*7EaTvze zFf}iZ`~YUey0zNbfD-p2zM?o6zMfH>1|A1DF2E>TRq=@p+%O~;Q~-?nB#4NsO(%iw zS?We<;D%%rC)i(pnog~D_GXWq9=$$$zjLxj_D{+2$*BLW?YruO$vp|OL#lifEvhi5x4_uuZH{nDzv-ak8p zHeVl|kR5Wob8@!7`|j<|2|0dua(r~UM|KWhk;9|I{lnKM`-ea79qb*RIb{Ek93GLq zpZ5;W$myG%w{M}V+RnSPH%BKhKC*js{L9Jyk8jS%o1?d{_D)X8%RTaTf9K`fJ>J#f zFJ$-a&i+A*yxKX~`Ed_x9i6?|JE=i2K05OL%^tjh{&o(@&hFX%(IHG@_vrBKWM}uR zMb3^+&Q#U+`=@&?vU9S33IKV1a&*wD0XUCdLy`SMsCT%>TLDlLV?~Zm@cG^8o@$W1 z+S_@%fB54mRE8kLGRTq_Cf2P~xtfT}QF z`LP|kf1B8cjBplfup37}m_d~4`C1^H4Vgb-diRTX3r2m0D}#D`~CHn=2>bTXnK8;A;j-r6E{ke#A_o&5Hjd=K@8 zjiwXQsGknV*47qTYKk7=mkyHnnnd)v4A1m&JCQr2O+JJh{5PTLIEiwdJ*(Y3tI^L0 zRX!`l=lHTPvPE1ri987vhRqj%5oTjK!R1RPWD5s-;Eoz%AeV7M8oazVR1llYwzD~l z!UDczi=5EQkb0@pr|E%s+o+%P`C#iUyb z@#T<+M(#yO{rq6_sAs|8nZ0H0(9Z!&gGhjnY}u9(K-~}><{E)vn@!}0Yr?mbb;|Zz zxe*!bnFqTGdidE!&$7|aY^}(Z=7nV%L}O~h2>03z(gJgy*{rOV+YlOd^yZ~Aj-5~z zhgbPtN-0BO-gOZ9@ip6)Ea?01iJ}@O7FpTZGq==7TNKwI0Qrh@zi z*q}}R1DGap*yfPwc&;~~cM<@n%YREtYZm!$ZKaa`9^+^1gSgZjgPFOLRR^VihV!2n zN0&kWZil_a>3?~3B~Sk=ODh%qKR*3m#-R_p&z9Kh04Yvre z4I=q@=mt@}g2!dHP@7SgQ8_$JPJ#Y5IzeU~`YW$yxk~M!IHkoCYE5_^LoV#S%FU zB|oqq#_5SrDo|f2gO8K=D)4D?7^kn{Xq(p&TU5kSGC_6Ou2R=>$z-S$bvbn#|8S5g z&vM_ndcm_*MGe9jteU%U4k{LKeSfMdL(>qT26PZGM-0>%xW;L`nO7$WP35H?BaoK;O6SI57^rC(iU;jiw<11C&@CH@b zhN8RpaWcG!!@98`+vF6hGY~CT^eif+?ss40=x%!Y99`d+glNuDVoXcX zheaXH6~&yY46ydi6)WhVRmE9a=pyHsPX(Rz;3(WjJSxr$5L>>@ufH8OCF}nH;1EkX zj(mC>Mt3^v1T;zQC2|xzYv^p=HRbZZ1I;Pw*89(HX4fS#cN1ZB59?WUFOciM1lY zOjWeum+CSD2z16rW;e_z(%Q;{GLMi3#PdUA+RzH1&&^GKwatJJN>YUe^J(Orqfx~n ztP>V%@4rss;r@^#`j*hcXH&bP+V|;w%6@GPgW*(h1iPteCNM4S=6cs)YbiX<{)7mF zn;VR@go=v{-zpF`j7@MsL)bjrvw*PLqG^VwDVWmA?;a8cs?n(nc00^3uzwT(EqrMP z>Xop4O>CA#GlffA_cd8^+X)1s-C~o|Z05WbDg^JG?ObgIC4EVQFKFHjdH>R`5&rE`>y{pRb98GY@7wsc}t&6mp!*2${z zabJ!jbX=}a+toGLiOP#|teg2}gzYRkA5NsVnhjRHpSj@pe|E#Mxs-Mmapi_&%a{b# zv`8&hIq}L3?Q+VM8_qS(J>dZ|$58E?msK3q=OcTt@U!`Lu7xD!sXO#E;Z5@#GwJzO zn6#VOFcwE9(Xhz_N;ud;R9IkSO05>4T1qWj5TUm}s$!ni>@w&pvu+V3^aAF%^lqEa z%4H-AuWC4sV;h0i%tE*_Q>?iikGKV-Eo#t4fw?um;%b2KTo}+-UypeytwigPTbF5z z@J%hi*8%=wQzd; z{ekR%y8mB7-SkclfYa^&Ypd()dHdhS()vGxNaAhfZN>h+#nI657 z#Vs-MRS$b$G#!t2PmdwifyLv*qsYmw3SRwQ97WViPZN)95m8b)2frXoWSjKJcVFa( zU*jNZ)JeU0(<5C{uRqgUVk5FedOp2$$6?xLiASC?8eTqqCOgsIefK5n_~sc2hJF0_ z0|5m`_Zea7B&1q-@^loO{d=?FsrP9jGf??K12>j%|LM~sTvUCSZFaU9>tm1`AB)nVVEQQAJG-Z%-;N&7es18-9A zk`EpmotrgoiiXY`OPmO2g#t^rNaG8bAqOoIk1!UtMFNHzy%q^$*ME2Nwnc6V_$85( z%Q+H}C1|B;;}yN)0;)$Db7*ws93H*e`?z=bGd~ac^ooY@2!f>zoEryF%}oa!Gu_b$ zG)z0A(XpEj8qF5zb-w$e=tDUCIl80YjWEIw(qY&$Mm0((%xgvmeC*q#?jV{uPJK$J z;5vBI5e+-uuT1ucDn(T#j6F9T#4J6IleAg0`rtoRKKQ@HV={2BC`P0EK5-*LqpKi^ zBLEk>^A6YUT8(vRwY0E8jb85MMX!>IPXRf1JJ1 z7V$cWgk)xLe2oqr$B_uF-d)p+^8?%I}*CmqfsuLE6^3_ZnBqwa+Xhoe1^eK|o)xyzk(;=~Gw_y&aap5ueaeD< z)WwqMS6^=tIf3nM)zOD@Q~Wc5yj29eITy3mK8SBPrXw_hIiKi+HOw}fsOvc#4=%!g#>EIYPMP0|sDX@*@;%T*| zk8ZK9G=Y^g;-;zV4R|Aaa87&+KEIKfn@2Q-=g4*_3+S?`J{IMRlS_!hTRAAE#nBj2 z=K3~Ne+kV6`RzBwe{!W&VF%CDQws9OG7ssTuL#bmE7REEfR%`==}jz$W$h$yHiBXg zvz*gK5*=d$*(yPhM#=1j%*U)LTdqw!k#=1h5=~n+1A;|A7;^&Of1m5t<`7ekfo5y1 zd|Rd7w??&Fy1NQx7|N15ivK9}j<1C?O%Bbqr4_9=(CgM*am0B3-s*{Cae$l;88w8o zdF`5O2?(Y*Q>k-z&S_Yl=ZXYBmD-*5h7Gm~wV zEvv;#SNEtLd6^q+N$09$k>;i++>wpvoujjsww*ZIkAgIhJtB=wR#22{7?#0Gj(d3d zFBgjW!12FJYa45Y_}{e^cvs1P5C7xgwJ%*pF#?0o&nb<3M);FaXs zQZE}ty;(ABYxv4sV@_MdHf-g=55wizzkp}+$eQ|hU(%a;E|J(x9da@UDHAag3}<2; zSm`vTB>%hX0>B7~A5*>n+#EZgRmo8SVx3jp?0Ic=dH$(1hl zWCI(Cqi`Zype~@I4F5KvHw6f#Al!rYzA_B;Io%f!_jEXM0u$8{nnf_q2M8UGk1GH3 z{9pGc{@)`1*V@v0CI3Ilugd>bo&Od6-y_Y>PyZ{M%Z2-&mNzyl|NqDJ|0(hP5&Yo? zWlt&Qh$}B;ze!}C@+H?d%u&yNWyH*i>iz|Jm|nEn$ZMPTKFnV?%iyzMMPVRcv|8bc ziJ4W+fQm&{uXrEEqP1;y#9OvuH3HtUExT=U3b|NPs?T3R#$e4|BlFssyNVHPGhY=H z6{l7x@d})`H2CSyT_YpGd8;J-dFVi^AQqoz<)7Y-DMpu z|L^)nA^-R0N+th)3;rKv&L46s$x`ZAZZgVkYlX@(!+MZb z_VD|=d#S{3tS+IM(`0;`%XVZ)*&)4F-DL|qE2*h!LzJI4%cmB`rFA{s!p&{KdU*PW zTK=9Ig>ohRwhA?@d9bFGm#&F(w?Fg36<+7O`3(l4Soptf%YMM~-}3TWG5`C@YUTg; zxaYqq@gJOl>>vKez1_2qXGcHn9iDzX*gM;KwR5)f@u$6C$QG%e^m%{+cX`hQ$P0|Ub!b6uZifKHHUi!dVw9?bF7wNpl=3FErCso9SEt;bo0(wvf z>eBL2n<9q5oX|NWFM|(RdD$(W##}v{U8s?iIxQ80cx*v6a$W8Ohh`OZ_XqUUEZ&6fXTv*Q2X3jepTa*UrhqdrVdo@3S}e660f27z%9A8zAc6`4LJ{m;;*-aGwo zZWQkS+gz*s|Gwq(|J2JuoViq5dR{gC`e)lwxDZ=5N4~hC5A+6Mf)-X1GFY zrJK1pT_cyAR%u2iIlaSNdVA9e+l(?OWuy0P^muR{=W?GD*FEx_kX4BxR?E3 zwN~x_-^%_k3>Wu8`t#7g?f$>z)r$Tf3?-|rIP{zp+%=e=GX0eqV$BOWi^ri2hgC zi}^oSR;vB~QGN?#>d$)-WO>kYSz`1=(?&L6NW!V5WRba(v}=;F6680(h~tpD5niDT zd45Ziy-mAmu1f#A82ww+zYl-@U)x+;DxUwV_@Br5iM*+(bC+uQ(=<*j$$1swA0@jO zk8mu!ue6*@Ha{+nGlVpiUjoYX>qd(Mu&3;`)h=`Vvi5|xjq?eqR3(v(bifp*HJN)-lj&2kbk5AqTZNWvnbY%Sw47o*>DGb>Ad}rrU+!%Sq;8(o z08n;Ak{w)SWl2LaID~_Iz$+i6{i$pM#tqZ?$xopTD_owHt}3op`6xB(m;n_Sz;!eq zRPtqWP?-$|v6dD*uuhgQs@BJpNz6TiI}9Jl)*B}YjnXqLtk{rtO~D`tDQTF+6uZD^gfm(sm1ne6*b0gy%R)cz^k`x zJ?1l~TASW>z&yY0&@ke4vM3*PgWL zcCjh;r2N*A7LyaHR?1S|PL+R^V)W-+-NJn$7M3V9@v1^jo)aH3m9emx$qI0^uk+-$ zXf%^)UHQGu^5Ql)_8NDwW%6Ljj0*ywO-*ceR*X58j3g5-ZvznvV5cUZ05u7$wutH> zT=yX$$kE;5%bz9h)$gbd9fkk}n90~Kue|jpX``7<%E*0Z{H!A=C$CdxAw<*l0 z?VCqDlS!y#`&`El`=G=vTPPtHanzj*=ou7a%{puy>Vvdvz{|RLi}z)y#>-`rEQi@G zPp^tN=03x!aqDMTYcralXF}mp-1StqSRrSfeKnxuYX;Gnma6e`iKu)|D}HMyv+(+?Uny@`~S2%4en9@U!eb$rOmY}{`Ya|f3CYdTQl!_ zZA}*zjIFxtQjM)ebx5TiuSHD~RLsoL;%ZoBj^5q|?}!&=E)ugQKiyZt>YQvdc>iNM zDVKX9&xLw-aYU|kTesu?vuSJ)!}%M z(pe4*I{v_W7FEvcO)a!}NRvK&Md?TnXlC&^@rr3K;&D0}!=%3u$8mUJ=@g=|?GK+I zq6-Ib4*Xh-ltyV1P}UHQ=S{x`V8!t5VW%QGj%+`GfefSc#P)di|2nGkKYIB;25r4L7C#hWomB{ zcgqwri{lJ*^#Ctt#@W_v(6KgO%V48_HxhH}BW{@eKfH6$E%<-&7R@{H|FxAu{*RT_ z<;}H<|3Ai0w~@Y;OFAX@hlG;gWtT*k?s>kS$Wek)bP9jW&c8L{ zi1Uu$;^;lS*o~uq)h2X)J8r19JMnkKt0qYZtIZkoE@K>Ej?#e2gbO}Upm<$t18oZn>7 z;=pf_%OFe*H!%SZ$P+al0gin*FYLQe7xr5Y=iK)CXWk^wN!6U;cEsBoz}6YD^aIp6 ze`a&k8gLZKJhbL&m|kHNf42IK+);)XlWZ4Y{|B&$q}j*(L+W9gV_C zgTwQ~br795NjLvmw1==iFNT)m#?6<S zqdnp}h%|cymfUu-3q-a!GB&NM163pYjE|0(LdN<$exFIhyr)ER?h>w#SkrU_2}$

E4kh~goK>pk%q#B39%yHIQTA{j8|2l|vGjcCsBOKI4{vkU1voVN_pNk&o#e6+D z*I6UB-i%)49+q2S##dN(^pR`Z<*ntZs*6;rfuRMb4sFoqt(uOyFwht-h^c#F%&1>) z6(UXq63#?Gg;Mzg2%U{kraw~FgHJ=6(p)Du--KiQKd=6W=l>PL{-p~t(B#qWe^vhf z%KlgVzDfPB+@j`I1kb$xZ?$m#UtO-w|BtNywfTSF{tCc_ZUNLaVEftacs74>-6cC` z4m3W^mms)!o8TF2ekE557Tv+`aHSx2r0x|wL%qdZmkMIhrg^Fd<%%}CDfbBGMXKrk zzk=d^HQC*XYSMdblPMf6M)U z8&&-8S?P&cWAWubmW69z`jE~zg&E6(x;f9+G|B>{@; z@M#w=5E1E@*o38Y*dnj?v%_u6$h*`cZsd#eD*>%R02f!F6?abzf(%`r&BLRNIlNEU zr=YW;a8!kNPz>HVd_z;7$EpG=eD$4Fd{5{oW&xoT*D>ZBi}b#7XzkCRZm`IkYO zj##(T=?CdxeBpTUu#+Y(ZO5Ym_#9}VCQ=C1h2wG7k5kW*8O<6fmf;6C+gxi}rlPuI zP&O}ayir5C3_|Sm1Fr~e!bdbH)koutFkpk-IJyk_*{EF))&p9_0$$b{3w*kFc}YE- zq{{VF=V+o${9+u0KD3ZBkF-Z5Wgd3IM<-^HQifB#3g9o2jEyhdYe-y`eK)?11Fd4a zJr0boUVKFpw@=N+NxQ8+7^Q>Ka-`h`^hr{hY+cdhB4)-beKMnj3UD4pA)s148V#{I z4hsdt5v7T)zR7^5)bd?Yf3dZ?k=5~Y<>lKedqaQW!d?{n2!elGS#p+_oh3Qczwo(s z~WgJ=Jd{_-H%6Yzz0=LeK4y3&!TG6E}$3f(2$kjC`8#3|;zr%7&$I7VpF0l6n&_ zr0qc*e_|PS@*EZU-W5MXT*<%WJeU>U8vs$? z&l&m;(8pByZ*zHlrC|SET3@U5KacWzLXJ5GkXNxc9?~dvfw9$U&qu@!gMPGC_h^*T zr2e8t$n#*>CoJ){AdhYsj=@X_#hnpkopr->tDcv8h+eKvt^+?EY}Gf`mg=PQqV~Kq zdQq!=`11$Y0tHVzZ%DB!81@}D2x#atCx|=IXxO>xOchcccGYiY4P0MeJJD$PD?`yt z;`-DUn&iWuKfH>sqcC=THgzoi@KFZy5~PCCfpF2YDR~=7IptPUd&_qR?`k=Iy z034hz2n+sJK8_14GaAGff!i4d(cgm6j3vpM((5j`rf>NUI2FCZg|KU$CA$dY3xsFq z?f&lG;prZZ1q_O(C}x#I$@TlRlND_L4`8C-{MX$L7{xYACn4Rs4BhnmFz&}&nc#-c zyKxvNTh|~65l`ScFBj` zqr~~_78t_hW>dY_o9gveRKfcjU#{TrC96L-p8ZYA9s%qU%lHs6BYCCpzbO4 z#z~M)$S4j2Z_*_nPWN`-o$R0ef|axfKI%jFD(I^re>l3L$yGqF&l^u-@n@6#{_lS$ zZ-V}y9nvcr5;h(V-DH9%;C}3e%&8I5CLi7p+?4F6hdf=w*AZ?>nm+^Lv z6Cgs*4ao?P$1#S_y1t)K#;C71^-DY^Khjh-G>OM;w9P>?cv|<|k$WMJ-a-hJE&N0$ z5%G?A1L}POe_98iu=m*=jzUUyMx*n_6Uv|3?r6lT zo`UBmO*-NOQHSt=GOUjd0bz(>J#Rb-v`5~8D1ab@BU5J2pO7d{MKiDC5R-g1@Q@|K zhgkEx@#KtBI?i7!crf9?oJ$2Np%`KYM^;u0u$yi24LFrc7z z8xC*fDCxUV@HYT0Dyn|}Pk$%!XhvYo#!MXREiI;bIr4`?_7 z*I5pSSb zy4^Y62iFLi(8!~R!9hEb&yxDZBUa876o?jJxg#>{5+P^r+{2g0>W!6r2g(sVnB;!RNQX zi*=BlL5=|OHgJj3;+?`l+Gg%0O(!Tnp^qI5HVsD1LGeY(E4A7V34{J1y{7Q5zMm={t@#V;ditl# z(A1L@WRHskV`=4qP}d1@$V2!5@la6Xj1*ZVY*&+b45-dNrSXVBuu`D*;M$WXPlzcd z)oQq5b6SIK<8x*}a7QCZl#$Yigw*wMGfZK6;e>eccoZVnheXuOLl9HnVx;hc%gewU zhv|gh5s`7Fj7>9#oDBj-#A!guV*m}xKs<6o2+#WedCSE_h+1%q1;~s){2;ax>T}6e z2?am=K-%PV6b2~=iUtfow3vYYpRZHeBA^@v3YJ8H(InLMF;z$$#bJ;R0uO}h$J+0)7*OSO&}f6AR!kZvjDnqn9(hW`W!cc_-et~nQ065a)se4IZjE2E5h}@Kti#P~rGJ=If zI6(mLBp#E?*c&qvN4Z6Gr0~cHz`>R1>4xD%zs1Ja@jyp7)5M64$c)v%QO8NPWn}k~ zhy~4fIIqb4lSNmVIEG>kXK`S?aZ?0;f;=+~hSaIm_A^wxPAE%5&M?w}Mm>7pBu?;N zfFxrt{V=`&YD?Xewh(08byBT7HU~V^1b~7v3@YQ+93p(A6pmHg2-oaTxYlHiVB5%KAeOCqT17{u2=M`H#{rfn(# zBkq+OgvjLGlzfm%AMGUiF`=%Pe$1i!Es7V1i6`nn#oV{Gz3hPYa3CLLG=O&QbxGZ0tFC8)A0x^11Sa~dS6Hi zule~HmWFY4gRy;b0z!cyrCG*OXbf}$X*-A{da@Q_lv9tv(6j}}!>g?oTu5D~S8NKI z0<=Wwx6Mkx^#RZU)HBm|)fDyI(d=VIF9PNzL0f)tpaoi6n`JVh3q;JL-Eo8s# z@d%Q&NsPvq131nID54Iy+2TfQE-cY2aWECq6QdCe0Aa-e6ooK2&>~xd#5sJ#K0!1L zC%E1K@Z4(qGXO;;XqZVcpxlSCOnl9NESZmrhq^)6gCs68RkXjlWY zgwQyVsoL0D?FpHK;)ZUd;}f9KXVlC^?J41v8mkZ!Zxn41nwx$N@a1rBzQeq zR)~Q60C54Aa=J5z>_rSXvML%d2@8I|8iyb!at(4i%-U_{Ucrg;ipV+r<=<8}_8a4FcT8T)tzBC=W;E$!w`2DBk*!3l$pyTg&}{ZZFa`8&p1es)!w}CU z6j!MS?m;I)!_`AFMV_eZOL^}|uh^JUh&8V1 zMU!yr32ETue-2XGxuzEYZBf7J$bR6W#yR^i5MK5GtUUmn-8((tN1mp}A~Z!VmxY!c z@=|GSceH&%X>Ea%$jHbX@Nm;mwSfc#I&cilG)7q@9c=ouZe5it)*^XLiK;r?c~5I^ z9`w?RpHQBhj1}r6@{3WirjNG)enuV}?Z#0=z4Vlq?{p6s2TecU_kqOefF?>FB?PjzzzC3wNd(WE7izVgNJ*UWC83~4 z=WRS?M422~cts{`%$^$|FGC88uOp7iHAI=(?|=W#zyJN;fB*ZxOS?nLxQC+Z7>_Ff z?!Z}LadwcUpOBa486HJCupuiw1F}veHe4{RtzhJ-Ua>7hpcDaWZrIct4MtvRdtCg~ zCi32pM@w3i2gb5iMf7Xd>Z^V6PHV9C```aA%VU73n%5INRcOF8su>GD!|KDi+&tzQ z(%{yYX066^vVyeF7nLi+pjs%kf+(bM$5!gA1;*YKF1%91Cq13zAX6>jkLt#eg*n{` zW$Df+$TKeFTxr`K1$K@H6ewYlaXUGoV%hzXr{6C<@&qGPXH?{ZVz=*-55};NjRhmG zOFoFU@Qu0+P`nr8!EeHOxbWqssX{d|EwIMuzua&X!L?B93~Q@ge#C-ggjv2K*>U^U zYf^x(wkQUqYue$yVVR(82sfH6Yg=QK1XpleNsRuwx&E5~8Q{psp)V%;{__(qt@(_c zLHjQnf!`(kV(n&EhI2nZA-`oIwNbm@NasY^TYlkL*8Xi4!`5p$WfVvz? zIFrS;OBy@Ud|Ru%1NmAIN)I^_pzv#M$nBx}@$(2Av2!XN&RGR9D7Ku(b|dQf-Ra(m z53cvf}@x81aCOb2^>|E-@>)*)3i&Tp9!R) zk&pf!5;r+^h^Xo9F4_4U#O#Frbxc{x-S(jbiXak)&rZbpKR*vPN zrzpOT?%wN-4xvBNF0m*hyYKDAD3j0IEW$VQCGA+8)zUL`h+2r1U+j3PRTP)R+;!U% zLX>#RXI0n_m6$A`$dOR8J5jP*GFurylW~eJGSX?AM7M-2Uyw$Y*Z|41A!#PNq6mr= znZKoAmh6qwp;mQMX}7 z1fCT!Cnm_XwXZnmWsfW|$j<+WBEumH25KJ$V_+&2&uCMrwaIb9Ev7}$fXf#L(q0@G zn8ScbP?=n7lb00J$I{4iM{F#$y-EkHd2iKf{4difE3@o?`Us5(QdcE33Mem>>^#B9 z18qQyv&wz`#C@5jsC8Lfy${>yOp+Q#%@#73}!YWgAGVQ zpIHZ5Dt?c%?z{R}Ofrgbb`8ubCAYG!G4tn|3l^wb&R;amyzOov(jfEXO(LDT2*;KG-%!9LU2WD5u!sh4LnXPyelVf( zL?1#|Qdgb#DwEzc4MLN6o%15B)vRs`ruQJ%nU6)(Mkz|0Nq!c@IVmyN8*y^Nf>BCa zWtjhQ5`((7e*OaYS@6{B%1FH~6aeo|EP>Jl+XaP()blH`RBHAx^rTBRmX~x5xnZ5>oENrR5k0l9f9Z0C9VdlHeBM3 zSsD+OXEb-XXCvwbmw_kn6kG#R(i2?ADMOK1EPl={MT}CIxdO)L32`Gy;ODJO0?5Lq z#J(vmYRoy!maUGlW!Ua&X>-|IN(pl@Gr1sO=vK_`tn9Mo;OlE1R2Dq$mM#==B< z7^g5waBkv@lc5D9o+B zIC>3!ciN+3_R!=iTGZzE{0!V1MXSYmXKj{kUA!CZ>-!)KMX(h1T6+V~ zLJ)|w^Fwz81g(4zcvm>(GlLX(E`QFZdvVkQlZ@F}4^Zzi_}t>KO9W3(DDWGA?XEkd zAzV@cJ$|AW?nT>!Ct!|a?ziivVDpD+{Imjt%O-kFgGX~;5$U2ydInDRRJME6&?;^wAUa#%>2%1h=s^>8 z66(?53geW#F{@1xBSZ&Sj{0~7m=Li`L4gj?>A;P2c(ibGaT4@{$PIHyOWdSC<}xC< z7hcB6wVUt=t^{t45Ib-IGz_*~?*A`PFLYVfns5jU!1I@0j>7_R#)+g)MBgCt!m%&$ zmtTIy5yAESfa~eGZZ}(o5%so)Z*KtUlFzz?%0^xBlkLx&|Y(015;V_Qu98p@hIWlwa7K1&$497{1QR36P zXlOiR$e(%w)lr;e4_UGJO8m78S2AdS`q@Y=T-H9$xmhlJb%W6UEgqhLtHN|XZE3Oe z+abNqVt341Jdg(`%ZJZzKv{(t?q|L6by-(jL}bT@8(DF=mM&-^B*_=yTD zp*{h>P{Vy3nMImy(*Yy=b_}@Wk9%0h(Nl2Zzrrnn$2)`*vDc97>NBw$F}P&N=o=(K zxC%%gH$(t^;?ln>@7Cg~un1azMiScQbCUuow%fZl@?!TmbB*GZ_+##yWQ+*KmKgza zq#@$r2#<$r!Vd6%N|{&l)WY4*EK3@|Xr%iHcR9sCx}>R46r%BnE5VEGM>;2JQZu%P zAuu9d#DyJ&4e%7z<39I22LUYJ2Ta`0m+dH~r1g|#uBC_q5Le_T$wYLVS~i%L?|Isvo7C88a#_HIzCPbkydtjY->&hoD&Dr*5swEzJRmfBZrM zpWKkGti|W>YFqMga`U3Wb!M1fJ@A_<-}pET@q>7N&PHzZ0wzsB_YJz|=N){920p1j zk&<^dDq;LP(A@U!SfRoD(uV;>(wPX6&)R7nObjQxBlUre_S@h`eo> z^KACSO7dm)(vz9T#gWt{<0$y+ zSnUO{`E#bOHr|y7UD&P0u9L!{!pXh{%-h)Jf1H;!jfij05-m_Mpf1;BY^>co5Pk9u& z=BHTDLE#c+an}U{L8n9X?9dEzQr0+E6`cxal_B?!)y*$Ji#&!zy0oeS%9Xgo3)C~e z5D_m`^q=l@gj=J_NFRhBh-ZZ}kUphy&6uzvSyW=mop%aJTg(DGqtR@uz)dY1Hxg+^ zYR%d-OO|EidE1s@95V6=aG@}l4L}&?vq-uI*FZKorvzu*%-s{m3jUpi2t(zV;eZMF zSP50a0xY5$z&8k0R3FZJ5Kt?8*CA{fze7pY(st(e#fxX5ppj2_q7H5x?gb;yY*};t z)xvEBGsul1=hmwg7v2tLaXBU?E!uq8kZfQZwn~bTD?Ue;XCzI6K7#)HYccJ+B}HOD!et zZ7eO>Y|00dxh%?ewhq5F3=nyfshPV)qKOgDlVM0^Xl9x^KJQ>)!;(TgkUC;;MtdZ} z8i)(`WP=`st5*4bA@rEihU)Q_+AQ&UA|fHU!nhXrjDi8$Tm{tHGN)Vn7<0Oj0d;*Y zW%hExL>U^t(yXK4IRjb%!Tq!7p7m1fVyXoFuyu*5y{C+Zmrr|S6pms4nBYCknBpGJ8bx~OIplSAlo8=pT2F*G zNJ^HSl&m+Ive3F0b|D*+xPy*;I0wR4!I4alZxneSGM+F~)F_LB+ZlS6+CCK_HolkM|-ClF-`41#+wK{1)qNyaQ=vIg3pK%a1>HmC;(|rX@aI= zUv+_4gSs4smPslBvk*-04d%dC+yva8#+X^Pra3#4AjR>%q3%`2iW*={h5S-PaBhB` zA!H|r80--;PUW?EUw z52oVC`PCE{3D2__fQueCb14jm)Eqc7d0vM#4HE9MrDsq<@R0^&1j$gYg$T_C6fauZyC*3}1zIE%O zmf8=ev%|?rVD%3_cy1KMkmF34`IQ0ym852A&=?Ba0)n2Ra4yD<#UtY#;f>2WuHKk~ z-a;Hh?UrMQYvyfiDoWTda$nEgfNMM)PX`yMu07HJ>c$kE`Skvgh+;HYH?WV z%4zTvAt_BDrw>a5Pe#cJEnJsexnbbz1DL+iWzj#c1U0}JLxupMGk^xGN8K5_fLQmj zJ?ipGad(7$Pg(fDyw?>CP2J}B;Ed=&wFE)L7omZx@Gmknr+G(_Ba84Ueujnm{lENg z$P`>~Nu%5cQb)u`S%hie;Fu&Z4#%JkjF54-86s2g*cElR*KOy_pPYiS)}(FB zAedav*alZ?;VXV}F;0p_k==2e%!+KbHMiLq+ED30F6brX!u{(Qa7MGn=f|n#@GyN) zvoy4FiZ-1g>Sm<=5U5m7hvAe2A7{C0OVyBE4&H8XACjEvQ7D>zGa~?=nF`0VTqeHU zICE*=<{0WC8nW%FDzaz!=$c~IltT7(BU!C22fH}A4^_JSDd|#5Ql@ari{cyQ8B|1l z5Q}r^P({J=geh6l6suC3m8V7#satFs;_}QVBKwIgsW308S2dHMWQkBTTdJNDMa!Qe z)5di4symslqe?5IrBQ)GS?4^}I#@XQd)YGXH(*19PX^MMnVnTSDX_|B)+4}_U6jVe zYVYb$&m+CIQFY1AyR$b&B(o944C1$nE!xQ*AbuGhErH9JOK~Slrz~ z!mmxM99eU+xbb{Q22TT$53B%qki4~q~|N7F>Tx`vqUkhm5Hw{p+=T+j#JAV7V`cKb9pW}l@r2)Iw9D65I)h&V4gW3 z+|t!RL#+k92Bta-Ebb}L%#US;pMZu055RSdq0D8+zs?)*|Jc^>oVbn&%ni$Rso{EY zE9*Czt#XF_)NVU945xG0`WCj>WtO0GqZ_MU;VY{MtQvycjHevk^OZ%*f6V(|@e1+3 zfO@{8);IeL{X8G${@10Ym6g@}{jVEKn`_nmuaEIFb9QL{RE2~c9c}yM$vae32RE8< z0?c!VE|DAsrI@bX$A@zxGn`NvRhKeK5p|IzpVqO^BMhA@Nvmo_)@^bZde{XZi8qx`Q)=FiXI2pvsc zkS!9?YtnEW$4&aI3onJ(epZqCKdk)EJ+|*j5SUK?E9-0PdHP>lT3xT`{~I~~mmUAj zs?ruCFVrg37gyTLo4l+^#-*+ut(t`vq*~stec*Ogb>Re%JqF=tKxkWl_4#4$yt{i2i~XWd5E@1U6_RGjh4Jpm3s(TM_uT<0m{(rhpWRlHgOTJsPaxRA>m(j>*X$etX}9{y=1U6*rIMJdE3f-Ym7lWKYW3Q z6Jt8nL1hv8AE!acI+;U7TljC@ngh(D|BdAW{co&P_P@uZf3Wi5%|(|$@Kc5K#cYK0 z3Hb9#_{ci?G|gOxx%Xq2GHkg7mag!3;YWpvWd70VKlA^|!t>j~$m^&Wq6JyOto?s8Z~tFe+E}XS|69@jp=5AJ z9iY~RRS#%oLmB#IF0h$D(SpjX%F$?E`p28$SSN^l`uSc=05kOet1Bx7{r}p=W<~#x z@iW!uFI`6W@M1uDAm>k74r1XyKVBhKMHxlGwoSvuzJ!W57@0R{% zw=YHg!#I5n$r9#oJiFnR4CkGPic2{NFnjsEPGz6Rw96UYYunP<{V-0mz@7zwHFMOE zNal=(iYzd2jvR9#(kq$w{#HHZLSkAx>yXSyBwsS>#gT8mEgumK#4rmS#_0~vlkhMg z$U5A`tN>i0t_|Z3y|zR+6cy8-Z$x_#mhrWR^rdn?y8Hgm#kBj|{%7p}%ggIU`#;JA z)&Boz=l`kp|1!sasnoMwTx-8&0k1D_%cwX@TT{FUrkxwC>ctj0Gt7T2a+Wh2w#eDf zZaAje^B$xh3!=XED*H1Vj8#!-UVJM0YRPAAr6^p{-sYjC6I)A0$lH-Lg_x0W?}Kz8 z&ql3c>oVNWHckoTlFQ?#gBlq7F8T|%_yb?K6M2<&)*8g7@+K;F`)%|8d*t~Goc}hL zmkR#h%a#4-k?lVvwjV+DKPYO>`v^`eWs4-7ue_#t6mk6X)>BR$i&d09G;NV8VBu=n zzP51P>;Ql;qUk+0yZ^c@|Z3SzO+m^fnI8YQCTlqyMo9y-t} zOp&Vcwe(}uv~p$c7Srk&D%v}VR`c3_1ek6m8!YbsvAMof#eaPT`_D83&fH$y_Yg#$ zA)eI0RYspj)BhA%_QS@1tuGhoe|>GEivNCG`G0Qzuf=@0_}y?k*%J5GQoLo0Kt|2P ze;$p87lx)q`pR2*!@futX!mmGBrmU=QAV0_XENR#^$V_KGMf*l zA?)G&zn526E&kt?{r8)p|0!e$s3HBsaBtQquG(DxnDjqYn{pdAFf;#CA^*$f#zrOo ze+BvfUPO0=Gc#p(Lq3;rdKKgNhW39=rSf3@-`4$qvx@)z#`k|^^sV;)e=PbJipzT; z{rU8No5l10Qbqq?VgEN>7Z&hU(7ipLACfH@$SH1vCs`)fE@^rlceHJv*{nbHtxq2U>5xs?f+}b8=oK>r&n>y`fhYwZ8F-FAxe<~-S><_!sNm8X9)O$xdC8q>1*9O|5@VBS=0DZ3v; z&rZ!548Pu^QJMzN0<)&9t6lj~Y*@c*i-J*o<%TRPG3BL~oR9deMv~phX3v|s;E)U_^;-=HTj)a9`L^>8@3(4R zHexMvQ-Uy4aV3uq_^z-t_%;U}d{>-RrB|Mp|ChK0KA8S@rRe{$u~zZ_ufhLkCIKt+ zqL`A(iy!O`i&?qMM1~b9etr5csQ({B|FgWhT+sint*lh}{~qNhDY+lU7j7tad>~mi zg0tTV#|TXab1B@S_^rEI22=6JPjsU4i)Ox=LjF+irIS^B0YVUFdmYgvo%}>6{NhFV zWTYrH`tQ^9=sKFw|04Z}O7^ZErJsSz?srOthArRKqx3Vp4SqDcIb$OEUUjG$7*YFI z1%KbS{5K^i>UR6VO#5F!|F^kT<$wAb^53`O|F1GybG)nE|Gzf<>(Px1Gl7}(U(Elu zvQg3hx1#^MhvaXIW`0xjU*&!KCg@*}7+zckm_`5VD+T&ruJk|E{!f$4li)7oUnQ=+ zEB$8~3Le1!e|4jf|8aA(%KudD|1^>2n`-y}y7Vs-jXc`J z<0LivQy0_chN|~l%p@dB>0Cw)Ow$mQIk#x_xdUI;?LQ*@TXVcU;Qqg{v{Cf`uk3%1 zy8q`~zgnDnjdz;REm9FraS+pj0@+DCPO}K051+sRfD`q3Ip46|>}Uxqgj*sZlu)?T z@=GGO^EVM^!`SW`qvGEMQ`qj#ny}7)Q{JnB3xAgg%db1Rr4TSn{$DBR|2LN_ z``@F||3dly@3!-sq-_vxmpnf%#E)ktJBv-=_(kO&@SyVl9Z7#4`rlYxFUtR`mHzK* zpa17G_&va}z;^8^*|N6%z03qEnZ!&B-i^GIL{l#aVF6AcmV7;ibAVpgCg+%D&R!gS z_k}aEo8EcX+NqHRUb*5rHlG-A2Sh$S6mRz1tu e^c;IdF}}(RTK%eD^{akUe*YgM%^dguGy(uXc0TL? literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 5bf5bda..332f616 100644 --- a/package.json +++ b/package.json @@ -35,14 +35,13 @@ "peerDependencies": { "electron": ">=36" }, - "dependencies": { - "reflect-metadata": "^0.2.2" - }, + "dependencies": {}, "devDependencies": { "@types/node": "^20.11.0", "@vitest/coverage-v8": "^2.1.9", "@vitest/ui": "^2.1.9", "electron": "^36.4.0", + "reflect-metadata": "^0.2.2", "typescript": "^5.7.2", "vitest": "^2.1.8" }, diff --git a/src/@core/decorators/inject.ts b/src/@core/decorators/inject.ts index 7f0b144..a1bd33d 100644 --- a/src/@core/decorators/inject.ts +++ b/src/@core/decorators/inject.ts @@ -10,7 +10,7 @@ * @module @core/decorators/inject */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; import type { TProviderToken } from "../types/provider.js"; /** Maps parameter index to provider token */ @@ -43,8 +43,10 @@ export const Inject = (token: TProviderToken): ParameterDecorator => { return; } - const existingTokens: TInjectTokensMetadata = - Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) ?? {}; + const existingTokens = + (Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) as + | TInjectTokensMetadata + | undefined) ?? ({} as TInjectTokensMetadata); existingTokens[parameterIndex] = token; @@ -61,5 +63,9 @@ export const Inject = (token: TProviderToken): ParameterDecorator => { * @returns Map of parameter index to provider token */ export const getInjectedTokens = (target: Function): TInjectTokensMetadata => { - return Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) ?? {}; + return ( + (Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) as + | TInjectTokensMetadata + | undefined) ?? ({} as TInjectTokensMetadata) + ); }; diff --git a/src/@core/decorators/injectable.ts b/src/@core/decorators/injectable.ts index 2bf7e92..59a20a5 100644 --- a/src/@core/decorators/injectable.ts +++ b/src/@core/decorators/injectable.ts @@ -9,7 +9,7 @@ * @module @core/decorators/injectable */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; /** * Decorator that marks a class as injectable into the DI container. diff --git a/src/@core/decorators/ipc-handler.ts b/src/@core/decorators/ipc-handler.ts index 19bd632..0fb25f8 100644 --- a/src/@core/decorators/ipc-handler.ts +++ b/src/@core/decorators/ipc-handler.ts @@ -9,7 +9,7 @@ * @module @core/decorators/ipc-handler */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; /** * Decorator that marks a class as an IPC handler. diff --git a/src/@core/decorators/rg-module.ts b/src/@core/decorators/rg-module.ts index 6e0218f..4256e1d 100644 --- a/src/@core/decorators/rg-module.ts +++ b/src/@core/decorators/rg-module.ts @@ -11,7 +11,7 @@ * @module @core/decorators/rg-module */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; import type { RgModuleMetadata } from "../types/module-metadata.js"; /** diff --git a/src/@core/decorators/window-manager.ts b/src/@core/decorators/window-manager.ts index 3b08f3e..7b7994a 100644 --- a/src/@core/decorators/window-manager.ts +++ b/src/@core/decorators/window-manager.ts @@ -9,7 +9,7 @@ * @module @core/decorators/window-manager */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; import type { TParamsCreateWindow } from "../control-window/types.js"; /** diff --git a/src/@core/utils/dependency-tokens.ts b/src/@core/utils/dependency-tokens.ts index 5da002d..6823619 100644 --- a/src/@core/utils/dependency-tokens.ts +++ b/src/@core/utils/dependency-tokens.ts @@ -7,7 +7,7 @@ * @module @core/utils/dependency-tokens */ -import "reflect-metadata/lite"; +import "../../reflect-metadata.js"; import type { Constructor } from "../types/constructor.js"; import type { TProviderToken } from "../types/provider.js"; import { getInjectedTokens } from "../decorators/inject.js"; diff --git a/src/index.ts b/src/index.ts index 1e397d4..fbbe469 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,5 @@ +import "./reflect-metadata.js"; + // Container export * from "./@core/container.js"; diff --git a/src/reflect-metadata.ts b/src/reflect-metadata.ts new file mode 100644 index 0000000..f127f96 --- /dev/null +++ b/src/reflect-metadata.ts @@ -0,0 +1,160 @@ +type TMetadataStore = Map>; + +const targetMetadataStore = new WeakMap(); + +const getOrCreatePropertyMetadata = ( + target: object, + propertyKey?: PropertyKey, +): Map => { + let propertiesMetadata = targetMetadataStore.get(target); + + if (propertiesMetadata === undefined) { + propertiesMetadata = new Map< + PropertyKey | undefined, + Map + >(); + targetMetadataStore.set(target, propertiesMetadata); + } + + let propertyMetadata = propertiesMetadata.get(propertyKey); + + if (propertyMetadata === undefined) { + propertyMetadata = new Map(); + propertiesMetadata.set(propertyKey, propertyMetadata); + } + + return propertyMetadata; +}; + +const getPropertyMetadata = ( + target: object, + propertyKey?: PropertyKey, +): Map | undefined => { + return targetMetadataStore.get(target)?.get(propertyKey); +}; + +if (Reflect.defineMetadata === undefined) { + Reflect.defineMetadata = ( + metadataKey: unknown, + metadataValue: unknown, + target: object, + propertyKey?: PropertyKey, + ): void => { + const propertyMetadata = getOrCreatePropertyMetadata(target, propertyKey); + propertyMetadata.set(metadataKey, metadataValue); + }; +} + +if (Reflect.getOwnMetadata === undefined) { + Reflect.getOwnMetadata = ( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): unknown => { + return getPropertyMetadata(target, propertyKey)?.get(metadataKey); + }; +} + +if (Reflect.getMetadata === undefined) { + Reflect.getMetadata = ( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): unknown => { + let currentTarget: object | null = target; + + while (currentTarget !== null) { + const metadataValue = Reflect.getOwnMetadata( + metadataKey, + currentTarget, + propertyKey, + ); + + if (metadataValue !== undefined) { + return metadataValue; + } + + currentTarget = Object.getPrototypeOf(currentTarget); + } + + return undefined; + }; +} + +if (Reflect.hasOwnMetadata === undefined) { + Reflect.hasOwnMetadata = ( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): boolean => { + return getPropertyMetadata(target, propertyKey)?.has(metadataKey) ?? false; + }; +} + +if (Reflect.hasMetadata === undefined) { + Reflect.hasMetadata = ( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): boolean => { + let currentTarget: object | null = target; + + while (currentTarget !== null) { + if (Reflect.hasOwnMetadata(metadataKey, currentTarget, propertyKey)) { + return true; + } + + currentTarget = Object.getPrototypeOf(currentTarget); + } + + return false; + }; +} + +if (Reflect.metadata === undefined) { + Reflect.metadata = ( + metadataKey: unknown, + metadataValue: unknown, + ): ClassDecorator & PropertyDecorator => { + return (target: object, propertyKey?: string | symbol): void => { + Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey); + }; + }; +} + +declare global { + namespace Reflect { + function defineMetadata( + metadataKey: unknown, + metadataValue: unknown, + target: object, + propertyKey?: PropertyKey, + ): void; + function getOwnMetadata( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): unknown; + function getMetadata( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): unknown; + function hasOwnMetadata( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): boolean; + function hasMetadata( + metadataKey: unknown, + target: object, + propertyKey?: PropertyKey, + ): boolean; + function metadata( + metadataKey: unknown, + metadataValue: unknown, + ): ClassDecorator & PropertyDecorator; + } +} + +export {}; From 0b9aa6daeb3cbe65652329b54c7976b418b4799b Mon Sep 17 00:00:00 2001 From: "oleg.pronchenko" Date: Sun, 15 Feb 2026 01:54:58 +0200 Subject: [PATCH 2/2] chore: bump version to 1.2.17 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 332f616..af97b22 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@devisfuture/electron-modular", - "version": "1.2.16", + "version": "1.2.17", "description": "Core module system, DI container, IPC handlers, and window utilities for Electron main process.", "type": "module", "main": "./dist/index.js",