From 1c3211d28ee9df9b37b2709a84a6ab564861ba80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pons?= Date: Tue, 28 Oct 2025 16:45:35 +0100 Subject: [PATCH] Content auto pulling, git pull link fix and cleaning console.log/console.time. --- db.sqlite | Bin 761856 -> 761856 bytes server/api/homebrew/[id].get.ts | 2 -- server/api/homebrew/[id].post.ts | 3 --- server/tasks/pull.ts | 2 +- shared/canvas.util.ts | 2 -- shared/content.util.ts | 38 ++++++++++++++++++--------- shared/general.util.ts | 2 +- shared/grammar/wikilink.extension.ts | 1 - 8 files changed, 27 insertions(+), 23 deletions(-) diff --git a/db.sqlite b/db.sqlite index 39b99c0e2f618f667c78f356bbd43e374ff32f8f..c0229c89dad3e31ec2499a40ed36f605e8374e30 100644 GIT binary patch delta 50862 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 delta 48274 zcmeFa2bdI9_9)&}T~%FO)iXV0W=IVK44KY>j06#Bf(i&o=$vzIgk}az2ndXF)m1@P zF`~GJl3hj2m|@LvF|BD;)ZI1f|JoHhGK zt=TtfbFUhkLZSFGgi9fG*)qgN*zR0$%5wH^Gep+jr$wx5rfd~Pq=zi;dnDz?NVxmHBN2~i9VP`IE3+Y zxi3_x&$mo1nshez3VPxZRX<_eBJQ6`3W(_}+&WG*oj?!Xqw0jT6I8uXpU0^FXwd{! z0~-G|)lb+yK{c}axpFEme(sBOQ~5s9=axyFTPePxx~bgr(i`BYgwE5rdZq)lXP(X- zB<`K7R@M<+(aII-M)Wt2x|3jEq28~>lypNb6VV{_U8DX$OLP~g&FWvYL=SZ54)r8q z>JIh&B2Z8C^XF;@(${m{(Y_bdtgvLC`UdU2n+Zs@9v%2h-LUONH6si>p#Gbd=p|5x za3a0Y=8x6$FFQ>36$*#d8?;29dnoQlEm0#7btG9w^hJ)5+z3Hm$GxB>bm+ln)V&3r zjyt3!IDt3>Noy2!3Pp`pb8hWx8r59}-8X!f<~oS&p>`64qL-rCaaP)uL2DM%16VSd z4&_~0ADXm?ZbT0(qPqcXtwzxeU=^K2SYIZKnitbLPPuYb8}t>+X+3&jIXzgrZb^+s zQIAvZ)=P2WG_-Ot-J~H`uBzeMVB1o@UD&;ZK8@(MbQQ2~ixb$D6^mx?0DhL2a*eHtH@l;;2RTmIvy|fq+!*=_pD*J&6IH;+mED9< zE4VU=E+0>6TUWoS!r(mG>*e~Ocir43RG!XB@gL`jvFHI0*9kYd{^(yG?zUr*_9EX{ zLW1Aq! zoahiV$^i{*JE^o{bOwEYEz6_jmvGmjJ3J&K40n;=DA9JeQjON!$~B_pn>j|w)AHK7Mu*m`v14(@#14SBSCFJVT9_HnFGzLr}?Ns(*x z$|j+1C%0cIf(t+2%v~$?&|zr%F78zv*#ZUR}zhUjO#00a~JojT6{%wpHorWYUu_s7fr}JV9WrY!34AqN1r{w-F<|@ ze!{`M+-L$(`#5wY(kuYkW28jUv`4t!5+Bch1S%g0>?S<+2)Bg58NGZ2r=MVYoKurh zBk=6!o|GVGKgqpBNyE;J!)7=0EhJE1jNUX4Z&{B4+IJ=(0|dkI5HK1kp^&B7~6eyvjc zB)}&>iDR44Xpa9HNA^L^&&WD7b`u++NF{L7*$XW9|}!I(`>{mcF6v zBW&u-(-L{;()r|M;j5nfB&GNX!6&ug>&;JvKG#MC`o0hUjyPpdihn88Ie|Mw4pgEW zUsP++!#C1vh3oH9Urx-)HL^;l!tAwK0{&9UVDa1Skz&eUbd`#Mv?ma>C8LINVC@AH zRkZW`O_R(HL%@*^cnXGcFdy`lO~s5aowSz22A|ELx2DlM7L`u8^&a&u<&gfn6b$8j zZE7H_4;9h|tKCzM1YP!2E@%q-if%`+oK1%vo}92|k9q~e0k>B`Fys?x-fX%D+I$wN z7o3O5ffSmXgBfFcKi-ArE+7X9Uo`ToS*hfE4w2)~s4tnm!j~iXrP7dtN~8FpN7&m5 zy*!E^gzM6X?u_RG!{0Cs=w^*{AVocc907R zQ`Yn6QFzE`5I)+(_aXq~%TD}obm&RWA?1_X%wMd*tt%^6rFmXRz1$@vDs{9lU@7*O8_-2 z0mh?w_px2?>8buyOH4qnm1Iw$_hI%!Ein7gfa}uS;Jz^@_GLec1i6k|NLicTEd!Qd% z*vY8wURAwt&!z0e97Z&v;&!&N7B5?sij4~XJ$|oZBdT3PR)#ijtJl%amRqxlqB)*4 zM-5S9)Lhc1Y;lh_Y%k;@;iShJPXr6nfU?U>z0b{obY?X6gW)O_wMFd#epkartln!_s?^qrCJC3V-yCVFxEM2Ma;(LLMOsE9Me zS6CYKLL1ERL7dVaH`9m|U(x30RGe^;jV`b~pdboYJnPDa67h^KpYXV%zKm`N+VKzv zd49{(Bg-LX;1S-lD0hf?1g)ITOKTmxW)kMV!-SxpV*)?^5HNm@(e*x`xfvKcx~Jg`z{D zEmZ2)x!?&7UA&cg7JuNkJxBIM98Wh0*S1o#IwpVF?NkFAcNt}q#=5I7tJ2k;dmS1( znVyDr93p$63lQ~*R9%U6RBx#YKe(JKOJpUtLs}cJfc=WN!o2!CDAS9tQeDu$ub{-C zjYoPdZ9w~9r8MZ!mC&i6*5;ydS1JdhnSY?RA4#QN=zbM-W0gN*s{5LuK^;0sX#~|Z z)cp1@VTs?|4(gxnkqrpIYtfkNsM{n;YW_&Qek5^`#5%O^X^KT7uLtTxVguJxw_*^f z+`_3hP!kC0%WXR;aT!+qa@md4lwW1VqS~9O=P}`^^kV2Tc}-PoXGrdZlUbR zdMkAXF7rHe;jL7zJv-bm>QI8BIW+6GYE__Jw^4taq454;+LVdhiZvGOQV?bO!{ep*l<*hxYEHX0;;>pG?=G1I-YB=0ntvQWr}-ObwCV z{_-#t5@FGbmx09SBa|NhthSTgPg9-HyN^&Gc4!^YKbkv$yzm&HiRC%)JT(l}eGV8R z>(@L^9mK0R3e7rA*%!^eQh6qN^$93EUMr((_ESyL+u{Axbw?;Lp^qMeR`l+Zl(;Zy zXOdJj;moI~A!0SP6Sy6-{tT45Rp~+xJVQ+rQ{DC=#UuN(lv_->t)Eo+@ZPi3qf+T- zlXP$CP4zr=&yiy2(c!K%EvOGrmy4N69St~N#31ciOKlfj@mJ_R9kagnNJcS3#^XRwRDyH=# zK)CX4YB5Hr7Ful4PkjpmLR%fPh?zrlLQAH@UhS&CQ4=wZwcNR(c-9w(sMFe60F}z3asPzY(l&h2Xy;Ve^v(O2 z3W#7wR)QMggO4fLqKkDRHg>UBP5hL)Kx)Zfe%i*mDgU50V>k`^;2+fUJn;XlXf77= zrG2RGJgSG31eCO6^MDHHg)={=U>h@O7Z4?8166hSsHe8(Ahtqy{EO-)G=4{=+pA zFK9G9a5J5cw)X*n4vaBP=(eA!HBw%ae(BK8JEL8{P-miR-=<7x(u>q7mz8L7$P$Zr z&#UxV(!7n@`}PKs7RSTtq8&^!n@t*Tf{|BUqPs+ zYpQc74Dqb+bpzd#z;j?PVPtQ5c9l|bAt5#y7+Hr2wSDOVv2!k6*BLKzNkx-FT~IWU ztz_KoK)Y{KcWe67v_{JL{_H^3P$;ME=2XdQvinj#gVh!a#`C72)f|lmEiQEJU6K+Gymv*N!_Jq|?&YQh?N6C{i2vhdZAGV26_R=~j!L57g0l0tk zLx=X#OC^p4AB3+*WXEVX{`uB}bmw}=ZLzq%Coff~?8QBOJlU@=-vev{W>F?jqIm)GDh+6{WW$!&L-%~qq^pChKy&!qen9m&OdgZ)hMFD9uq3%rLA^_EM7yt1dhskTN{u*l z`gY}=!WoBErxHURonA{jn=hQ5_2sOPquZDFWZk($Djs*3J$7R<5la_LE`0!9)}ne% z;vR0^=<2m95FBDb9Qf1oe5UZ@8VC>ADI>%~G67^i`;~Qz>E!e}E})Yc(&Z=JVtDf3cs^S>-_Tb!97C zOTR~7QTuc4Yuc^ML+Z~t2ThX^B1rzC@e)5$r1C!HTSQ-Cqh=y|u6nWN_L`T~H!xR` z)2Y9xIIX}g(9U3ngYdf(@d|sL>QR+my@uLG_NSW2MVpmzT(~*2MW{bozkfr1{LO(It9CmZ19EcPQF=HW09#hWO(EJ0J!i-CNJvd?19rK6UD$!1AdEDl3DS~R-sQG3pk()&CZ z$dgK!jhU>Y98U+Lsg&MPjE9Uaw>MNMSSsag%<9HaHjl#_@doobeJEzNc#COo(roZM z(!qc`9!zDjIWa%I#cj!D0}jY6T{J~<(X_s3F2u6_d^T?@xic8Zl{MybZi6YFvg>`> zWU!PEh8<;-*Ic$Z^m$u4g@G*Tl0RE2RdQv$IUJ3qBMD#Lkt&*V`m7=1@<&a}#QZ!l zOSufa#cq#=+{v=dluft_wrJdwc1Qfh>{1Nm_hfSUXgcJNCN1eus+2Dl3khI=)ockT z^zO_#7|2jEC9HOXC+o-*5_Z2a;!cJ_jzFaxclq(V&oYj&^ zSYtt7$>GWPO{tW>q+cl}mDQVVAzLu(DF^Zqd$|zG+jDu7wP-4*O36TB5eD-49OjTY zlrma!8LQRcO(fjuY{{BVyQ1k*CKx$e1oBi$#h^Rx&WEz4NVMScU@qrN=#9y;HJNsKD``(G4HfS&hRXhY@GKF^Z%KId#h}F& zD|w?OU&Lle*dx)H!5#KPZF^Q>AfMUhi6l%hz0Yp-dy{EkRU#aSh2vqD)mZR2&Y*`W z24x*ZQ>kPQdP?bn-Qg;G%7$b*k&Twq<#0Y^_0Jnvfu!`dfX!O)MpEXyJ!OmeGrnTP z7YI1~j;P7)_Ugqx>Ww7Qsjx8{@mfL#cR3$VSn>vQEaGyfyxEA`ItLTwD!5$XwA+*l zl#F@5-sZBH3XxJEr%#xZ-dw^v8v}W~X^YKfwdZ5yaB93cn(_pFiHxaa*2hx8w9BY> zVkk?z7)qEzS(7~xwC90=A#2f|_Lj_+h{fuQWM8~6v!PSPq=LDmBOfrN5;1cqZL#Om4olu@%y^7mkFRVlOlSVCXbeW|rI@E= z$++zCP@ohH2dn`A@@IV+f7B4erSo`A@uqWi5eFu;7YBl3{(tSdJ;y zNlbtN%NKPOqM?x4<4b#C`g0`0`h3}&wH6E(MKdN!?<&N7F-yjfvj>71Tiop`2JB&1 z*k?^dl9{Of6b$4F8pFk~35GCtA?}5-(Vd5;l#D^4Oa53eHyHz&iy?nD*)QoxrQBvi z+-)ic(r&NU5bzfgW=k?;oun#5CDlx0b;B@y?r;W<82l!CI9YP}Om2rOn9TWd-YkqS zu9U&2I1i_aY7MN89xuLT?eIEI^|4|Qx&ptB6=V0}*D>Pj2l&;&ngBrKfLFU1`{p2c zwXshq8qvQ-u>IzWndh>$V%ZohWG#te$?mne0?Clck+ZtXu3W@mRa}6f?5U(NSBOP( z`f@gIvz3!^moIM5gpwA!KbyBi6z7W>2wflpliCWUdmCQG(it2E5Hl8C9%I1m^Ti5T zn+XPyNT8gs#vT4xKyjgnx{m}@z4|FY{foMa>PVRl24f}~&*q{LYbavKnerZ=$CM4_ zQ#NBfueeA=UGTn2M~@U=uYMR_M{vs^l}F)q4yN5)OhpXgLegPM+1%NvNpFm$!rpQs zn=jhKfn-Lp9-{`5@nFsv@p>IrqcIE>YjGu9u}C>t&J>N%l81`v|3k0RRfcdkDFziS zCLkf4cNdFZS2>l>r;Bc5zECWM^kGxM7;VDvdKlO;7H`m-jOJ{1gUc8WxI$*1Eo_Zg zydHgWFz-^#DEVxjY}i^dN6p1p%$hC+6QyLbXwVx|7E{=q83aIyOx%+97WCeN+gGs} zf$q3D6xZh+=}0^t4|&75pn+&49}efu2Ad^qaFhaBTRN?e27}>3%x17>ii(XG%5RCd zEHEB8;&!9nUPuQDj&#T!h`UmOWIAHVDmI9eCkF6-&O5C+09&azR@#6gP$K_LQ~gwnyBNC=6Gd5cD0*P0EAK|zZn=l0ocFpxtrOD0<-rH>mOu6Q&b zbh!fga2K3Z5k}L5ClP@ag27|76&&GmG8ytjGevW_XwMru15tw#CBNGqOW957q9u`p zM?B>ASRF=_#a}eW^|nqpB{&cD<}5jvFXHeA(@EHz=3vATih7bonCh}xZA|gD+{UC9=O?%4sDYFcX-^>*usHl>ciP}7 z`dk5MQU+6`5VHGI37F_@8i1M^E7(o?Xu25k0_zR>K&}uim5O>t-c&B<{O%kNK!fD8 zlQ>Ki`tcB{tElm-+<`PJ0?8akt1yt<=`(|Y+~t5VJxC1FQ%Ya=Adl6@Vox=vHO(#$bvPiO9inA2ycJyfI`6C!?-l+HH)%*lP|DDY&Ja25qGP0Wr z@VGe#k6TjkxGe^cKSbfNAq$-WeWywD4GjkI@sjKw4a$(Q0_C#vEI!gvU99fZai zowv#5$)c%iRG=TSf_}b6fCD>*M28;4`eHj&e`JIkchU*EgOp{$ZS>9UKLzbB`UVm$ zeO=vv^mc|ueQsvEppWjLd*01Zb(LwL9-w_grPto8-J*?ZPt^{n{i*g<)uU`}?Om$v zwVRmX%vH6a+NrhuYQC>|N%e8f?wX4ky2f8Kxu&<~8)ly7ubN$&3pF0i1Wi5vPyTro z&)>qI$FE=t{8+v__a%Ea_Y8L<^LN(7Jfxb>wW!M6QqInGQGc#}N_~S`yGFeP_WhmM zf3Q!m*RiWm;u|(8NqLmtvXZ<QObmIst z;(2Zlqf=clXgKBEq(yJ;WpwD^!^-!tP;j=m!jG5j4nryndn%hdW{+j{>4MMffaOL? zuP?P{-P)1wL5IdtSgrdmLsb% zR3wrL`^qr`h=QWtM8sh*SPL-uCJIJain$H`G6q7clWJY1gkN*zls8_~XXBZOH3>5T6i(aEU zV(^w7L02g0hNXcW_Mxd_#*lQFZFvloFPmb)XdxA`8Y^Kx==oWqUR%nS&1I4{S2^f+ zWieC%wgM%PP#6Oqe<7a=m;8>LIqr#hO-Z-k2)lg@6!r&7#hB4m^oNsqyTKZCgkmYZ zwE$ZLkJTD2Coxbc9`^*&CA-1lN}7_6oWq_e<#MU4J7|Wzb|H~ZV5qnu6DeCQNxwT` zjHhEEZz&Q><&FMuEaxhi!j71jRN4kI8;d*b@#j+|pQ&WDhhk}{lX9?F0u|RN2FiQA zwzMUow>e@ahba=wL{heZJ&{ZrY+qQ^KFk1zbK1Bu-d!#0jgz9`LuffG4yb z!n+jRFsn#}jAXDzBtqO$O~kLVi)s;G+$W#jsC263hJFlwLQ8(xg%D1uP%z}JDZeq9 zNd+tANHLi8njPkZE#{6`ixy9yJXM4W#_fSb!JA5EBi5AJl1tmmuule&QZf)Nxcz<+ z$YhTPjU|2B=T4;kahofe^B05WVkVz(#qBQp5)AZv3%!cC(i5RhWKDcRYbtpG3lNn7 zc~vaptLS}>q$3tjh4V#E+~qEXQofWw5DY~}VWK*0e2%y8F$@%eK!Fal^&)0_0@U`R zUPr(f0dY1k&SWuWQqj30kPSHLcf>*=OV9)Qy#6%oWJ@Kqn`G5<3>c#0D(|?9JQ2ul zH5>ggzc;4$hQu%oB<*2G<5$`3j|h)T{h%_Xni53&kO{#{uxB!kh{?7BQyx#n^zo=2WN;2oJf%-$ES7-P zVMzos<;a-{Z(ctWL&+|$MIaDjI(#KtJYm%r-KIh&>T~OJmTbmvGg!*z;uH+jQ7F*JDC`aTf{t*|=LuH~X^%PO!cZr)=$8@G>8FV){dy1i z>n$W+G4{~TRA|2gJwE2#I)nu+Xs4d(s}H{S!iM=xoYSW6*GJ6~l-wwcwr}UUA+>?& zj8V5N9LzZ#>i#0CoH$0*+IJb4E*NubZV>03ubwPo%1tM&{l*SN`wdK^h`C}Q=bWq_ zE@H}!U+CaovH@9)Oizq@$+AYyIZ-`SM3p@$?cWDcH^8&)CQ?x$cVqh^1|M6h=}R#$~niYZDK?Gy`>UfDFJ3r(0rC! z|At@}%ws9fV+3Wt8st#30s0*8V0wwwb5>_Oru7lYm0L8T=1!o$9&s?8M0)3RYHy8l zlRmo5!Su&i8!~lxJR2`&C?{k?2iH*pQU5U#>ZYugb1tl+%1PePyho`)2vt!x$7(s} zJhes4Rc`Hwnj44#h#SlF5jnK5hI5XsHefj^U2A+o4-_9Ob=OVvG@Ns!dXQM5a*H~& zd#p4bZHVxkbE$f$h$XkyXzlbyca*qW-5CuZ$8-~GCBWfcBaQlUvp%5rM_a}*J?n7G z4XQDZBusH5gXi<`=5kuW)NAf((4ojqQ{+~88-l>1AVGBQFm?{l(i z>l<&>PPUBF&GqGypo#5q#bMBAaMyM*xN|m%6)7i4l#+^1R3qI4rn?ry(}fSgG~DZz)-^|-5HPEgx~y$ zsMnXqsbG;Op?w9O3b*!^b~P5P#PVwu7D<6c<5gCUXs)zrtx$i_3fdXJ)>Z*sl_RPu zHGhPehlc z)lm1JR%I!i$fmfX$fEL_GK>GVDog0MSKaN4?i1QCb=WWb_IBaFt;$k3z9gb@v?$_) zcCv>5$5mNEC$dSCRb|0DD|tx^R%OYYhEq<)mITgJBVA3 z(N_@xj?q^UW7{RcCnTCd9fW9-Qi_-g7VyxbfCpWH^-V;nACgp0L;z9sL=@XqrIWue zoJ7Z{o`|W4swbi_FMT4y!v7W36P&)B1mwh2PjE_dVvRu!KQgX6}6H`4AQ~Le8k^fQE6P%x%AmBf#dV=$l+rj@QRZm2I%Iv*Q zO!Wk(bj*(We^2#9BIqJ%UhX9gkD!q52b)u;RK$fofv%Zgjv8vKvQrtvMy%75dU>+prw3LHhoey4FkhT*)%XgPUWl~51}Vz)3~{ulue(MP5-`ZI)pn*M}g~a$flFb zYJ8{4+&cHKRO^mcYSF%zRo&2QNv5w6G>x`4b4A|SOjosM<*r<{c6xO%nv-HI5^j$I z;C51nhzG}BGWnaM%UL{*7U z&LE7KbK=#mh{#BKgj-f;IcG^dTBN(fy|3e5`x3Dm-mXLIGLm}P)^G;vK8_Ss=zKDE zW&nE-`Z^=2(QZhjIj5(pF(-GEtkv}r7=3&RToU-QO!v{iu-3&XtTER|%vi>D4f^s) zu#EmlR?@=VaAp!KPWBQpO>3Ik9$?Ke>xFECb|-{ut|Or@m8-_fqp@ysfrEd|CX zVl4>bdXrRw<)jkm>q1p~d0v2Xj;`va%UOd$rx&Zrt~31@tD9KUa&ilFO_Ax16&|-v z^>NM~RejQqN_NN7vBNGCd=5M4lETX)H%t1CUfjx7cyT!;t!X(yM>LW4jRtkek;qYE zhGI6g&h_9%Dm6DbOH*iTi5Y;gwk~jUPD8cf{GRD4EE7TRmzW`9fhV~*XSZrslGESA zq?$+RX2Bn+uq$w3=dHl`N|h?7+~m(4Xjp|S%;RL%hZdR29~sA{*J^(6xfKEPqblr7IV%;>UuFxIVp~asb3{29=G}y z;adaJodY?wL%?i8SFMun8?^e)ZpV}}tA+Dy-DOryni>kYqKQn*m5z85h4@0;o;?fO ziT8Pa-}077yk~Wl_}BtG!$?}wa^|>1%>ApSA$x0RKEAjhU3rkR(FK_OkhN01@-Y7_ zadHt^Z9B$r*U@&n(3V%p9_Wfnm1FbH#Cq&KL{vF36MC(}G~zC}`G3&T-%@Pq?}+;J zf7;UD{{ijjlZO6aoh-9hI%(+dq@ll)hW<_(`a5ap@1&u>lZO7}wXIJY`a5ap@1&u> zlZO8O4;%Wc9M|L?HVpFLG3YkELUc8yNjUpr}k?RShWpU~a%V=hwu$}~|Iyv)MR*}=Xqw}bh2 zzY30+%xnWgy6t9kSray-TYDF?O~ux3YB!;a4d~YRnRl7{RioImB{RBhMs!t=wwcl8 zZ&7W>W^^SZy4Zv+*8+xf9jcGnTCS`53(vq7|>Tw~PrOqRnxY(w>aK=E^v%z3ZnU@???#{PAU%>( z^mC&8Jk3Z~Jnk#{GNTQnAd>@Rf0TRxyxdm|N)0MbRcg@y6*$Ho7~{td#I|%@CX3x< z^xO3oaFO6QS$$TM0o-KRJmBHR?C`pTZTB(;Qo1Ss^nFbA&ivu~nCVj7m_2QA%lEX! z-Moj{Okr!KX#AgEoxbOpQaCbk@mg$VW zZC_)1+rA2W+rFOuU|Sscv8poQ&kr&)Ii(`2pgU8aDY7W=BWGUJp&}m~5~Q3zceOeE z29w2XaeMSWzu#^KH&b?-8*K7A3>GMw`=)qj%6U*HXID$e@Kl)){;8o}Bx<+)`HvmoAuNowIHe0)2^(uI=dxp}X3!j2W z?8!`c@l~eI zHQ__O>NZL!eW1LB96Wh2<-BIPoOwmzw2zcUT5<&TkI$4tM2p^n{&VF4VrP=8tJG*V zDWM5S1$&r1#2#Sxv3Ic7u$y4$h_OrAS?oA=INP8(R}r4C4Q``Qrl9XiF$&lNoGpm;zvu? zw&XiT)RHwVIUJ#`Le$i@WIF0EuyZ)MHBsS zPPud_k*R=7E2dM+3LHmN;~sprMI6xHPAdaeQS@x?aWnIhCUqzAHmUAEqlhB5! zZCL^_n1;5PE-i~`Vh|7kt`4hiQ{x_AP1lx1IGU(A;!G7{HDs5TvvD+gR5ahEW#O^0 zT$h#w)s#CVtnSh>AHB1P?OJI$>sTCB*OoJJ?9tgWknI`A0@Gbu<{cYLb!nMe_!piJ;=zf0LTE zP-D=ntMHn&P*c#X+X}oEst8(jU0dU;XtishemX|gYS+%kG3*hb8tq!BrH(Kf?OLdz zjxoG;EmTg&7*4wuDyCzMTDul1rDF^WUM7_KqoPz0(-&gevj?}LO3hI);I)DL{wNrj z2FQ<&iUFq%pBh)z%pXlF|oikV#cpyD?Z>HVf=Np512>vJ|-6UM=;04;;q2pV`8y;kJpch1wJYs z?GRf5|Ijd`0WTG|cZil^u|M0(kBP-DLs}q~J*v!j9TGhz7JC+1a7-+|usVqt1e^_3 zIt+>sJDeB<-0jFqi0m$s;7Pz zCH+Hje_|=>^e)|1nEkbK2d(R1n(4U4@rBy&lwUEJ7KKL#N|ZW*+pKy{Ej;}({W^GU z{|VHMVfm#Ip8cFQ5%=y;Q970)FIUvoF+M@FPt}PM>K;{&Cb6?tolee{m9XJ)?9h|;q^rCVU4p~>&a6nXX^|(vuwf*M&->E+BQLH7@o|fN1d0POgS$e zDCcuf*lkljLpH5nIf-&!Hb!zj_}jh*g+Go_ex?*4lLVn69#N>CBOVdvA+AKAefM)U z=$do*Zs?L5h~7;b*r}8go%K6*=|r=1!YBQepVB%x!*mF!94_dFC_hlCDZ8Q;^Z+S4 zGTaS5w(GCtUQi;Pi_@a;CnS&V-^2B7y6Bu!Dd*O6J6Pd6t}_u~QCH<2YH*+Fz~I#; z8NZT(y9f#70%t)h0(^Hg`ds2J zq*~AQ-?oYvggZ%3)bCCXd>ilJdZOiba_^%DL)=R@?pw!^O&5(n4aze?&OV`#qm_+P z8^9#a(#g5q6vlGOCuxD&!TzY-c8H{DdZmJ1DR2ikCxs5J;rAe=kBBtgT@F*ukL_|A z?7~$RVljt1)^+#pV|y_=IiG^9U;MQP;vQpr>OsYNSu@yO9xtlBla!pF!B))+JyG~E zwjMCIEN=$e%aYxDl9F?2gnoFOHDCklTV^+d&E@{0$!3z0^Ye(7KEdilyX-5P)!1Y( z*2yL*IVY2FL852tsK2u4xhL4p7=5$9nZ+jPvDz(3$+@>go%XYK5v|w^#+Y;B4H%Mg z%edVXbKUnsZ*=>9wmU{|O*Df6X0UG#i%*i0^T%05*P`A}vJECc-_T4q)1o@~NRezg zpQB;|kr%tRj(f2V-B3-WwYj00f<$_#r-_ODuK!hVzgkUXB(gol4#rfpHgnBNNI)&R zDIh61w^VIZp!=U@j zJ@zy^Q6j#sSpmqMs@JFFeCq=8DX8=e+Yf8ww>E1kfLl|bii7;s0SZ=YdDOPc(B zRs(LI>eZ_w{vY$Lm zp+4U-{JqbS6p5(aU%$ zDgx>LM07^4miau|aWP+y_LX=RjX9T(quDF@r_q{gSr!dk#i#LVE!5O}nwxUAERekn zG*}>SIaTiRPxFcu&}1mN8$PJVedHrLxl264_xF+g37zbnow0u=SDz|(J*SyIhjKR0 zmb;3x?JuOiB6sU%f^KTam(yij0pG~QN~cclu1yslR!<2}&X} z^=zecw%pwswBdfT=aQUmx-T71#6}HYsC4$0yGAoXH#zUhy3*4YD4lcVZqDEgnogCw zC3F6;vnc0=o^n@WgzxVsIVGor%`f{CGl)^3r@tf}=(!2%Zs@Q@JqT^@$Ggzn1>^{{ zzlkrS6$eNP9hj?Bqj56`1DX}$Yfx^5vK4){kei4*N-dgnHg_}98I{Y>;ib_0b$PxE z+P9I<9*uUzwrjcC4vAbcNx5lOqYsV@~<>It)UlJ}81xf^-Hz?;c8 z84xunS_8rCfH6iZGHfBcqBXa2{e?-J$$eV9{Jcz{){wtwv6oZ@b}<@*kcMz4gd~Ks zAs`65Az&Y=_d)nGgeZgvggYQ?hp-aD-4OB+8X@3xu7Yq4gg-*K9>NU}c0#xj!c7ov zhHwjnTS0!MxD8%*LAV{lA0X_2umQq#5Uz!QGr@^n4dF@%S3uYX;W7xV5Vk_t0%0?R zOCW55a504S5H5mnA%qJcoCjeYgtZV_AT&c*1Nq~Bid7KKg^-1SEpwG2EQGKa0xsQM z5O7H+LpTM(6bLgQoCaYggwrA113`drF9ggr%puH8jEmF2-|@FUL6{A}2_cR%-vi+s z2+JWX>hQj#`Wq90s{<3X0K$9-XFb_0W$5fIzX@%L@oUlj*Te4l>nxwcZ{1LRf{)@|qVY%{?TP;F=Vv<`1JLE< z?&*GM_0!JgcSp(I%!Na`F6hcX5w*ga09j$RTXC`QNxt?w?U&k5gieQuH?cIl{Ali3F0B4Ry-huY zeT*%!!&C=Vc~u|gQ6|Q8rvE~_X*KmHYQFMkMVkp{nw{kA5|2CgJ z7w;>jWaJhft=C%WQRJbjlchy-+6j6gb-vbQWc zrM(*DM3HFxs8bnO$&aE!Eh;rI?nwFW?XXDVHfy6tD`@b|6GaoEs-WDEmk z?eKm6ex@J(v|;90&e^Z(CJbT66eEsYz&DN3oziw0U%Jdc24lF!V9AfvwGsATfl^kY zck3j(N;fwV%D@>yTc2?Ncx%*wFSJV+_t6Jc@P4fkyBe*0lIf0#*y6Ecw`|e~CHf^r z4?W3P#G=J)oO5{_`kRB=a@%XKL35s}qPwgeD8gPcM2gUzPf12dwydz=&LEjDkuy(* zQG1~-PcuD4_PESgN+#J^5FKiu#ZNOP{Auf1CVZ1y@+*e0gAMe+)6C$`m_^Nljj-46 zr(P%u8xVH6fqt2t%Z!;BJ3y~2RWmh20NzBoh}^tWdit(bR2kMG1w1~fzm z9r$}MCe$M+(f_W5a^tgAD++;8n9-sKGD^<7hlI*L z$MnV2Z1#*4-Ka?=!ahHw@2TgQ2J!o{5x8|?KVp#e)!@n(e{Vo9JttMthBJp_8xU1a zV(%cR*YnIEJxd}fPa5d->3GYy4~t0h1Zg5 zq#kmyrnv@AV9t>fnG2UMRt4#uhnc#aI#N8ux(4aTsx0WMGx(VB)i%C2fp&k*QNqh( zRqu$WGF?z|mTCf;W8L+ZUpc+X?pDU;G;^)3dHRLkISSRxAnJs3ClQB4R`Y1h z2UMM~>J(xYiGfB7z~C#yPvSGAZF32VA(Yz`%5CWIV(w8%#y4phFOnoyXE$_cAIGA5mhnk6 z>5nYcVKrYjnc&bAH@{9Q?EOo)B--&jY@16<__Oo|qi)D>^Uwh!?pq$BoL`c1hJA$j z?~z>@Toeb|^bDwpuK1dvg!?`w`$7kMjOvR@qxhltb06gVjJ)Z{Tb(fEbJ75f;3uXD zjpq0|bln$ZBMYp?n@k0oJdKfWrOoUbM2PGW@jbp+Vfxn@h>W}b3hr;s~;5zcQSR$nDb zc4IRKyBoQan9DTHYRY-@IdVrY!sRcif*e)|P`E(F@t~SbWJZ8w$mehE^hvL~zWull zLAY9bd}<;xcb)#}9!f(oIfZ(?+N++xj;D7n*^4e4f@a$Ye+?$BkVZmQ3d$O(IHR-MWW!(&Yi?4oOD z)i!}r;9E79su<=S=6=PeipN0gP*R*Zpg3U6NUOt)?i|hytu!`MK#Sa&Ok=YWpyUo- z8kmXp;{aevZ#wP5w869r?qkaQdTjU@oWrU7+LYYj!pdH!HI>wiM#XJQM%lEeiHeiU&5 zs;nV;3Ih+QJw#LMzyjsmsgbh*DBOOKxInFwGxjIUe*=ba4W+zV!E&k(ln*PfM%OlR z1JL1b)&0@F7u2kZ6jx*h6zs?wMO!sV>eG$sK^&RSn%0)XTU^WD2N zPC5Uv`iL!{9_DN=?8s;IZhhPoG`ouFNIn{~MT86PCQ{O23tFRB_7jHeAqq5}Q+Q$b zUP4FUDd$!Q3e>*`(G|V_Akh=mEhVTM*&T#RghK!~2Q9me=!E`I1ljY7TVS>H6{vcl z$8RJql~lb!mz~;HOE+L;neM{lHxV1enO~gl>rv%aqQ{Y>dI=BTN}Pfx@UlW#Mur#J zu0r26>T{G$_pOYP9>O;l z65T+h3F~MaeO#8jn21wY3rK|vzDq3l!8gDS{AbI!@yMAZ)*dfm=Z%C$s7(>46QTx) zusTgFqELA{CsH7MoF{%EkZ&v@5wyw2jTVNMh>hfLrG+3ZPWX8x(Ns-v<|^V|k`k#o z=X^ebR;(a)3f&HJrzl1J4gvH#K7{hLDRZGSPv@o!X9tO!R9)~CLX$HU+LJtJjlH3vTJ09N@Zzw$tscM0;IZm0 zdV|MkvK!0>hs)&hH;?TF2XJE%To}=zYi80m^zKZ0h3bN#4REm71Hmm59SWUJ+i~G^ z!gHt7FA>~=L@uLq<$Yxxy3R>IhDx*PjM%c8)?4Z+=cS{KcD>E&wz_O)z0YOxJG?%i z*<-c1jApadY_K8XE7d5x2bq>1zYt`+)`XIoEE`$gp zy#6oM`Giy>e?N^53Y4DSTGcMQ+XxL^T-<$UqQknMZ;>_?B zT4OJ?!3-aulXMdvH`9oel*{1$2Pa%)qYLa#9bG5tq>;*Z6_g4d8|_?&6%wxBh;bCYPWhFZV-@KeQ;C80rlW>d)*!r0s*p4*kz_P%Gr%w zq0Vx)U@lg)gz~Y3(PfR;1Ae{VQjVL9p^VR4H2PZ5ye_nJ-R)kvJ7vN;H3dTS2RX_w zDa^5JsBxIqdZb?qol3ivIzv>sLl!_dve&Bg(7^?f6>LlfI^?B5j?dhP6S5T~Q)%lcN+I>JH*9!l8nk*n#p5l`Y;oI1y`rFAL7ld+6NS@~l%GQP zZDxC*A6wW?Ltbv^590b;^S@(E1>C4xlfo-m>L(75F8F}s9(3(`wn6Btr>0YA@H$qH zOE5rKy^fvRK0@{szCWL>r^Qcb><0Epi4&tYvf>4y-YCD3-HQnyg@T*d_7lOL!V8<& zCZe-A1P~Dz0+{i1g!_-O+-;RGr4)0*493f8v97mHpNGic{G^_HKN@p z)D|k}q6;%gW-^^5lgFfKVv$-G5)iC{T!RSi6kNCvol=x8y6nPjSKasrM1&SCt!F0E z2Nb&zHv<>Whzd1w4+U`3n5B##k6Chm@L=$$KIH!j z59$|6 z!g};*)Lb2iHo&}BoA#jfI^gJ_bQZtpM7MG9EjUM87it1~){l@ky3zIeiT-0Zis-h{ zj6Ln>93JjLEB)1cJLE+UD1U#EQxg&Tf(%O`$#s)+m|VAxSbN9;C|Gil{?{oz5_Ae| zI5ZSw;%q|TX*M3FU{@LEfh!;&%bQ*ga$&J`$elewvw-U*$t_dBjG$PlqgzE zaxBY=(`-4DmgrQL31nry#Pb2X+=2qS^Pj+tt>}ZUuuc2giadL2UhXdFI6mV-PxlSa zw*f%--6-9xdl(`XP3E#WLTnR@uxf9J(<7|&8qlsLpakuR9`s&S(pjJ_rDEEDOUcV# zDdWY?RcrSklZ-gx^Ou;02_Og`%pM{S_c5xXma|ZMI*xOz)>C*XZ{F;sVWPm%PUyUR zs2W4I^-7(+rgSYeL^a;;17`N!y+hQD@ly%4;7vzG2~I5q|3o$slcL2Lzs}nB>7NVQ zcENm-z~6@*ZVPm}U8&-^_vUtdw`%ria?$+kSW5u(=rso>!m(y@ta%eE_AXnx>R~N1 zXQ?@SkNTR>==0-YmFEg^F(oNQQK$&1iXgH{IV`1OkW`Y1tJ+S@Mi}*nCj1|x>~C0> BY#smr diff --git a/server/api/homebrew/[id].get.ts b/server/api/homebrew/[id].get.ts index ab8367d..6d8df32 100644 --- a/server/api/homebrew/[id].get.ts +++ b/server/api/homebrew/[id].get.ts @@ -14,8 +14,6 @@ export default defineEventHandler(async (e) => { setResponseStatus(e, 401); return; } - - console.log(id); setResponseStatus(e, 200); return {}; diff --git a/server/api/homebrew/[id].post.ts b/server/api/homebrew/[id].post.ts index 1b58876..aa48c13 100644 --- a/server/api/homebrew/[id].post.ts +++ b/server/api/homebrew/[id].post.ts @@ -14,9 +14,6 @@ export default defineEventHandler(async (e) => { setResponseStatus(e, 401); return; } - - console.log(id); - console.log(await readBody(e)); setResponseStatus(e, 200); return; diff --git a/server/tasks/pull.ts b/server/tasks/pull.ts index 5fcd95b..4b9434d 100644 --- a/server/tasks/pull.ts +++ b/server/tasks/pull.ts @@ -91,7 +91,7 @@ export default defineTask({ function reshapeLinks(content: string | null, all: ProjectContent[]) { return content?.replace(/\[\[(.*?)?(#.*?)?(\|.*?)?\]\]/g, (str, link, header, title) => { - return `[[${link ? parsePath(all.find(e => e.path.endsWith(parsePath(link)))?.path ?? parsePath(link)) : ''}${header ?? ''}${title ?? ''}]]`; + return `[[${link ? parsePath(all.findLast(e => e.path.endsWith(parsePath(link)))?.path ?? parsePath(link)) : ''}${header ?? ''}${title ?? ''}]]`; }); } diff --git a/shared/canvas.util.ts b/shared/canvas.util.ts index 8344631..7eade22 100644 --- a/shared/canvas.util.ts +++ b/shared/canvas.util.ts @@ -482,8 +482,6 @@ export class Canvas ]), ]), this.transform, ]); - - console.log(this.nodes.length, this.edges.length); } protected computeLimits() diff --git a/shared/content.util.ts b/shared/content.util.ts index 7319b24..facc0a7 100644 --- a/shared/content.util.ts +++ b/shared/content.util.ts @@ -139,11 +139,12 @@ export class Content try { Content._overview = parse>>(overview); + await Content.pull(); } catch(e) { Content._overview = {}; - await Content.pull(); + await Content.pull(true); } Content._reverseMapping = Object.values(Content._overview).reduce((p, v) => { p[v.path] = v.id; @@ -230,7 +231,7 @@ export class Content return Content.queue.promise; } - static async pull() + static async pull(force: boolean = false) { const overview = (await useRequestFetch()('/api/file/overview', { cache: 'no-cache' })) as ProjectContent[] | undefined; @@ -241,19 +242,16 @@ export class Content return; } + const deletable = Object.keys(Content._overview); for(const file of overview) { const _overview = Content._overview[file.id]; - if(_overview && _overview.localEdit) - { - //TODO: Ask what to do about this file. - } - else + if(force || !_overview || new Date(_overview.timestamp) < new Date(file.timestamp)) { Content._overview[file.id] = file; Content.queue.queue(() => { - return useRequestFetch()(`/api/file/content/${file.id}`, { cache: 'no-cache' }).then(async (content: string | undefined) => { + return useRequestFetch()(`/api/file/content/${file.id}`, { cache: 'no-cache' }).then(async (content: string | undefined | null) => { if(content) { if(file.type !== 'folder') @@ -269,8 +267,13 @@ export class Content }); }); } + + deletable.splice(deletable.findIndex(e => e === file.id), 1); } + for(const id of deletable) + Content.queue.queue(() => Content.remove(id).then(e => delete Content._overview[id])); + return Content.queue.queue(() => { return Content.write('overview', JSON.stringify(Content._overview), { create: true }); }); @@ -296,18 +299,15 @@ export class Content { try { - console.time(`Reading '${path}'`); const handle = await Content.root.getFileHandle(path, options); const file = await handle.getFile(); const text = await file.text(); - console.timeEnd(`Reading '${path}'`); return text; } catch(e) { console.error(path, e); - console.timeEnd(`Reading '${path}'`); } } private static async goto(path: string, options?: FileSystemGetDirectoryOptions): Promise @@ -331,7 +331,6 @@ export class Content private static async write(path: string, content: string, options?: FileSystemGetFileOptions): Promise { const size = new TextEncoder().encode(content).byteLength; - console.time(`Writing ${size} bytes to '${path}'`); try { const parent = path.split('/').slice(0, -1).join('/'), basename = path.split('/').slice(-1).join('/'); @@ -345,7 +344,18 @@ export class Content { console.error(path, e); } - console.timeEnd(`Writing ${size} bytes to '${path}'`); + } + private static async remove(path: string): Promise + { + try + { + const parent = path.split('/').slice(0, -1).join('/'), basename = path.split('/').slice(-1).join('/'); + return (await Content.goto(parent, { create: true }) ?? Content.root).removeEntry(basename); + } + catch(e) + { + console.error(path, e); + } } static get estimate(): Promise @@ -456,7 +466,9 @@ const handlers: { [K in FileType]: ContentTypeHandler } = { 'cyan': '5', 'purple': '6', }; + //@ts-ignore content.edges?.forEach(e => e.color = e.color ? e.color.hex ?? (e.color.class ? mapping[e.color.class]! : undefined) : undefined); + //@ts-ignore content.nodes?.forEach(e => e.color = e.color ? e.color.hex ?? (e.color.class ? mapping[e.color.class]! : undefined) : undefined); return JSON.stringify(content); diff --git a/shared/general.util.ts b/shared/general.util.ts index 123ec23..9f528dd 100644 --- a/shared/general.util.ts +++ b/shared/general.util.ts @@ -56,7 +56,7 @@ export function format(date: Date, template: string): string for(const key of keys) { - template = template.replaceAll(key, () => transforms[key](date)); + template = template.replaceAll(key, () => transforms[key]!(date)); } return template; diff --git a/shared/grammar/wikilink.extension.ts b/shared/grammar/wikilink.extension.ts index 607983c..b396480 100644 --- a/shared/grammar/wikilink.extension.ts +++ b/shared/grammar/wikilink.extension.ts @@ -50,7 +50,6 @@ export const wikilink: MarkdownConfig = { } else if(match[1] && match[2] && match[3]) //Link, hash and title { - //console.log(cx.slice(pos, end), '/', cx.slice(start + 2, start + 2 + match[1].length + match[2].length), '/', cx.slice(start + 2 + match[1].length + match[2].length, start + 2 + match[1].length + match[2].length + 1), cx.slice(start + 2 + match[1].length + match[2].length + 1, start + 2 + match[1].length + match[2].length + match[3].length)) children.push(cx.elt('WikilinkHref', start + 2, start + 2 + match[1].length + match[2].length)); children.push(cx.elt('WikilinkMeta', start + 2 + match[1].length + match[2].length, start + 2 + match[1].length + match[2].length + 1)); children.push(cx.elt('WikilinkTitle', start + 2 + match[1].length + match[2].length + 1, start + 2 + match[1].length + match[2].length + match[3].length));