From c123dd9d685aae55369903bb8d7ea80835209f35 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Sat, 23 Sep 2023 21:32:18 +0100 Subject: [PATCH] Switch to astro-redirect-from (#830) * astro-redirect-from prototype * move out plugin * switch to astro-redirect-from * fixes * new post: astro-redirect-from * fix dependency * test fixes * downgrade and lock astro * until fix for https://github.com/withastro/astro/issues/8649 has been released * mention debug json file * fix e2e test --- .config/astro.config.ts | 5 +- .gitignore | 1 + README.md | 12 +- .../2020-05-22-gatsby-redirect-from/index.md | 2 +- .../favicon-generation-with-astro-teaser.png | Bin 28371 -> 18307 bytes .../astro-redirect-from-teaser.png | Bin 0 -> 93689 bytes .../2023-09-23-astro-redirect-from/index.md | 168 ++++++++++++++ package-lock.json | 206 +++++++++++------- package.json | 9 +- scripts/move-downloads.test.ts | 2 +- scripts/move-downloads.ts | 8 +- scripts/redirect-from.test.ts | 32 --- scripts/redirect-from.ts | 76 ------- src/components/Changelog/index.astro | 4 +- src/lib/astro/getAllPostsForSearch.ts | 4 +- src/lib/astro/getSlug.ts | 22 ++ src/lib/astro/loadAndFormatCollection.ts | 17 +- test/e2e/post.spec.ts | 4 +- 18 files changed, 347 insertions(+), 225 deletions(-) create mode 100644 content/articles/2023-09-23-astro-redirect-from/astro-redirect-from-teaser.png create mode 100644 content/articles/2023-09-23-astro-redirect-from/index.md delete mode 100644 scripts/redirect-from.test.ts delete mode 100644 scripts/redirect-from.ts create mode 100644 src/lib/astro/getSlug.ts diff --git a/.config/astro.config.ts b/.config/astro.config.ts index 13e3fff1..985be56c 100644 --- a/.config/astro.config.ts +++ b/.config/astro.config.ts @@ -4,8 +4,9 @@ import remarkToc from '../src/lib/remark-toc' import react from '@astrojs/react' import sitemap from '@astrojs/sitemap' import expressiveCode from 'astro-expressive-code' -import redirects from './redirects.json' +import redirectFrom from 'astro-redirect-from' import config from './blog.config' +import { getSlug } from '../src/lib/astro/getSlug' // https://astro.build/config export default defineConfig({ @@ -22,7 +23,6 @@ export default defineConfig({ } }, server: { host: true }, - redirects, vite: { resolve: { // for making content -> src/content symlink work @@ -49,6 +49,7 @@ export default defineConfig({ } } }), + redirectFrom({ contentDir: './content', getSlug }), sitemap({ filter: (page) => !page.includes('page/') && diff --git a/.gitignore b/.gitignore index aec6908e..7b56a92e 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ playwright-report/ playwright/.cache/ **/tmp/ public/theme.js +src/lib/astro-redirect-from \ No newline at end of file diff --git a/README.md b/README.md index 101719fb..59bbfe53 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ - [📝 GitHub changelog rendering](#-github-changelog-rendering) - [🌗 Theme Switcher](#-theme-switcher) - [💎 SVG assets as components](#-svg-assets-as-components) - - [`redirect_from`](#redirect_from) + - [astro-redirect-from](#astro-redirect-from) - [RSS \& JSON feeds](#rss--json-feeds) - [✨ Development](#-development) - [🔮 Linting](#-linting) @@ -145,15 +145,11 @@ If you want to know how this works, have a look at the respective files: - [`scripts/create-icons/`](scripts/create-icons/) -### `redirect_from` +### astro-redirect-from -Still a remnant of the old [Jekyll](https://jekyllrb.com) days, which survived in [gatsby-redirect-from](/gatsby-redirect-from/) and now works in Astro. For all post slugs defined in a `redirect_from` frontmatter key, redirects will be put in place by Astro. +Still a remnant of the old [Jekyll](https://jekyllrb.com) days, which survived in [gatsby-redirect-from](https://kremalicious.com/gatsby-redirect-from/) and now works in Astro with [astro-redirect-from](https://kremalicious.com/astro-redirect-from/). -Before building the site, a script scans all markdown files and creates a json file under `.config/redirects.json`. This file is then imported into `astro.config.ts` under its `redirects` option. - -If you want to know how, have a look at the respective files: - -- [`scripts/redirect-from.ts`](scripts/redirect-from.ts) +For all post slugs defined in a `redirect_from` frontmatter key, redirects will be put in place by Astro. ### RSS & JSON feeds diff --git a/content/articles/2020-05-22-gatsby-redirect-from/index.md b/content/articles/2020-05-22-gatsby-redirect-from/index.md index 5868685e..e22577e7 100644 --- a/content/articles/2020-05-22-gatsby-redirect-from/index.md +++ b/content/articles/2020-05-22-gatsby-redirect-from/index.md @@ -2,7 +2,7 @@ date: 2020-05-22T14:08:00.367Z updated: 2020-05-23T11:35:12+02:00 -title: Redirect plugin for Markdown Pages in Gatsby +title: Redirect Plugin for Markdown Pages in Gatsby image: ./gatsby-redirect-from-teaser.png changelog: kremalicious/gatsby-redirect-from diff --git a/content/articles/2023-09-18-favicon-generation-with-astro/favicon-generation-with-astro-teaser.png b/content/articles/2023-09-18-favicon-generation-with-astro/favicon-generation-with-astro-teaser.png index 4d2dbd2f8fa1788ce204c35d812ed68266c5c659..e4857472125560bfa30efcf530252cfb14284069 100644 GIT binary patch literal 18307 zcmeHvXH-*LyKbb2ii#o~1Vs>~7wKJ^fJ*OOI)q+BM^scw1O%ibC?LIt-lbQi6M8qH zhZ@>lf$Vd>ea0F4e&_zU_JS{oNs;Jveukye^7oYcjFq>H4q4NL;jhxDhNcN z4Fch4U%>%>kx)zT0D!`5PXP$ndBn4QC`)z{{s z8mlz272#{&Mz~~o-3)>q&phf8UP3w|9(n*F5U9US2tyGBx=-;x`;fSD8M9!9?$+x| zn1B4!#~WkJ4AB4h69z>2v&e;adh9BJXV9sMUif+q--`i&3EA~V5Xf=c zT5gSP@A6q+Z*LE|p|dWK$8z2RYqX198-G~R+#PJ1m0PQK8i)s0#9YIy*mYa>?oWLO z1?xlBAlBozfpkTW0Umn0Iwnt>X0UfvkVj$YDL^O$151I$()8E5!n5C+qZqDU2y9j5 zhSXx$7vab%iz~^n8!zSqCIg;J{c}^WhIp_okboTbA~D6=9=ta(5QPV!S5~KD3DB)?iz}r4vH$s=sDuX?GCpsymxt7h9o2f7lMQ6Ctd37x zn-(MwBLD^5x())#N0LwzKYAR48Y@c&^uq+C@mdw>K*o!k2nR%|JaV`o^fKXNr&?JwX* z3{B;2*}yJb&^ckU^)s<98@sTA9-Ua1B`5*C6cXI$~7++CvIUnTb=Sh~BvzY1qHACM- zX&*3ikVThfJM7AZfwC%98Ohf=$u5X+x(t_UXRVbpwNh z8$Z|cECh1$B`)`upx(i?vv|aPkk%E~OP~gf|3VZ)g0_~8Pt9U;?|?v?{K0@CqZB^+ zIyyI(l-xUnw)g>u0_Y0(GsUU!{U!+X4wxVS**-`p?=v-wa4S|hHV0J4xIL3nU4yhc zCpRi=jsy3C`arG9XN3nK(0Qdt#=?37r&DjBDx*U-l^{4N}T0Q`BFmx*TQpvGmxE{i(dg1~AD+wNIg71dGz$A>`u?6~`2P^iaH=wlBUG9KY zlW2jJn}zDa7hL+0yY2}l{V#~57jdSQSSr-4Jr z4e>LFUnywM`(#gN_%DukgnLr6vr|usP5=67CRrlb2Is;hM@05U)qaAHWQMyl01Ysn z5xF-+0s=_^5tG!vvCkw-EvZv%9dqMCflp$7e!dIsUsGAfo^%1N4#w=ydcZUlH!odC zrFvJ$XLA6NkSd)rGG#Fh0;SGlEdCrejI6q;@Y%e?0f;6}4E6P=oJnCgpa6Crz%Y)B zh!z6qI^LoeU{Or~BbY@8&#y;cI=7oLpaNh^<*KAVsUt`kf(t;+wB)p9_9b3d@Bl0t zTaW?-3`PN;JHg0X7ot7t{QY}wX;aM=H|WQL-DW+0A2 ziI+l6qab9uy}dmmh-uDe(F1i=(?$_x+^*xskjT`-_RWy^% z2botse?9@fN7iA!4~QoW$%-+3ybst0 zBVqq&3~Mdw9d!Xlg&ScgmursmFGko5z2vYGO78Bs%W$=}wmRoXg$Db)6zgG`N8G&- zZyXNaU!A0E@!W}EGVQyMvtA&)1KhHlbdQi;S)E0TUCJ=&kJ9=tmv=`Ri3AtMr2B3I-6D!eHwK?mq>K?~TUK z3>vI;AAS%5dX;-X(siTOG;|+hR0-wq{gb04dI)|V>f`#&k5TF>&o39JXr@fYw2Z&nD zI!d;GK9VmhC&mgzx3;zxT`Qc%5KKf%M@jjiBhqs5gGyv#R$>kopGl*2F3mNEE`)GG zF7=>0ijjB9?AqRC0Re*72s96bTT|W}DMC(0&+|pN`q;q2(!SlK7ebM-C)S^5um0Jn z6rXMD^BG~03;Jx@oE$bl;W*DadmA>kwjq(%_lQPTCxDBKuGrXJef!0X&iCL~QM!j5 z+d?J8%LIO(Sq1Bfia$%p4P95g&kHM#J-Cr5OXHU#}C+Dud>5=b{jPK)MPk>m#q*1*=*A0j9Gryn@foLUS9=Q1EaL@v}U z4*sVd1#o?(z7Luru*!lD(~$Y~LJHh`eD01jR)bNwOgSGT_5GW96=Np>=V3te1y7Vf zD4i23a{LnjJJl`&vLjpn8m&L}s!&;Nv4CD5ZnhVv!|BADFh7uRF+hE&uH>LavedzpeDXWCj%t@Fr*j+}Ordl^R=dLSG$s$( z2|(=|3|$0(C$Sl8M7*&Q|B=s+)zUbFPMU3U=zt0;7>qT-Rn@gTX_I9Cbrgrl+1o5F z9X(Ae;hzWCl|AJXj>`t+vL@&=hi7khm-1!G7oT7wN}qt19KeZ;`id&xOpJh7oHY4t z5gPfSe=MihnZMPsB(d->dtk}k3iPp<>>yY&rR>XJxyrmfTD{tynK+*OGeQM?|jOGH{x`py)U>6kDKM`{WvGJjX#~r@{1> zK=F94;I$I3o?@1QDiL-d@nD3l$}wPLV^jGOgewP(bSJYi9T$>^OeH|oCC7?ve%TK9 zM9PN!l`z&#F$LPLle=1SCR1L>HSZ0-M^rC{6Qku!oW)|lyTkqBhLjlb&Cehgm^Yte2GhIUg)f$sH zo@C^TAfZhQpOW8&{j17tq4O#Piqd9=#D+2>R&V z;ItzQY*6kvdn^DH3Jh{bM{2!0KR;IaLL`2?^0UZ0EyDa{Oors4rJKY4`d^b)fTFu7 zDCCMrhl+*E#_U>>^Tl11xS8wrmAkFN>ots>JpKH+A(x}?B)Cvp0{IT3@({gI?e11v z%9A#O@!1DVCFCQcm(J_-rtfebY#q7&emhabukUEX|5n&W5Rq87VVcO1m;3S#7I3{* zC+{?3^}Ql$Z+Te@#2R`zy#%^!Osg>y>h;m*&#+~RuRD-PtjNX`-ANYzh|RkLKEh<$ z?qpHh<@Fww z?q9<1KMf5HrKJ)f>tPh`tV_S;0f8lO2nNnd5DX4&?) z_9>UY48pXJ4cnw4`L*kaM}5siqNklK1u{IHb;Z?>lwLaby7&MI52NAEjwbyW;aA~; zP+U;z;~)UK887V$R>yA3P_5AYHbDJYos3hvYlJQDKu+n26Bh179hfTlFLrUrpgPx! z+a4+Py1aDr!S+AddrzOR!0%tg%O^6!QsaRb-o2+QMIGR&Dn3hL?1ep#jbv_fh0n`l zmWBt%%XK6@?B3lk(?tY_j;cJcX-yTAx2#hgv@R~S=#ew=qyC9E(B#fd0AD73fGs4rVuwpM`#kpY9~P(1JiD)Ibxc4CJ?nI&^d_t@qB4NAi0K25{ge zPC^GGM2ThJc#*9diM8WQR(@BJ%l=a09&jtyfC;tU&b>bX7$PuWFbGdX{pS@MK$|~9 zT893cfo*9bV{Uu2GKj~H*F_Y?OL4*{lG7^ca%1}fk9r+tp*MIQuG_pVNZgoTHnihJ*amNdyg$_L?0Wz@qkJ7Cx0{6ArL zJK;xi)_eK;QldWIr_%LU`2bNJZ?FKr5=7eMi%nnNag8nEn`VYj6&p!)DHodvJpc}rJ$m#T&L7v#U z^l_O`nQqd=uU{%Z`4|;QBmMCm45@)i0ZRL1FucPEnP}tjtE)Ol`^lR9 z&Dp3nXtLPpgHtiTgF!It%1_YV-d;x((-6WB+EkxulBb)gmH8q?H&YEhHuix6jQDwI ztK|SZCju$k00|1zuzr%mW7%`dRB5-?7dh2K?cp$4<9(DtGr<+dic=Jp)5+_L9{j`e zEyCqpsPoI50b4U(GOpHL+j7JZ7)Z|Nj|D->-@0{vZ-^Dj{-j6|!zaKuB-*JboAKAU znJfljPnBk8@8u>~Zja`*>}3^nv3wCL78Vp#`(D${wzSgeBpje}{^(Bva{1=k6wEhj z#Wxb3m#}ZPcVn}fio$WXckM_MX&HD%8QsaN7v9Z%t?Nl5ixOY0;e)gZM6_OplHsHO zkc5JO;Anu{ok=m70WrS;$SFGED>`{nQ+qtEJ9TwNd@!Em?X_h#Z2_o0wdx<~&z>ip z+AwK@a3BF(>=u2_F#AKVsP&RurOBeipw@Yyxkql#h^`>OV?*r9jPN&gCJt?Z0@kLM zkL3M`L3(aCd-2U<9saKj0D(8gz@P3fJQ=!S+w|O&(_h#PH)|Yw4e}SYLG||x(1YK* zNZ2$otm<$ClM)l9rG;H*76Qaf-@N*Z`7Lq32^ae#ef>lk=@MP>qod17!pMh58)Z4= zV7>$pz4}Cj(?^mnju6K&=avVXQxEUo|N8yo;GC=5;$Q5aSgD&%d~2ki!}GsZ=h=uF z{D882X}}G5^Suv%4aoLlmj3tWEuG(o;z{OW!>IV&+F-a(DS_p{<42(RFElr)!>Rnq z!9&$!`O;7Xa(uj~XxP|zALso|cXxL|XY(KGmCqM#%y+%Q4s@oHPuUXoZecbAB`|Ob zXiOD#wg~}S&RNDikGa#=;Vd$ zto#60p9A0?3^|o!w{N)i6I$|RI$6MPy}fb3KDIVbGw1ye5EE0Ts`)=h09I{?Lw!e74Ukgv3vf;F9@gTf$L)Zl|S0^ghm*hl9L_{vZa2QtW4RT?aY!Wz4 zz9wY-!Uf!Cpl6z3`&VwT(;G-~$;pYd!E>4{}AP%ny4hXFAPosv6Qem*3!9VjB ztfEDh1@`D0Q=TVzT+Oi>@<0v7lzEUu#S_O0i9$bI4@~aOuh^+V=2tF;aMY`B;vK&UtC=3_v>Sq{pMy66u40Z`G1!H{vNQrh~v|&Uz+ro5?^XpYrC#z5xvM? zwRy~Pmh{-Ml5se9HDmhnm6V}TixAOwM2UVYfo=8s>jd@NysA~edQ1@qDQm{ubV&Q2 z!sW8my?N?jTL5cmzpr@LX+_?l?lAncWl2G!uiag{GA$%v+9joV9xD3a`1&+BJ&De5 zbyOH~jtB zsNSh@#DVbOWGTs^mv`9E@1Q-^G3V>!3 zS21-IWM!4B_o|=%qtD)-Ws_}Tivw) zUIXF$`aQm=)_m7f!C2p;H4kR<+DILqw{xu8>m3rdny&DwY=?22GMx88<#3w<>pNOG zIR(Hi8K^=B=)pjzlEUh{`f0hE+#TIG9&gk2i)Y@(8Lgil^3W~Sk)O)qmW1?0pZ0O3 zBw?~#042s62WmSnW4cH}nDB!|sLN)TVsf>ntjwB^pEY55|r<__lt2%Cl6D9 zFH~xcj67Q9@$Y%Q{i*xKZMC{q5@$%Y^q6e)$;%vSf%F=^VPZ7zqmrG2k6)R}CeJoo zC&@Z`$@wQpTw)Wt2b;R*^y|E{6994nn&;4#F#qIODKEotMKGeO z?$v6_qzoVk@>PFTyQDomcsv=E#FwYDTO8iz0Bjr7yDC95wdBlHot7D6y=(a0l-z)O zSx|o`&^3WTSvPT_=B!kmWxAiUiHOIOrpfbkZ0i(u8AR|&dR1=IG7S-ll)6WJ7|Yj? zRQN>odYm#k9cn+Z*nN|LT}Kf1yZ9O@v3p6H7&+rA8R^fSjhNLmBMg`rFfGY(nu20g zwN9!?>;f&+!f7Q(|7(K*S3<2}WaUwSy4{)CT2(ae`q^nvLcQ-%#D@5BXTpwuhC!O2 zm3!mY#gOi}^#?7#?8O$M<3t#ETw=Gw%2tdXF|#hLFHPMaGCa4n1tz*c(PY|w&IQ3F zJfv)QSk(;m&6#PeHEUV@e?6BUBQ{_2uqkQ4zmZOqZ}95yW1X)WZ{YK@0ilOfF*!8e z`t!Zy?gCcL@r%pPcf-9%S!gP{o=12Ztw5a4MAz%Px}t{)fII*KOB4iRa-QE5{w{7O zn{{zo93C0n7aVAQ0{%K%y4jWmH&m9?!NNI;b;15?6XEsedq4coRy^p$cv16~@nR6j zQs#@!A3GY_?%}S`%1$qin7B-%>;%?NIp&GADJo3nCFNRV$Ay97HXFh(Hu^j*&C7tA z0s3+q=pI3M7S0}!U#seBKFs`T-6UF-b5(OkU2*j6Be`B7*(4*&`i7=|?#I2PR`2mO zo9yqR%A_&m_c_Ui1Y1_Q$*VJ&G2adQ5Py3NpYMkbdI1JE8rn+5rRLN5Zu4qdT`M-& z%(;)0Dmu!n*eCtkjmQ=#?9&{VzszAPGcETA;9=H(VDOU*PlssARA>4ft)HT?(=5z9 z9rIq5HHA<_&qwYTL^}GJ$C6I&iBFIz*$MG$wRXErOheGx;z`xEk+8|HJ;W>;y}XYG zzT2j~h-2I-P)W#&XPIB*uP7akfji)>3MQ$7w~rlv?z zltEg1=J(_BhtP3c>v?fI)_JRq9%)?$Jk7)=$Xj^Mm2spoxO^Qi0@X!?M+eg!V@sZz zt$swBAC47B>Ko3ilW8p}EP}GSAPLjw^OIflG&7BPuNeW_bWKe@kprm z;@DsG?m1kePWe&)-2Bs@&*0T~@XBYal}IrBvCcH_Q2x`ggS#=$$w zgM}LWL8f{bWHm}&gTt^YpUYaPJ0Z%npxL~nUKWe5yqLrIQBRP;8|VHmS~t*t1hF(- zR<+AvcL_TP%Ec?YUgF*wmk(bWu7xuqi8H18U;kkX_ZE-l3lI z0{coAH{{)_#a@^4sa`gZ#Ok$|liSt3lYYVW8c8UY4o#y%uE<*zCz{lIEC`1XI~#6! ziAnz5^)-h_Cj0eyWB=LvtMXuamVBJbVlgYlWC49IABv-frp-3eX&=)RZlLvFhZG$Jlm-$!3mYdL;GoBr6N*(Rm?;<)h$jv6~|dU zb}pT~`69fNgBG6~^0I<`T2|&SYxp9BP!y}WaDB@x4$de+y=l$`nIV!XosC=P++-c4 zfuWyns$>i@fomJHN|$NcWd(SRUg22^`Er!ZM+j>>oK>@4Z>!3F1sT^brpP-Q+l1mg-A5bwGz+SwZ1kNkvQM&w+%+inXw$iDvrdKcMdBT(xBl!dAH2fAhraiu zZu+F{@c8`8Df+G6*}~fd$!DVy)X#`<8d7INuP8o!J?n_~KwekHI(1u}QG*LnS9tv? zFNd2{G&M4h^K#iYJYL=a=1GkcE(ehjev2;#k(c)Q*EF06`}}FMjyruXeaTk4EpLfx z*Kmx8m2fevAUiCbT>ef@gHd?w_W8#M;(kG6>*$p?h2Q*&ZU@|OYe_~0cp2kJFS3Zx zj3`5t4RS?{pA5FmWNYod>orl&G$yl%@wreRS!~+iHB_<2Vu4DY5N`AXpHCW`Hn9)>Mjh-qMSpdVBY*X#MciG)F z$Ex)#oKts^^Jr1BC#aw-gkH8awD$CaVmD&yKq8XwkCxl6^ye}BOo=HC%NPGx8uM{qERF1d3Kq}wAE4+Jnyo#V?p z{nO)d?LHf9k!q>L)f!h}v9aNm8mIBN@x30>=RvC0Z zXE7qnpDb%^af$zayt?HUp$W=w4{YY*!{eCVy8wiI$&DbR@8oXBiooxhk@p&XmG%4plj+3)_xw zEp3+ymYfZbCNo@zT>^93NbT1&te1oDo0>MbOxeqeEc}@^W-VmW-_=unrY|3)HvwBh zQ}xC>F5Y0>Zc2U^UW6ZzRkJ4MU0X4EP4fp8+ct0N;_WLuIc}=EYcOKdLYqaaZro&% z+O3tl`sDu-qdzk&PBm!3NS0{Rn|}zqITFaL0oUHr0C_R6eddcknUqiVwmx&evl|D zE_Kgtn7G&WkGvkn{16O&o?#v8l3<#B!^U`Ban3}%aAi;y#sH7bKA4bR7nHAkEs$WD z9muFWRKOCQBH`i-&&v%BlQwYb5zB7_X-uzAuW4yWfl%%S=@4({+AF(w`HK|r-4W$3 z4&BzvTD0D2hLW{3#CbT;Z8e9RYx*4jsxQ-U8;&VFGFbBmV?)4ZVHugVm>AB3Kqk;7 z&fu^@w!le(ofOV@-l=^IY$)zKBy8Kp*-|V^4j-*rYZ_Xgp1?EmZT$uy6WhwWqU$&L znhwBI8q%Y(G13Fu6*1!b(|V^bf;SetK44URa$ZyD#Y)AV1jul`DC1`0fLFsFx6b3b zjl37j-za*RZDafp#6?Fo!J|Hbn61=Z)TR7-Wy0Hlo3+=UQt_nYqeSma0GwayDx zhKb5c3421`ZN!zhHs;6k8Q-E{=1@1m%NGgFTj*4Bq0RbY6U|DlPuf~zH$X|PLb)m* z;FW6VlI^r;H@HnEYxN#Zi;66aRWvy6*~F`HJR_y%!{An0zu=;f{cQEI@-==KwmkIe z%^JEM-X*k`0=riBa3QKY`U_pfYp?0o5FM-U3QO0)OO$eg6IAP&jr^j4Xojd zEteH3K3#%0k)+r(?vXrgissT3t?t$%rU*sbg~30<%k45Wm0u|nmOPI3=reMgky>P7 z4Pw!mwxj16^njM*<>Ms%bXIeTF5tg>W9W+!O_oSS=h0ocjk5_f?RkjiJ7588z!Yo@ z0*@F^k$@?xi!O7Z?9)%xZ>V3zqhLdhfRrSk|wXrd)6%iy=P9&!$rigj!gw4Xw=>K#d;#B(e2 zi3evKWtNYd){lTkA(r^j<#q~-1}>C(6cSlgIqj_4h-kYU=EOBIQ#LYvNSNBZ$yU79 z>)`ZHaxh8@u(VqrP(>@2TN2%e+VW#3$MyXt8{rsSzCUnIJo2qSf}&c^O-gaPdYEuJ zT1g1Ha_eam$nIW8K!mRB^*7%%3K*F;_)@h{`e!8FZPHgN6*Q9L7&HUIN=Ntmuk}Cz z^$hQozm`hPAj?lRfQTv4emYX3vNkM~l%i!=8Y%G1nc>T-VS&z)yC z4Aol=?Fm}*D8?HNn;>-WDM zRK9mcqc8VBenmcuWV@<+6Jm%!JokI_Y#_2nq)eKSEn}~cNp~j3gBnD<63lVZDW~-J z>U_i5dc5Z70E9=&*G?rdit5!5V_Ha#r0|3N#AD+KEPBV*8u_lq+jrt)N>4d4PAgmO z9c49RC9UNbF9=%M*zTL?anpL>!OIvlPMC+bDHKWcXEkrxMC56AL4(alrGm%XBdu1a z?Jw24p4~WiqM6)zPdTAX?2nqWyC)={MyWJ|FP|!?!(igG8?O7NwdNhV*Z^O#nvqj$ zunfvbD@}qy!FL z$XV};u=s@yiwDQ=(hV9$yKm^Lv*}*tN}0XaFe57z<#3)|ECVPDJP7_}RF`4q= z>5pO<+@+SpJx^NwZi7Y-*%#|oN-du9A>7cMab-C+xvuK%%RYSKCSEing!|uvYDET{ z_+W2l8m*B8<$hu3YRY9?bOKvV&2}LD8=7z8$|qj>HuPU7RhMXXH}J=c}C$$*Zu?`s$4M59l zq-PZRE`Bq<%IVw}(^+2e2clc&ujSqj=i}Q|yOImxaV{|S8r$$YATQ4}I7e}v>hifY z4xD`)eRsa@&Kik$L@}6F$Cuu_+7P1&yZyUUn@l@$a{CIUzm3a5WctyxhtFXY^5jNF zXs^8g(s7di?%c+q9Qj#)O4X)ttD5_ZlxKrqn_=EKBV3K@-Orlb6Kc4Q}r zg4l>q%A4J!ncz1?Z|vr20}zy^p1Z$-jJyv|&PE~0&$UX& z`+596N8ihR4-SZD;zyG4D6Wd!zm){4&d6AvWLGrauX!X2mDF7)jIqnkB|BtZ>@@vw zAIfZztLxM?fZ}dmH{RW`R9Zj!vBq>>3Ae8BU)0?x&ti}1CA@w|<9x2L7boiVE9lL! z-Nq4v)0us+|LO^ou#aHqw5!kAS@q64rd8jc&s#?msoF-{VL$K(E5vLd4WdMQKYs|Z zj;iA$^pr;^5vKYhZSk^h-?^^@+JV6%(Yne!1(tnB(+8VSI`o$d;8a`yr-(~QxJHC_ zkmXY$6CTB{g6pE1^OD?g#cTWbNhOrg&px^C80S zQt_o~(m#;vI~4&Cwaw9Pd}eW#TcuwzlexMyxnU73P_IKV;k{2I@jd+FJ5ecOmBHtX zFPe=xm94qvwZ0cj0XoT5%Hq_445srb)741weKC($E1MQrC+{TK9vOSFXZY_l32tb4ItxK6{mX+jOK4jToq0ZdB7~E(_SG-$8B& zpgEy27@pWx?$v9f$!VMh;>_+*9?~oGdxx`0eIm#izxuWMsbCU?j-Y@3m0LQ;i;r_g9na&#F?U{rI5x|Jok*tvT3rKPGIj zT0f(IGhIF9-PGti0g{_KUYe2vX?T!M_&@0?`|$E<^M@N!bxe)+kV`QV8fTw5yW*2m z-X<5I@Acr$3mTcM9A<9RB936m#@)LY{n`5d$+~#2)_LDQH*4(@vJ=ZOaUF-D$C3^7 zyYY$d{9fjsh?A+$tCAC_!)bbX0XyjF?`x)?8s@$5)=WV*zQi#_3}A*8qH8K#RYi52 zRvHj>`Jk){yixVK^-`vMR%qP>(|X-86Nh+E+h>e>+QToNs!WTFqF0x!AU^q*Ojnm_ z#CG~!n{Jd88M(QVr_Np{_(k~u5#H!J?DH+i`&%TcgtdHUIO1k>L7~^w;4040x9Hqs z{b`uv;x3CY$8lWS%!hw1{tE%IrukwJ zS-ox5tC*rajXI-6{{dblXfZXy;1*kue?r$qHam8?Mz!YxtxvXgZ$sZh9blKPa`FKf zY8hSAl(JkQXROM;2TDjLzxSzkfknpjA~Dp3vVa4S)>=+@UxtK{oq3QLfhy}Sjv70oMW_b*6AFa*p6wgt_O`Q-|({1r51l` zFeCI3cv_Tp=gU><1{fQ-+Mb<=knAM?Mk|W4F3ngX9;uZq2p!_Ne89H1PA?M4T8*>m ztI^zD!o}0vx_UAWF2KBp(!FY80SvGOd!)Lm{8gvC(0#*4L)BkxexT3vNGTn8y#4Er zlG;y?B7WJtM$MN{`yGe-L)Q27<^^!h4-A3IS(oc;Ap>j8+fpb(r=r!??PE?OTbp*W zYq3>d;5ql{6_iZ(TOPRxJaazsp6>L_t^X9UW~o@pu_wH?&yzX5HXTxSXmagsFt><3 za!A}8QJ-%#0c?4kAGJEDf(V|qxQuKp-6H>`xh`{)>oGw{gNn_!>X^N~`2(%t@i(UN zP(JZNCN}xHlD(r7@|$b;mPs6T+f^-h#a-I`MNN=yT@=7h0On{4jfY-kXb5tGGl72O zPZAjUmPl}F{SNY7Q0>fb+zGzK;PTKMeK=vb>M$WATHE)@_YTGs$f=#U6GEILVH()h z!^jk%)GOP&-75&z+hE&Gqj44fyjv*HnY5gVKdXv9R*)r(%~93$(WgiIP*ZOVE(khM z^Z6|f-Z?czEtcp5`%Rdg-I*v@(L~5YQ-mdOmRcQ^u$cPLQz0zaT1=DMTV7f;$>z1` z_kxpQnHfK1|8e7)i|1^wx8K6vna|nkIPe4=bDGHKBi}onf|E5BuwK{QVSaZPBY%AT z1S4ye4M|!37iCR$E)|_yr{k)Q8VKoxdTYp@mXi1)9lv2!RLNfy5PWSlygWz5j>BEQ zyu3)%m*{_y8N!m;-_! zGSQf|uBrif+c)pKfAp2FhQy#~V^k1d{d0Pi^jaBBC&zW2mJrA9TH=g^P@ny$eR>Rg z=i7nBQBa@J<)2)@hN6+rw&b*Did>AUE{VSGLIP69{&B>K?4UqJ>6U$L!S(k)6Y=k`8avRLkR0~&=Nl!SRt_i~PUrFWI^RygzBmvdb2AR<;9aeDxS@R0c{Z1~ zvG$VZ`)F&wFJ83VvT+gV?Zn?t{4AgeD12eMgAO&NIP#+CEp zk06VMES?PHOrfK;iu*>YeT$zTZWeN_o~~DtA9pR;?gLC!fX!3P7P{E-0&d;O6m)&J zE<#5sd-#mnJnvzJ{c%k6dsU_RPv~zn`B%e?y>i&^SlOm*-dP`6h@#PH?WzD zi0;f)bO)I}$G=VaE8#xk;4{AE3*RFjb;@Rchq_&^<>}kxz)=$nu#H^=smt9Gs1{$E z-!{+Vp1XJ39wh~M^2F|@4>Tsto#Ob5Izh1r~MFnINTq7$;_K>?MrcFcKuIHLKkI@D))k01qh5{Sk5#9O|YlBz1Wman&*qo6vfx*&9f?WR3S(9gn` zn>L|)w$_{fWMjA*tF+@tm0iUxw(g$d;oFIj!ezaT_!+6ACaxZ(d0#OHYSVu6$nyW(9HDlYpxXP3ZtT&4&jar-)V_J; z-x~y_YwhWD&>f9FA7XCq@6NvWnSI+O_N1CE9GHHtW*b>T(Qm~-MOm|YHR!Iq@JsW? zHEX4h-Y*=JY29f{cBcgBfpZj?!)oy6xzdcmF7L!N3|Mp%m z`vQG9@a`FgX6oIv5xo7;a1THJ7>&&BcJ{o&;YDb=Vg^XpFEue{h>FE@iyO zoJI$m)5+JT2304^+-BbAGV$I@rd_HVrlQFyiqvB7ZBYUCbzd6;`<6a+yI&7w;ahi+ z_qhR3&|Zser@A3my~@8$CAs@-`izG6eR;Br?xwZWMf@`R(RRlv@h=xwc_1pu z?cZm^aF;)^NIkyoD<#kh9SRGLQUNTCafV~4$kMR}oe?;jkW-E%40+PSxZ7k8ZfzLcl(I}YWR6fkp=vcUn%m;8XB?f{Ct33mvwhwjn68ZpkDSd`?%OTpe$Hx*qB)ym**NU~O9u~!l*ug~%c;}Au{hP@ zkIX3B^~22yfcbereR-q0-fewSX}r$)JxvJxyHTw<QR11o0Iz|uWQ@s1a`ASfizOFgYm_TVcm%p7x;<^F<@X;0^{%BunRHq4-AZhfN^nn=K>Y~_1n1(fI0s}rUH&7n+P}^ z82<*7zmxs@x4$I+Co=!76AzcK{r`^je>?F);=jxI4--Lu z6Xf5Xh^7BOH5Qis|K6&97vwJ)eSoM15d1eo{_pL7uWNXfzYFdLyj2SPUm9dyO6NZ{ He*M1y8p+g8 literal 28371 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 diff --git a/content/articles/2023-09-23-astro-redirect-from/astro-redirect-from-teaser.png b/content/articles/2023-09-23-astro-redirect-from/astro-redirect-from-teaser.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee499b623a6af7d47405a4e810b3836a46ae231 GIT binary patch literal 93689 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�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νZEm0%#&JTs*rWDQZ zsCp=l%%mrv1HYj3KbatgXW*!9G}fmM3bavoR^gw$4*HD-aNU^4T}c*Ou4Mk?JCvt5 zVlK&*BMCs~k~Aik=WAC3{~&mVu`~XM{i_rAxuAP$I*oW+A+HC zzrvnxx7QGBKW@=a+LD&dqe!mo!aemIi2-j;Tg?T#1+u%{WbZAPXQH6g|N6mH!hh`* z5zI(Ow0!9H_Ax?}fH=HD7IZ(w+P^M8+XngHs^(z&OU?EYa;O160Y;l32D~X>vi!JoGyY%ET)$grU4Xq>M9&3@Ql+rFg`dYRKJ$t)h<|k_0 zalMMRh4_N6Img?&_U)~%zAHWd=9J?-TIV5CD$l#t%Q4E?G{m0cWm8I}%>!+}DYeSD z*0s?i)&&^2ChNvA=<;rl{Pij)!(ZLh`>N6mbNi{v1F%=50?Ig>>K4_+CZM)T&(J*OjC2z$A(lbMde5CHc9VZY?DT6!QC>@X zi3=F5DPFP5qC1MCt+%)Dd`*Lj312d=#K9)+4vO8T`d_k|``;dDGr`Qst$>5a*#aF| zje?AZy2RV0%SKLYyK1C(#RbqZH(x>|1#tB7WJugRF=(=x>4%m!?Q_-Zgk*gs8K>cQoS(0U5>7-+M=CUQ%X>ab^7 zcr#LhStook_tH2!(8%=H%>Fpal);`{h!!&A+-0DMT#1Ksh*nj&CTsIj~%ttw#iz|q+OcQo_4?9 zO~d!nVUC>!eQrMmuOVRx8#Llk(q_{|b^c0=s&V7CgB5-`=gi2FvnKM9iaCY5n*t+1 zXErXxl=+sRY}DL42NNJxx&fR}@yO%bs#C>EwF16#iXItgb0(~f&RU9L3DdP2+~Pm5 zD47N^)~Fh0+FFmpS33#lW5|dtpAT7A%VZS$8_TQA+xzV~&d+_5)Bkp&pFQFJZ30b7 zJpzwBGVwAkgUbotYfY#*xgtdr^j@}>hYHi>oASFua@SX*u1g4X57qP_E#`K}G2{GDMbt$0OYjjB=VLppY?PMV}Q? z|ArZP-H{mCtB_xwIqaaL5vzkEsdh*0>_^l?TYD>oKW3_~0))dMDOD;4rxw7dKr zFh;_ejL|^Gsk4Pz%J`w({i)MjZutM! z=AAme;Ydri#QyzTe#KZM0&m-42B+Q8f{c095%_$2gL(g%6k z_yVP8d&PxksT+=O3qu1H>5a--SaXgJI@QhlQi2tp z@hi@ak-YlV6fjSR)TvAWr$^PlVdQ_w7NGk1^}=IOvvI(oOOs{RbWt#mrndT%b@76Z zLs>KfADM9uAf-xjz`si3=VZh5fXu{$CG2cwb8gX4Vs){%=%*JcVYEi zVt6pM!kH*_ecEILN{ z_UF-~#Npj^s)V9DDMr&5x_W(KyPq8O(>Lb21{GpJ=p=(!NS!#^Rqm7LHBS5go5N3M z)@+BCG*s71nlCNsMg+U}%)2P&9t`J)B zE?CO-Ir8gu?c+5hw!cf`R#V`&?b^N`y4Wq*rRu0zJjFt#h%;5JMWC-32Uqpp*=QbL ztH#~m>G8grE7=Wxh4?>>FV82RS0^OQR^JG$QdTR{V;jMcrD@?ymUr_8(UF2}8phpm zo1H&rXoOEuPcs-D(JWnq%j4=}Y0DX($iPmWerXae;D)QGj0i_t>ww1(%d?Hc*k2_P z1i35^75O$`mOe6xZ8d?x%b2q2IB1nCLci#CnkES!KI-^2myU6dZlzrB@2}vO#OgcD zSLG32rm$|j+wp6=P9MOgQHjHJVo!(AQKr>MHMGO3oMwuB+q?hzYW#neAoSQZhgRL> zUz%rp?Accar@x`Ld)n$2#-Q+2kku}3T$kOI?T6=e_e}zOAkJmk&0~p(uh`H>FHO9D zQ61A7-bQa2L1v+8>~wqDJeUI)+l+lYnn#C8Oh4|H5g z4cQv{QbpanurmlT%#z*n%PqaA|s%KE3$jt_p{jFpl z5Ub(r{;p?}E1Rg{*-E#s9kV7IwsQOUy8MHB0J0Vxtj8z+K?3h9D4$?Imjk0!dJN1o zO3~xP{FsOyce@;EGrn~EL3;AA7PVbQlIa<)X8DHQQ;Etk8gF)&Q|nwPRn05VWf;_3 zUE_VLrrZq~c~%af<9RIaM?x`F1qi1793FojwZ^meEwt;U#7RBEr8*sbYjQ*V5aat^ zXwF@*S@imO<(S#P_w9hsSMM)YytfZ;>pdkkGXIJT>(G9{#iTu9w>o#BS>Y#26xObT z@@=|FPkbmHQ}#LDTD7Hpz|U>KP807PeMSA^sJWtKc*PP}GaIW|b74^VVQYj|x_Eo# zLSJ)yC1ghjUFdLl3FxviyoB5KZ4vnGJeJAU)p`8p7AW%9K#CH)cCHCp>u$Fy-<&UM zpt526d7pas!p;!$Ibln7{1m;>kMDBbpa&uCQB19PyxjJP>^0N^@N0j+?4RlMBt`t| z8y@uG2yhWL3Gv&*p3NVx$`;762$> ztZJOwtQM0S9}a!1>^QiEi1>8ktGB3>$~l#5NB7Ie*YsC?(=i-8$M8-H3|6A|B7Jo> zbQ4=Tw;sIrDrB#_z29?cB?RXm?*H#t(Ojn|{}w(rrsIeEW^**=^2M0a=BLY@&jHUy zmnUHfW=#Zw*LrIZ6gnjEy|WrWqd}w81o7D4M|9F!RwfwOo(j$+ltt9~GnnD*L&eAD z`wRP|)CyubGTaKR!4J4Zpg1l+4|!ZMlZ}=9@{l&DM)T^{Kes^m)s4B#pV-yJ41n(J zHb}5%1Hz_S2ypp5UtbEB-_mb|LTJ~r)E;*!KZ%*TuC#yiaye392t$FQ;L>p)4&sa< zK4$t?p#FCZEMtqCC|0ZqX`L!Usd1LZt`d)#Y|dIc=LC{Q+kxROTdsf(i$Sygoh063 z2li%%pcMEyW2aSJk+7TP&B+Tfw{}WaFH43(7&e9T+30}ZMBOe6 z%gd^gdwgSJ_h4M|ssDP_?eyuI;j3&0Gd*~A>+|*X;M(DnMYK~_TVtH9Sp>q`y4daH zysj;Tvd~iPdt_6*8_p?%pVx1E02Kh{{~=FLNnk~X5b`-v zl8nJaD33JU>BmK`gYUBO!m@GLMS|fDtK`iq| z{En;x9b3HV_%NWGT@rR#qFX>iX*riL-Y&3^n|fDl9_BAsj{}^R_C;6NiPqwc&ODOi zsj2&JEOsh86`cuoyT*f?YCsWE(J<-WaSGd=MbJ13t`c`CX*^ z=cLO2l>w8)x$?2;Pd{O*Wy!{ip_z)fjb zp7e(+Sj%NrTT_Q_LD-AgEgJll=EpK6+^1Z8d+CLCy7SQ+Y9v7%cz`wN8oB$!I@hk--awned;=%?rmBEP1cyLMsS#Qg0@#<#;O&Z+jFH6;J1 zQ=x#<i8MM4%?tib_Z*vdJWC1jDlU!boyP_6j@#?R$MbFikxai} zKyqkxNLH=a*gc4$&bIE0VFUELb91qMq~a{hH__F>W*P}nR29VS{2^_9ChJqokEY1?8$m3|Dc^;=DHnTE6nkhj&bDE? zry;N!SPaFYu{(P8pT6`33X;v{4R1OXfBl z<6BoJT6$l9C|Ai8ulkrF4C0S}HydlNnZHvmQAa|X36?t1cS9eW5m_hpd2{i6bK?Gn z;RIcbw@IofNAC!!zF0?6Mje@k&n&%h+|AwEyghRB%6BdhH7P5y_u%q&d2@$2w^GT( zatNOA^`6VJ)7|fWW3I%VNddN>#Sk&VlxbFvo2jmIYmzLHsQvNPAbi<~6of;|ZIrAYru0dT(*%cUbS1p%Z_bK6rFVPg?=&5(pvEAOzcXQ)&;4$`E^NKQPEkzZ0 z^m`82CILVb@+)MLu<9RFs) z>QsnScZ_d{Sdr|f6l=HUT?0>>VOyyIXDeKCLeoN#hp(S>#OM9%6)1C-D=%vK{HFE` z#uJHiiFprT;^!J-H_+BFI$#94x(h!Uj5xV2mE6ocs#TtmS9g@RzTSxK0=zGRsCR?^ zqe$`pQDo}wp#VYXw*_hG>BKVk0M<#53uRr*h|>-N!Kz!)sd#UxT4UqhgzWxb44&_f zUW3nbr_OVRRT$@t2`QM()8A_~n?SY}Mt+acXwj0>S5Y>e;j|``G;aIVf33JfqRW^R zC5>a&%OBkydk2|wd_8p(c}{r#k}Zz9ld{w#&~o~sy`1w|%~+@!b8AV>@GAs6n1(gE z+g-K288l{PyYWej-RA4g<-hWE(xBsi2^iWg*-L*Yk4DqBWK22_qNlLZx@yaV`eC!M zBe94=_idAtzwKFYuYPQI&MM-?$~M}rAz-|_$$|aH!GlYF*R-_dFE2kL?F(Iny3W`x z&q}erCT%iK`(|irXhhRgguOU8>+Y2=`Lh5&&x?lfg4ijA9OsnEVBO5r`gK!jrz!>x zyAQvrmflwi`vhm@EO=-~qnrP-1-{+iH?%0^{;O6WthN7ZK!d8?>%=QdPgz2pmI;Qk zXDb3YjjtCO&Wgor9L12jIV6H4_8*#|MTK<`H~`}=JvPO^v(BRn0YF+S@wfKRe|t`KlAu%9(t|FIT&HyPS&x^u59& z*StJhhw@1BhgmM@=!Xxu9mkuf9|xZ8kj^cuAZD3S7_B8?A;V%Kd-{?Gb*VUHK8)5Z%lD61*Y5;jO3*Lo=I(5yu7wZ<%78if&G#b?zblx znX-|oiu7Hf3+X6|>_Lm&hs;B!w|kHCl0yjvZarTE=ngh8n1pnCkh?%0`j}`$1|ps$ zE%de|)iiXN82A*O_e18qZZT~>KZ!#BtKR9=h2&h-gg-FKYUplx9}j zPG?N(h`rxP&^9wGLN4g>JS+ejWp6&jw0Q=sI`hJ|u2xeYce;g0NO**r+L+r-&j~M`x3q5q ztnD8n6OfTbF%RLGMCpj|vVvaBL(kHoZ#+HT(x%A(<+f5C4sMmo>U~v!Y%H-4y8>uen<}Zr+kHk0KEWQs< zKLIGAKeuXMt`Ymi{@}vVfWrTckJqG=>yq$EkEtlF$yxZDB?hhrFYa`d#=L4A`tk&Q zvRQV{ejZ7>y&>NG{bT2;7ETuh;3KlZX$`;QvhRh%%}X61y`N;&e5hfed#WK!Rzj9d zfe~7e|C@N(VRpg(vKCwx%2%HOi6Q@1>`Vh; z_m&eN#9jW$cgv`~1X|NBha3Xaj_)dFAM?lAM0%b%?gX_F?YVUa9Jp_5qF&6d_a37w zDZ5|KNo(r(%5qTRzUZC^%emnCwmt%^zFv zb8mQvZQ$8pW*~f@yi7w#QOnyE%s~<7s@gd32@4NK0m;hE#kEq8UP-Q-ofyFV5uyp{@^3RZ@Z3h> z%mncCp!;aPQ>|bcOxh;LgT=OG<6D?uN@xnDN6#S}a~l4c$xFw7sLKAFk%(+@Iu&r$ z3$p?5@E+8k;W+&+hE0gGk<@o{g(GAfW#}OK@uR~jE}sX^F#pE^uJE2+%wZuc1im+I zur;>tYZ@X;7IM0-`pN@$qhIt5k`VdiL&Q~G1op)j*Pw#V*ZnSZUZ%hOu~1Doj^Cc- z>35%)mtN#$40^CWFT!q48KG9`+|8mGP(Kk^O~8 zSZ8}$s1ys5&90}hB@_YVKVrJl^`)QsgT|-fT)?LZmQ3rRJ@b|y6%bM-GL@f-{kf+? zTCVs$HJ2K)9wM2Na4OfaBX&f{hE3&15>!zplZ!AbW%RQQggSE4!zFLd`|$@^(^Cc` z4F5cRD$^&Yo-l~?j$H5g(RQykA>VhD?)lN>C1(#W9W~m}e^&1(R{PtSCY<%KpQkMj z<;;ARH{mQf3dQU*%-XRYic4;%iv|k1I70o+A+#<>NeW#&x_G(Ue3gDVMVd}Ytf?d` z=|GsVE$aL%Hn?qYc(vT*chn*s-Tydu?3ieXZ1l*So>5~CJ6XygQL5#YOmT83fa^0I zq`jT{<&P2n_x)G8*w33Uc1T|oh00dcP$Jw~;a1GYpS3U25gi!Wl&Rw6SfErz&Fl<~ z0t&t8bfZI%nA51|ng_`)r_kZ{>?;Xq(#>;7WK@M0=Iv2Lq(0VM1Y85=5Nn2csPLp)itb4pOoOIJX-MIs4EYD9d-`IelOmFA`jKV0@4~0<(27K={S&CLCz3rR?M(CZ zWN22{A>vjf#k`Nc&9?a&+&tf)hTv>AKRw?)VvGC%!VEf z$-(x7(kVQDx~{1wI2i_@ZY&bmELAJtm@sA~JF>o|N=3NLml*T4^+%^k8tR{BM69 ze(}XkW(WewO6;SkzYLC$rzs7Mdc3GvfPYN!g6USA9YO%sU^#7d>I+NKHGNB&9RAMN z<}ysN7Sn;Oba*x=RnmRIvU=;WS~GzLWFqzxGfjLUCXxC^ct+pIm1a20J5tzh_3YJl zP2#BaPlPD;>wb%LwT2*4O$+>Imr-q@K!NFL0Cc8uOvZcjj3xwE(2b~V2%0jY)U&3a z=IC8pjjcTNB+GKvhL#3sgWF5z0th~%WFZxn8GXRlse$mDIIPvo$x>S_)YaImpo0ok6^ZELB{GkUDa7yo$Tv&P{KXH?V<{ zeX!DnAxNhsW=TtLx4K6XJn_}RNDr4WbIA`)JfUy-s7}KQ_}FQ`I8++cG3Uj#Y=Xa%)?9>2E1-=(#9xJiiI|U6FO`8G*2O!hAL{Z`q_a~% z^;Z=N@_bzx!ad6<<+g%E!BSY6|7K>nb3gV&!hX%~qL(@5FI%^=|0Rrv$hn4|PkiJ{ z9q1&&uiawqfgEjVX+3z%Zxp&<-172^j}}`=H}_WNi&xx+%*@zL_=;kBDv^TmqWfBc zE0kjohfg`esZkR!o?@ovRBfViXG(W41H-plucr%lyI6m?_t{QBXG7P${|7mN#el zcPkfM8J3zPblE6QmgbnX{w!MxCRu6DV&PvwmMlQ8_gK73mO)|ewtm8_=>22;)qjH$ zbL?1+>qbxRRtI*Ns5VO;TX5RQ_CoB)C=#QeXtfx#9DENgl=)R^QEWB09?IgFK0~J& z3^WdX__P3kGt*y|B#lT9^{O)O2bw0`*woq4cuZB4el%>Lje;rFJWL@1m-QFQN%1N) z{k9}T{VwOb{oHrhMt{_=`_J)-;&Wqn@!hZm2)wJ{4umPKz0$}Ioz}G2SwH!Q6?rX3 z*#l__=6{iJZ%xl&){GvD$~C)Eif>d)<~ixlMPYXxmD=h3=gsr%hs@*kO?b^$(?V4@}eeufCmf8G8-jgkHZl)^rlnBb zI?#cp&E0vM_Qg_T0VJ$dPel01@4%|(D9TPrhn9Y z7RAWRFi(~khiC%-2;qNRlcrnFQ(((3#7m{frUX^1shkOE=8+>9^r<2T67pCxE20za zT?GTlF&dM~uGAD=p4nkon$(p)k>Uz6yNa)u<$Cw+<<%C@AdLEt+@mgrcm4pFklMDF zpMHDZ!vK#EkXz?EhTT6f9F%RVWmEXvcQu1GwaA4di7wVdk5KOPtnQ3$H5OqAHGq^I zS9dwtWM~^hYVM7Q78dL1NA`ET)WEc+lss)%9R}m9!F*xx|L&(*BvW@1q4IxxkV7a6< z!D*;jk98qkhCY2(JEuWn@490biIW6&#D|MJ$xs?)*Xtge|6gw%n zo9S_WTR=JOF~YpZ?fb3vf9}@?c-uTWvTQkON6tKw;C$)5nLZkhu8D*Nn6Pjp!v5q? znYeC%-kQjKUNV}yqM`=6KPmX`uo^s!aqg(6b@U44ZoHfU3m5y%F+T<=$FEK(&O-$% zP52Zev}rwLvayB+_IduWln3mH^(n2vrdsKy=N0p}z<%lcz^5$G;qzKgrH(=>64B=O zxjqYvGjfFyj#MaeYs`8InK7y#8bu?h4wZ1iBMhY_gDv5dt&z0G%OzlXeh%IMzO8h?l4vC`AoU(1<$&f3 z{{DvsedzxEiF+;Wxcu#=V$%Cob#HNT(@1vU&DO@fq@ATA6<})09vlYx6Z(jThBm1G zJbTy;d{@(YV{1n%0$c)x@}EkHg*884^_Dz8-`&jHpGKiiA5+YT#+MF+Qrz>-w^RU3 zGqo)YDr2}R4v#`pscT>HBEISB%?#$f>O?+NEu?O-0ro^O1T$$8ZmUu+yw#|;e28S%|( zECwDK`~5Q40?oDP&F1oWtf*eE)#>pfo@)!Zop>0wzL#umICV|Y9Wm;{Y(V#=Q=+ju zql3@Uv%*&SpxL9#Jp>+NhWAt<`_TvGg{{{k3HP>fLbEgiUWa?%^GDN!M&Wdj^gP6W zi*Lr-;LQnFUBTzlB>3@%O^TfDwT&hF*WMyF?4sd$uWA^-0xKWc+6BRH&?NqPf>+YS zXx5v!9P)9g5yM#cCuUGeu#(*OiD7z|C!5clt1dSFLnlpm;Lq=(O9~t*2z_zstH+iEu&Y{>64As;R7O3MCy{F{ar)V)*9y5p;6n(G1gSS zk=TAPui9T>EJuzMRQ-}x+5^4A!IWwr8mwuL*yMYubI-rvQ>(Xl*V18y`Q5|w^{|z9 zp+}=Gs+L5D)aEh8Z|$5C%qG7?DN}W=x!IE|Syr6C{p`#RlOH51v>-zetb7Vf!exMD z$ij};hc7VS+UT=qDyyW9!v%K<`?#y3@YEu6H*k8JH&-7Z27y*0V2G4I7||^{i0C4d z3Fj9c)kN0W!0PZA(qjy$P_5Xm!|h6SN(R5r6fL-)pKKnMs*M8}*Pd+-aSnY^AD5?> zW^L52z9+3VH)zRyCTV|%4DDWd1YoL zzDO&DbaJcy`Q6#wuM|>y1mcEH(zhu3$)~+@&%=(*o2k3*X}ls$g6GLq{{?1`prv06))m2E<>ypY8qF!!i#_b@l=_mO2cUT-l|?`ej^S@v)=Z zC*}dowxuclbR^|V{AUZ@W_@%BxkDj%C#vgs1QzSHG3xY-VUO$~rE7~nA?)4Joha{m zzIUB-k}_%&oLZ*UOVTZ`erl`pWQ&*m{C)js%Kd(l*zfzo0_DEBZ022;{hO>f&2JUV zpn}keR#YJSa5+DoZoRTdfBr~Gc9JkucrYkpDT6S)HdG=aDgoKQR0fv6sG&!k`n7yK z6is^`KzX`4SYeQI`3l6f#99{ahvifjdui+D$n!W3*0C>zuRuU$EV2_*|LO)M`i#nb za(;I`Bq5mh_<36yA@9DDr%5FSrSNcgsioSIi0Bj}4VjRa<*_HR99hbMksR-T!f@JUEZ=ZQpgfSCA4~Ew)4Qm^6iO-rhpJ3*L8==#zB`rEPgu=SHzV>-&C8S2 zF}r+{mF1(_FZCpf$yds`E6dz9btTl+V{v(aXV>{Mm6D=?G^NB8Mt$1<2jAmb?%UHe zAPQ}_G1r*QVo?}Z*oEF2M3j}%$L~f}S1}wn;T?VGwAUH%kAEoiy246ocGPHu5m%`_ zX*YF-)l-QQve{v(;X}S*G4)zig?;a{jfp|YaX4b0kG(ysZu&^JSVDbN7PeKqAy{AO z>9B*j7F*26@}*SY{`nvkfVO+O=DoetbKel<0#f7vNgBwbe!_6JzB=bVxrCc)-9{3> z5&0uA1R7dYaDVl4)T@~JkS>i>gy|n9j-o8`H3$Lqli>Dr7+74-BalYQz97FQeB}#) zt4v6*uw|yBhb!cBwRuN|j-bmYsCCSBwI886b*;3TRUM_7QjHTe^XHG}rN zoDdw}`XsIn=r?QqB1M62cOATU57Vf>X)&G%3LT_U&=|>@?m-57#&}wE3*c&#MhJWp zlup9X{bO*n6gk=m``nJj0FRxBFF{|3)w>$oa-bwsbPa07RPe4k0HWsc%VJZx?!&NJ ziP2}a-l{>dE?`jt{8Uoj&nv~brt`0Ce{G%PPS9PbIr1W&qfb8^f zK04N2W>%H-^tRy%XEXES@4+i1mIC|rSDqVcr>%USGv4e!@$*?S=y1PIpXgX;G8u^h zf!W=nLG*!dQ?0Qj>BUkJIle>;D$PjXU|?WbYC<1DFaPXgec!YFDs9dZvQmQ{`L)}- zI5JjN>w~CZs5f?j3&IeKCTf$^AIt<2K$fBnwFxj}xwOJng?`6_j zp_wi}8;T3fCseSfnsbb7%?}lA8t%X2Rjl8xn1$R+T&l?K(tY-a;6#PhO&a?g3D*+k ztZyIJ)}Px-W^v~R2+Y;FHh^G;Hl8f6kyNTPegN`yC~{>K>v_K<>k(OczeH<@Nl45H zK!G5mLP3I_s#WR_Wfq|fnk*0dOF7RT&-ffS7OX+$DGFSQQM1;GSv&QX>!M9pnuZj&9gEKF))!+6;dvp#l|ZfK2?y9jE< zH9s}7XSE#8pIDcajM8PaX`_)4lp5W1|9?X zDX-u4W=ChT!SR_KCSKTg-jCsQ_})LHice<<02kNn4WrON$OUI=)#a)S96%qz)`35f zvx!eHe~AEbIHfqMw=O3VYg9<9JARa7>l4XEK*Gi#9laHrX}R16d>+a;24XR~(-w!@ zC~XMK8A_v6^YW+dGaX(E4~fOrYNFy0Pb95hUCW3MEI{uBDzg}8dAwF|jdLBICP^SB zjiHeCAg%JqSE7lc)N4oVZZABDrAZWgSI8KS=6l_P6px72aZwNC0d`tms{~2aIX~sZ z_ve%dBjK%{^fkMy)OL9z%i{3#`%!{``?I11{x&1K){A3)$o9ojrAf#B7REF0k`jwg z=EHO5fXePjXMW=m=MML?f(D$=QO761#p<*OS?U02=;Y2k)%UZ#mho{cbiE!9J0D(Y zHiAE-PJP5q`H1y-Gg*LBH(yR!e!Pe}Ih=Ji=rB>{;a2v+a%{YxVwH4^4Y+Zp@X4xB zD{IQU7w5_0)VgY|kz`QE-siHvr6(@&A(C37LO&QI>*~Dc$?S3OftI%Hx8XQ={V{pL z#Nz1F734#M?-2-h4x!yK;G#>w>@(XP$&1M)fv&qnE;_2b6s(0=Ocj|}Cu!0mFjYk| zRe2|6`dC>*=&qKiVEYihL>En~&g7naUFV0w>!xHKDe#s?S?PfOri+MBQ(i8-6joQu zuaB&b-JV(LO>4OX_U7mq=#v@jcsxh8a&t7AR?^zj)gsQ$SCY&YKfYwJSE!Kk5}kj0 z_>jV+wR`nIivhyh8)XQ3f|*_A8x=f8=RUjr#JIn&ODrq1EUbl$lt&Q|jaXk_w@f@l z!yvv$d6O_$Jlu@(4H+K3FSDdbB~u>?gKk-dNx{_p0f5i4h;pRdK;kao^r5MwOM51n zW=?Up+}-KaL~T68N6dN;+qq4rV!Q@cCk{uzS~8Fpjv2r-RMa*m+tubWBvH%8qitq9N;w zMd{io{e#IJ2yt-SsLM>RY1)@hVT=|vfN8e(?%TkA)ml=Fp`*TUwaQj+))<)|?!&I; z7b#Ae#(I?dxfuL(D#yT`GM@)0)&oD|9_5d7Y>&4Dt~(x;?OIuUPA>`LjD-$vHd`hr z$oww9;4oo8K>yN;uHypb3ye#RMh{1DgWcId_^$cT;85aD{Rc+B-7^cqwa}*+xo~IK{OYW@F`f}-W?Iek<%)?>S7fRFT=+VPtgCH9GlDM(pF=af zNC7GJW?9$U(oh6GA*{w}fO7JXY~Uhd<4hD>+VtPgDBO-(;T7~KgOq%E{be=sFJ0mLZq=8-25Q|bU# zvbD3JCuv=uEWYa!LD5TWT4~Z_g&ihKllGX(Mh9Iv7A5uMNG(c{KZV7kS(|BPZD)P8 z%;2M4&cT+A&@k{hUou!sNMtb^cRAZU3J3+xx@N2P6?hy>YIR#Z9EKR7{zeNYj*0|& z-@?IpqkiE-7GBabvJjfc?sB;qV-j(>ar3+Xs_#oo9!zMpJOk6$HX>FTL$uMmUtJ|; zIk1-w??f>1^R1(jnNixYC=aQ}T6b9p!H7yYEJ4bsVja6u{!1LI5hbE}!WKk8s3RWM zSExRxbJoL~mE(gBy=B)SHu~BZ1P6 zmo+AutmVWD6{?BX-Pq{gv_Xj*Xb5^;7i{=WS8aIl+1S66AWbj6S-{?!%;^3|P9BM% zQ6z2VeQZ{y%#1M+!+NUNAHxARWvMi9+@61O0@QBTNfeQ*Mh=6E(Hz9BquKL^yNH4F z`jULFRt(cO>zD?PHkBA?tBcD>|8Y1r#WA0Y_35+UYvvgf_ybdvpVKcw_YKjA;H#AB ztnOducn1xhyUpRd7KA)rfzo&&WP*Q$I+?*q#BOf5Tl|hT%T~u-jzHk*S6>0f)ZFyD zo`=N~NoMPzd}!xXC87grq;>uRndXyb<&{XU5SX56xMz3|x$L5s%XPC65`CPw z6Kt`m`!q~Nhxe4*`vQB@`g7+>_!b&Jd+la)Vj@4`H@ZI@)f>UyFrM;3M4szVz~}Dd zn)WI&QKfW*$j19F?`xN2o!{BPVNwhS7xrgb36;E0Y8wylwgVA$dhTXE6o$nroNm}^iuM%j zte(`I^5j`pX|tE2zIexe^7)CA{5ylpQwsm>CBea+PqzdF{P!y@Tlb=RsDWKex_3Ex zl14Zoe7b2EU@#X@<1PKUS3#V?DL;tfix3~Kj`@-6* zb$OJQBFX31lTSQ6In1tp`Z=K(`mvlG90Ah5W09c5Z>a08(^cfdNF-8L(iwyVK2MX= zS#61s^$Y@HaCue>baRJ3y5*`!&{tl*Znc?dX`*Q5s%^$K z{IMH;htW}W@4H;7K|o00KoO_+Ry5Y_OtIUi?fN>3N#MzDCNMeQmtJ^Mhl7ykhujbj zw2Zv;*@|n}@NN++WF9l!r0%{XQ^Ecl-T0{il4k-+$r&L;>dS8SyKdpC85Np8+VS%&$r{N8u~u5@-kOga;xs0Z_kL@ z7N({?&5xPW0#7Ob51+JGCo||!@$d|@F??c(s#6&1S;<#ZQSN*l3l(^~=Xo&!dzGlr z#34Z){CG{tw+7Jc6yTC|SkU}Bxml{FUvvYVLVa7D5myvZWuZK6Eg~ftDwKh0_c38{ zHwHgzHuajDTYwSZK=3kguI_#dgrFPy^73@gZuC8DqYA~^-Myo$xxP@$)|k3^Izr4{ zb9rMUJJwE{Dbo!ZVQSm^EpitvO$!?bt(&;0SV8W2%Jq#=uwo%ZV!B4NEX(wx+x)e& z1tS7T)W03t<3s!1@gC=@4oj=YkFnC45;(AJIX25xhg)}a%Amr+Es0iu$wwTJ8T*?# zf)w-2|4`XtnkS0c7g+!e_A6v6r!CLMI}wRajc%(@3$lTjJs_A;~t1%&5q^wq>FUGRm>3BGaFLikU24+O+2+Beegciz^2k4Wq<7ak#Th8Ry z>z$7#xX}r=Dk$vcT;-G;aa5w)<8_tEL`_L8khtDrW9BicJh+cJ zcFfI5ZII2V1qSvOmM9}&u>@{kZWW6)?1E=@At4jWKGz2 zl#JGP+|}NcjB(!-B=E`Inz+IA0`<^OECK_o0sL%=6pYh*me0f@)fgz_$# zK}DNIrSUTwb_=-DMdT+J8wQXrtU#V?7^1yt$M?wt$(ioJkV#9Y&PUH?&&ip;TsXK< z+KCj*KMQCjDI`vuO|o3hiK4sW}T zR1RP6`vf`?P`K*j$j1 z|IpFU%Gz4H2h#CEN2GQYRsj*e4+eIZ@o=+mTe~6=7?_R@zQ$cZ7yr-VnbN`15(O7{ z#}AzL>tFZ2CD8u!g(Nh?H(Zk{TUmL%BhJdTZZ^Lr`BZvykRBGSlEu9`*sXLGWV!vG zC$2}YShUDs!NA}^HKc#S8>1XjLt`UqfqV`ZHqraLwHiR!3OLyJcH1kooGG*MWV8Y- zrl|FL#}bfHbP9n?gJk;iTy^jT1{dwo-Gzy{JRawXZBZ{67y*ydSpR;-&#~%;i*Q_`$RyQn z{FsqbpOU^_y%H?KUcJQhak%`8a=jcO-@QFBTV8kxERfDB)$ji`+P9dHUW(Ztv->Z+ z(8W#YqVLB3ih70>e(USDpW&}Ht6q(aDFc^&xMAgWu=!+g60Y)_DBoI#&|L-RaYkHzxKR}QHTE^Cl-!1nkK9B50MWw$9! z%wGOMK%(R3&yL7uDhq}~_z0_-MH=+VN`+D-&8Exsf&)=%tx zuwH8plJ05?1kDn8xp#v{i;Ma)sP!*rZ2h=;V{8%sr^8kaTY+^V**(lhZcke=9bZ9axiJ|Sk| zxOq*1UKJEo?Z!aMU%Eb{_6|ldSQxi;_Nf!DFV&L3IjoJRI1iu%s9T5;N6iR}*n_U-U_dFf+bn2kAv z8&y1HV6!*LCLrmI$^4KEcHl5c?|vVM)0pbo9l(Q&A5 zlsX_m!!;uXe{w*-#5a>R1ip8Eapwk!406%WJ45ytgFN1I=hitub#kwO0%FC3{1~Ke z^rr}ePs6T&;_61fz@%lQFhD!P1O#4Pq1Y;}G6PjC`Cj}HsA3f7WlWZ*;4f{T%>rTa zfsitqeX0qq3R1||tbs-&DJ##ISlx4+WSEym!V_v(_l(C`ZinY^7m;8;in z(Z)(dxV4VX4V+Hp!^-D!1YLSSs+1(VUiUjyUU|1XP|$0`%$7G?u*3rGzyT4L%1^OK z$FXWyS2q22BRnnADq}~1BF82O%c3z#04e;~Svl}ob7)mF$#>s1%$QL%oT_$EGL9xyc)Fb4{is-g@zvCOIwPWzOcjuf+$UY%_Wjo+fIXZ#_n z@H2H1J(cRCp{||-!dT#lr$RsWP>Cj(wdw3w2B1UN?IlL8|4_7Bi_P=6CI{vBWNtAm z8|2FF()j~Ce26*0xBF%W6*&#Uv||tsl;!J@!j(5%2|MK7!K{|bsU$?PIRiJ`Ht&t6C&wqMz8KL*)zy&4(q-`!<9WD@cS=1F4rs3{3er!AO^^q9=_R8&4 zvd2*DNYu2KOLUXTWV|ThmDX%O9AgKErB&{HOH`jVTrafFcYiV8Aurb<1#tQ&VB61@ zZlv}1sp}6lWNJJ>LEdk~ZkD+mBywDvFMY~Bxbl_G=Ov>8?wj538@K*_sFW^(nQyYca*7KMaI9WWVUT1x1J76Km*GMceKElYbu$i?QGU$Hf&@qwrT{s+9W z&=4Ly_s)+oP5&W0qsMNqEk9~zJ2iQ?8D8|Qy|Yt68&4u{2)#M zqq3~*KjaH4E6#ddg;0b0w&O@}n7#59^!oXXEx&?ky{q>l7!L#qQV>9X`u(Lqq{PAM z-M6j%RF>gI0!%$u26CqIOe_*rqF1_?;ey49@aeeb#?O+pqqQ!)cu zaiIcDxL$`Rk#$J-g2GrM<{*R70+mKzYShHRrX*&q`o+`($8Wg2g4_M5cYWd4Sz83n zS36A3@4?y!oy0%V#nS=tfUNs5=Pcw?e_#|Sb?m!s!Gkd5!l;&b=BSzBUxTs(wTt$b zQEYP8_lzD=B=#;!G(DCJmJz1}2VNep9Vx0;x)YZBVwa?i!KcpICRx;r|B?(M`9{t& zjt2)m$iFc&GmC6r9WJr5NtS``b$sS`NSUYj_Jq)TWlpPNeQH7>i1_Yp^3EFzv9-oH zeq==kC7Jp2Ka<)@EXN`(X2R}_0lA7r;TQ7PPfU4Uh3%$@8XkpzkTbD6SfA*)0jVyq zXJ+o<23?hscYKGNkgT|!naPW1*^^5N$tH}<`-#?7swQ#Q`XT4j24%qVkICkTgERgpuo{ttq}2@V636m!WMZXJC^jjNwYUxk`! zGT*XKssgdI%ck>oU0~oPoG{7xMP8ZCR_f$0T!=O6?t)Gq_ov{ocg=QcUW^^Fe}0Rd zy_90I?%_mrNP;(Lv^Ki`J}-r@YN~VzJu7Xs?wTbCzVM)U2b@g`eNsDdS}={ zilFPFiugH$HaV<%`D>DyWp8rxzxYt3|9fN5o6P_GGdIf0*joQK#?w^GAcb4R*@YxQ z^2Aq=9g4i;b6ju5dq?g1Uc}=hQpSq9eVY@!zUc`B=Z%$pm#Jc#?BSQ?2-AF4okRryPvdPRUOqM zPTnV!0;L!QNwD$R8n_J(-^z46U0&HX6Je@2CR$TW5|cONwjU0?-Ptc|+N}gz_#BfT zO8fNh{3jkzUFMdSYjZP4Ra~C|gH)_W{KkY{GrA3TsqQidt;^uib09I86ykK}*PgyQ zoi*2(1-N*VR?y@?5j7_3j{~GFdgl!(c?|3Q$Hqzdg7wak?J1h#S=aW!*L!+12kRZ& zQk5S;k@DQ!O>~8+}5|gKthM9Cgcd#uKw}NSvW{v;^W#?gA3bf%gz)9VM9gEY| zxa6r6g3XzIgy$kLr2b=+KSBe2keTWHmMvr?GxIr{P^vO%PrMSB+;u`jt5BZc;36-} z_xBT^<~5;mlx)Q2`_^~bVlX=9_&7E@ql%pqFtw;70=4XpLOd~@_;RJwv+gD_k=~c{ zeiA4+hf>nGyH6|KHj&!UEMEcf5;2wd^-Zi(CTOrD;p)J!34U^L{8Yt z)fcw*omQFfzd-qWXQ}S_(4;Nbbw_;AJCyuLVXk`J8bFpIJHLsFbvAD%?{>1J> zR~LH+>|l1#KTiciCFUNjo<%)Nlj|+&Jmdp|-!6uws|`KuC%F+yCH~!M zK9aSYND;@cx|g$T8nVEse2qJicya!D)tG($% za3o-{;n`l^^<6Lvl8}z!NcNrF9EsNT_C8(e6(WSpB?x_9X%_A^Hq6Z+2qbZC$))vP zg(Sc%A)kyT61G<(8RGq_0Ss2Vg@t(SMxQ?+gdQj3K~EUGPUbK%xQ}j7atfMsZ+$Qv zqP;600(c5rtFd9vEXp1`*P@ww@7MtMzb)2P29Dd(rUueZGKVd^(cdXBeA&hl9ezo` zsy4$l_Ob!hMP5rOPn|yEaYv-z01IXcm+QsFPj-`Z!EiwQWG-flT#QzzdU$PrN9FQN z-GZ^7o7|D@1rNYEE7--veD#OvfJ|xDC#RvInWayQjJy|5eKXLIZu)&2E9%gGDxdn-FYyqqj$q2v#iyPJ zr*Z)5BH6E9NQQxxy$vLc`rFh}NZDr_0FFP+gMXKcb@y7$PVi6yB?_&y6~ruwOa*am z6RK$5j*7j*SHynZ@Uih575zz(XqU@8f{W)j@;ZN!f$4yXkmp%XLbyi=0}v06 z5t){#xJ@%AQ!7OD5n0z`E?+KmHN$S=cxX%Zx3-=5(28?(?PYo~t%vj`^7T0#xGxBs zjzs)w3Z?)1)MQ<8K^PaJPLa-vQoI4BiJi51si`*2Jm^blyr;d;XEp>gCb77ep}k=p z&3btpet!H2U(RkXSZW<#JDWwlDm4y}2odz697&W=V(+Uic4+pXWLd2(S22|rY>uOt z1gKTL7pJZdy$a{htno7k{sSo>;UN<=a1G^3+c>zgXZqsVvsR#Q?fb68sT;?z8e*^P z%iSs1*SwzD$egH(ivEtmx_xWUlU_Ex;*aKFxB(8~*J7N=XK6a)?P@wwTa|F^5xS%I z57q76dUH<5_z4pWW5wZNLi7sM+>@|vqiyHvL|5b0={BlEzq8Q4wvLp10vdkM0%w@~ z6_Te<(RD>t6AUr;({q~-me9B{0(Oh(BJ)8r%dL-w)kn+WG{&DL{L1J{)sqVOVq73MvW_eYh(6AG=e6Jds1kWXl%B5 znigP2aQ4}sE4y-Ovd6CdVs1;4j}ppY+jBYQu24B9=s`D8&f1uRIE>D1VQ2qsmWWEK z2s3~qZ_Gvu9p`(7)-kHTq0!@G`mXX|v_2phZ^r^&%}9_z6Q}BTH@&QPZ2K*+4hS&X z0{AmSqQ!d?QO9SmF79<;+n?4U9Z)jy)g<|U@z@|K6tLCQ$%^`yK;^EecPr>lM!}2# z0#xNFefa0SjPzeZ53@@l2c8DE{~ySLIZX32BT%*-zd6_(0P#axeZn5Gum02$<|(E; z$@Fa#!i9eL?SZ@3JL8L+o5&TQ7}%J_p3k>$^YG-dhlYj40iXthw?4C~0Waz6Cv!U_ zVV{Q)?&p<`u7}5P{T+}t*v?|v85v(9PGqz>S=eidQS>JV0}L9m!t@4E(@?Vxhdv8y zc|)eDg-p8NM4QY(RgVp`72!oe<{M@?N(`Lhy!T?e-4dNxnUQzg#S0ceg4*m{YQ z)ExZr^Y<9ii}%lW$7$5|+-msQb6md$aQ?*0fP2VWr%w6~(VB7%(Y%EHA%< zBnN);)BN?Cw^!erif(1H)+X6@V$U>*yKfo6qPy>!hV_UajexyM(&LkU@ieAMv&AOo z^NjllTf5zB5cmWwHs*khbDwqWoZ;8RdHt4*cG{lP`rXk2wkYBSuR_$VFehyhfJDCQFn(J)d3nuh;E`Kui!2Ncq-Vrk?`U2tf`Yq;qMDEZr+y>+hpxqxd(OTZl+LD1lgZ&kFC zznQ78QG>A@EaF#oGqi=Qv=~ZYQBx#+q>-BqL54a%V-i2?;^H4r``oV`8*VsSfAy0t z;ejP_*Sia&2HLWcmF#KOlAUQreKr<(jlG6v0s^k$Y*G4gyxON#_Tfi>LB(fK|0Fab zznoT|t?gU5x}t`UGU~9VfEQ=d92f4^lth6cFf<#4BB6ci{jAn^szAX;VJyOFp_}!^ zKNo{b_v1Y`xnR=s@JqZ011Zo8kV*dyA-}aYl}g|P0zF|H-yWO()MvH9T=F6ahn_v0 za*9uL?=Dl$O!|y(XXRlD>&I)bImYXii;l$kTV~jJzwDY` For statically-generated sites with no adapter installed, this will produce a client redirect using a `` tag and does not support status codes. +> +> When using SSR or with a static adapter in `output: static` mode, status codes are supported. Astro will serve redirected `GET` requests with a status of `301` and use a status of `308` for any other request method. +> [Astro Configuration Reference: redirects](https://docs.astro.build/en/reference/configuration-reference/#redirects) + +This plugin works with various Astro hosting integrations, most of them generate further redirect files in the places they require so this plugin works in combination with them: + +| Provider | Plugin | +| ---------- | ---------------------------------------------------------------------------------------- | +| Netlify | [@astrojs/netlify](https://docs.astro.build/en/guides/integrations-guide/netlify/) | +| Vercel | [@astrojs/vercel](https://docs.astro.build/en/guides/integrations-guide/vercel/) | +| Cloudflare | [@astrojs/cloudflare](https://docs.astro.build/en/guides/integrations-guide/cloudflare/) | + +Because Astro integrations are run in the order they are defined in the `integrations` array, this plugin should come before any other integrations which make use of the `redirects` config. + +## Prerequisites + +The plugin is designed to work without configuration, especially if your project aligns with Astro's default settings. + +- Astro v3 (v2 probably works too, but is not tested) +- Markdown files should be in a directory (default is `src/pages/`) +- Slugs are extracted either from the frontmatter or the file/folder path + +## Installation + +```bash +cd yourproject/ + +# Using NPM +npx astro add astro-redirect-from +# Using Yarn +yarn astro add astro-redirect-from +# Using PNPM +pnpm astro add astro-redirect-from +``` + +If installing manually: + +```bash +npm i astro-redirect-from +``` + +Then load the plugin in your Astro config file, making sure this plugin comes before any other integrations which make use of the `redirects` config: + +```js title="astro.config.mjs" +import { defineConfig } from 'astro/config' +import redirectFrom from 'astro-redirect-from' + +export default defineConfig({ + // ... + integrations: [ + // make sure this is listed before any hosting integration + redirectFrom() + ] + // ... +)} +``` + +That's it. Your redirects will be automatically added the next time you run `astro dev` or `astro build`. If any of them have a `redirect_from` field, that is. + +For easy debugging, a `redirect_from.json` is written out into Astro's `cacheDir` setting, which by default is under `node_modules/.astro`. + +[See Usage](#usage) + +### Options + +All options are optional and can be passed in Astro's config file: + +```js title="astro.config.mjs" +import { defineConfig } from 'astro/config' +import redirectFrom from 'astro-redirect-from' +import { getMySlug } from './your-slug-function' + +export default defineConfig({ + // ... + integrations: [ + redirectFrom({ + contentDir: './content', + getSlug: getMySlug + }) + ] + // ... +)} +``` + +#### `contentDir: string` + +_Default: `src/pages/`_ + +Specify a different directory for your Markdown files, relative to the project root. + +#### `getSlug: (filePath: string) => string` + +_Default: `getSlugFromFilePath()`, see below_ + +If you need a custom slug structure, pass a function to construct your slug from the file path. The file path should be relative to the content directory. + +If you use a `slug` field in your frontmatter, this will be preferred by the plugin and passing any `getSlug` function will have no effect in that case. + +The default function is a great starting point: + +```typescript +function getSlugFromFilePath(filePath: string) { + const parsedPath = path.parse(filePath) + let slug + + // construct slug as full path from either: + // - folder name if file name is index.md, or + // - file name + if (parsedPath.base === 'index.md' || parsedPath.base === 'index.mdx') { + slug = `/${parsedPath.dir}` + } else { + slug = `/${parsedPath.dir}/${parsedPath.name}` + } + + return slug +} +``` + +## Usage + +In your Markdown file's frontmatter, use the key `redirect_from` followed by a list. + +```yaml +--- +redirect_from: + - /old-url-1 + - /old-url-2 + - /old-url-3.html +--- +``` + +## Check out & contribute + +Head over to GitHub to take a peek into the code, or to report some bugs. + +

+ GitHub +

diff --git a/package-lock.json b/package-lock.json index b59ad9cf..3882c0ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,9 @@ "@astrojs/ts-plugin": "^1.1.3", "@nanostores/react": "^0.7.1", "@rainbow-me/rainbowkit": "^1.0.11", - "astro": "^3.1.0", - "astro-expressive-code": "^0.22.2", + "astro": "3.1.0", + "astro-expressive-code": "^0.26.0", + "astro-redirect-from": "^0.2.3", "date-fns": "^2.30.0", "dms2dec": "^1.1.0", "fast-exif": "^2.0.1", @@ -51,8 +52,6 @@ "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "^7.33.2", "eslint-plugin-testing-library": "^6.0.1", - "front-matter": "^4.0.2", - "glob": "^10.3.4", "hast-util-to-html": "^9.0.0", "identity-obj-proxy": "^3.0.0", "markdownlint-cli": "^0.36.0", @@ -81,6 +80,35 @@ "node": "18" } }, + "astro-redirect-from": { + "version": "0.2.3", + "extraneous": true, + "license": "MIT", + "dependencies": { + "astro": ">= 3", + "globby": "^13.2.2", + "gray-matter": "^4.0.3" + }, + "devDependencies": { + "@types/node": "^20.6.3", + "@typescript-eslint/eslint-plugin": "^6.7.2", + "auto-changelog": "^2.4.0", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "prettier": "^3.0.3", + "release-it": "^16.1.5", + "typescript": "^5.2.2", + "vite": "^4.4.9" + }, + "engines": { + "node": ">=18.14.1", + "npm": ">=6.14.0" + }, + "peerDependencies": { + "astro": ">= 3" + } + }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "dev": true, @@ -341,7 +369,8 @@ }, "node_modules/@astrojs/telemetry": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.1.tgz", + "integrity": "sha512-7zJMuikRDQ0LLLivteu0+y4pqdgznrChFiRrY3qmKlOEkLWD1T3u1a5M970lvpErP7Vgh4P298JBPjv8LTj+sw==", "dependencies": { "ci-info": "^3.8.0", "debug": "^4.3.4", @@ -358,7 +387,8 @@ }, "node_modules/@astrojs/telemetry/node_modules/is-docker": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "bin": { "is-docker": "cli.js" }, @@ -371,7 +401,8 @@ }, "node_modules/@astrojs/telemetry/node_modules/is-wsl": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.0.0.tgz", + "integrity": "sha512-TQ7xXW/fTBaz/HhGSV779AC99ocpvb9qJPuPwyIea+F+Z+htcQ1wouAA0xEQaa4saVqyP8mwkoYp5efeM/4Gbg==", "dependencies": { "is-docker": "^3.0.0" }, @@ -1002,9 +1033,9 @@ } }, "node_modules/@expressive-code/core": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.22.2.tgz", - "integrity": "sha512-fVfnopl4dz75KgZ8q9G6sL+GW7QAzuWnNrm4zTKRabRzwdTZ9MCUmGPJvUpxKovJ1Z4t6YIKGHTson0a7fvV5g==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.26.0.tgz", + "integrity": "sha512-hhvRbIDiUX3DI3CnX8gDCY5lgn7TzhVz8PGunAfhAoIWp0+P72NSLoaLIg4FwOXFWEomTRLfkGk2cVQrppCXmQ==", "dependencies": { "@ctrl/tinycolor": "^3.6.0", "hast-util-to-html": "^8.0.4", @@ -1045,29 +1076,29 @@ } }, "node_modules/@expressive-code/plugin-frames": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.22.2.tgz", - "integrity": "sha512-Tn4COPTdySVJ6gygCCqYd0KMQXea4l6NN/9Px2uSekPDLUiE9Ff4i3005Pa1rr31m0hLBes4POnFRRmwqIu+ZA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.26.0.tgz", + "integrity": "sha512-mFPTh8tE1mItQcfJM6F6p8aWaa4Pi+KceBMIW6IsByQZKyMGdyS+PYphn0KbUjYI2za0/DVIJdukM9XueSpJ3A==", "dependencies": { - "@expressive-code/core": "^0.22.2", + "@expressive-code/core": "^0.26.0", "hastscript": "^7.2.0" } }, "node_modules/@expressive-code/plugin-shiki": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.22.2.tgz", - "integrity": "sha512-BDNkEb2OwmoL5kJJnNZ6fXk5IytZordEWGjWycEiKyHMXotJ+94S0PIIiTfVIp38H1faL+yd+kz2pF4t7ePcww==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.26.0.tgz", + "integrity": "sha512-3qCSfDSR31joT3lQLOVw+fSSNp/ZYpZP3Os8sr1ekTa4yh41SgiwWk5rYm8PhKMGOnw8nhzlknwLkcZJf20sOQ==", "dependencies": { - "@expressive-code/core": "^0.22.2", + "@expressive-code/core": "^0.26.0", "shiki": "^0.14.1" } }, "node_modules/@expressive-code/plugin-text-markers": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.22.2.tgz", - "integrity": "sha512-9lMON0kVEn0LAIe9mHcXaxdwqnxCF7MR+IExyC4OGhMVEc1p8Vp7rvSxsUPjySQV2QvYNTlQOaKVi/eI5oM1Ag==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.26.0.tgz", + "integrity": "sha512-klBtYJf3liTOnhiKHNpuO9KC1vAYcANtSWz07yPnnQzCwkRo9bTkdOI+9xSViVisNiAF6TfCuoEKjlB7BmtP7A==", "dependencies": { - "@expressive-code/core": "^0.22.2", + "@expressive-code/core": "^0.26.0", "hastscript": "^7.2.0", "unist-util-visit-parents": "^5.1.3" } @@ -4106,16 +4137,62 @@ } }, "node_modules/astro-expressive-code": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.22.2.tgz", - "integrity": "sha512-pmyuTJcEzfYzxPNBsIEjVNTzgWHxDGiv4D/oJusvOm30x7ETADMusqf9uYmJ6rS1jlwAgfaUWm7vTv6SaxWrSw==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.26.0.tgz", + "integrity": "sha512-ZofTdPVTu5yXFJJnwx/GDNwihufuGzUqn/sE1PqDWyDyDADsx28G8VitWH3KMVQ1tRSuc/rm6Y7MRgb/ydS1tA==", "dependencies": { - "remark-expressive-code": "^0.22.2" + "remark-expressive-code": "^0.26.0" }, "peerDependencies": { "astro": "^2.0.0 || ^3.0.0-beta" } }, + "node_modules/astro-redirect-from": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/astro-redirect-from/-/astro-redirect-from-0.2.3.tgz", + "integrity": "sha512-d0CyfAP8NH0oMbkSwnZyYcOHt02RYAmVWPhtnMsi1z+4ihAukS5LDUs6Clis+EF6PEk8K/aBfUHPGQa5j7IZGg==", + "dependencies": { + "astro": ">= 3", + "globby": "^13.2.2", + "gray-matter": "^4.0.3" + }, + "engines": { + "node": ">=18.14.1", + "npm": ">=6.14.0" + }, + "peerDependencies": { + "astro": ">= 3" + } + }, + "node_modules/astro-redirect-from/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/astro-redirect-from/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/astro/node_modules/@astrojs/compiler": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.1.0.tgz", @@ -4790,6 +4867,8 @@ }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -5003,13 +5082,14 @@ }, "node_modules/ci-info": { "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } @@ -5846,7 +5926,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "dev": true, "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -5857,7 +5936,8 @@ }, "node_modules/dlv": { "version": "1.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/dms2dec": { "version": "1.1.0", @@ -5945,7 +6025,8 @@ }, "node_modules/dset": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", "engines": { "node": ">=4" } @@ -6960,14 +7041,14 @@ } }, "node_modules/expressive-code": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.22.2.tgz", - "integrity": "sha512-2KOsjZKx6pRLVhlIo7ikZxL0CJzuvpP4LeGcFiz7YsqUtT3ak4MgEeD1ph82FNp2isl+vnc8OZu1xoGDi9JxMw==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.26.0.tgz", + "integrity": "sha512-1290zk/uHg+1gCiM9TNVl77FZGTTkdlaXDGSJjNffwFlaO6+nF4Mi0zFLKZ0QoPfPlucOF/DwNSVNa74Dxck1g==", "dependencies": { - "@expressive-code/core": "^0.22.2", - "@expressive-code/plugin-frames": "^0.22.2", - "@expressive-code/plugin-shiki": "^0.22.2", - "@expressive-code/plugin-text-markers": "^0.22.2" + "@expressive-code/core": "^0.26.0", + "@expressive-code/plugin-frames": "^0.26.0", + "@expressive-code/plugin-shiki": "^0.26.0", + "@expressive-code/plugin-text-markers": "^0.26.0" } }, "node_modules/extend": { @@ -7243,37 +7324,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "devOptional": true, @@ -8191,7 +8241,6 @@ }, "node_modules/ignore": { "version": "5.2.4", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -11746,7 +11795,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12890,11 +12938,11 @@ } }, "node_modules/remark-expressive-code": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/remark-expressive-code/-/remark-expressive-code-0.22.2.tgz", - "integrity": "sha512-NwVpKDHiHsD+3CwxDrXA6B2fNttVDK0BBnkHLPQoKNOuEokYWA9+3trZQw77txBGimNLsJQCBl/tddsHen2g8w==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/remark-expressive-code/-/remark-expressive-code-0.26.0.tgz", + "integrity": "sha512-kh50Wk+o/nNLqa1Z+IhGmhbzHZwiwNpAqcoPuQPBwTBqbleehlcw9m8PtHIwxMFhWqfhzXxtJj9TOmwc+AyHrA==", "dependencies": { - "expressive-code": "^0.22.2", + "expressive-code": "^0.26.0", "hast-util-to-html": "^8.0.4", "unist-util-visit": "^4.1.2" } @@ -13941,6 +13989,8 @@ }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } @@ -15134,8 +15184,9 @@ } }, "node_modules/undici": { - "version": "5.23.0", - "license": "MIT", + "version": "5.25.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.25.2.tgz", + "integrity": "sha512-tch8RbCfn1UUH1PeVCXva4V8gDpGAud/w0WubD6sHC46vYQ3KDxL+xv1A2UxK0N6jrVedutuPHxe1XIoqerwMw==", "dependencies": { "busboy": "^1.6.0" }, @@ -16261,7 +16312,8 @@ }, "node_modules/which-pm-runs": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", "engines": { "node": ">=4" } diff --git a/package.json b/package.json index 3c3ac695..7ac3a8d2 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "typecheck:astro": "astro check", "typecheck:tsc": "tsc --noEmit", "typecheck": "npm run typecheck:astro && npm run typecheck:tsc", - "prebuild": "run-p --silent --continue-on-error create:symlinks create:icons create:redirects move:downloads", + "prebuild": "run-p --silent --continue-on-error create:symlinks create:icons move:downloads", "test:unit": "vitest run --config './test/vitest.config.ts' --coverage", "test:e2e": "playwright test --config './test/playwright.config.ts'", "lint": "run-p --silent lint:js lint:css lint:md", @@ -36,8 +36,9 @@ "@astrojs/ts-plugin": "^1.1.3", "@nanostores/react": "^0.7.1", "@rainbow-me/rainbowkit": "^1.0.11", - "astro": "^3.1.0", - "astro-expressive-code": "^0.22.2", + "astro": "3.1.0", + "astro-expressive-code": "^0.26.0", + "astro-redirect-from": "^0.2.3", "date-fns": "^2.30.0", "dms2dec": "^1.1.0", "fast-exif": "^2.0.1", @@ -71,8 +72,6 @@ "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "^7.33.2", "eslint-plugin-testing-library": "^6.0.1", - "front-matter": "^4.0.2", - "glob": "^10.3.4", "hast-util-to-html": "^9.0.0", "identity-obj-proxy": "^3.0.0", "markdownlint-cli": "^0.36.0", diff --git a/scripts/move-downloads.test.ts b/scripts/move-downloads.test.ts index 3d5d334c..269b9b7c 100644 --- a/scripts/move-downloads.test.ts +++ b/scripts/move-downloads.test.ts @@ -26,7 +26,7 @@ test('copyZipFiles should copy zip files', async () => { fail: vi.fn() } - copyZipFiles(sourceDir, destDir, mockOra as any) + await copyZipFiles(sourceDir, destDir, mockOra as any) const file1 = await fs.readFile(path.join(destDir, 'file1.zip'), 'utf-8') const file2 = await fs.readFile(path.join(destDir, 'file2.zip'), 'utf-8') diff --git a/scripts/move-downloads.ts b/scripts/move-downloads.ts index 257c96ca..87128ff0 100644 --- a/scripts/move-downloads.ts +++ b/scripts/move-downloads.ts @@ -4,7 +4,7 @@ // import fs from 'node:fs' import path from 'node:path' -import { glob } from 'glob' +import globby from 'globby' import ora, { type Ora } from 'ora' import chalk from 'chalk' @@ -30,7 +30,7 @@ function removeFolderContents(folderPath: string) { } } -export function copyZipFiles( +export async function copyZipFiles( source: string, destination: string, spinner: Ora @@ -44,7 +44,7 @@ export function copyZipFiles( } // Find all files recursively in the source folder - const zipFiles = glob.sync(filesGlob, { cwd: source }) + const zipFiles = await globby(filesGlob, { cwd: source }) zipFiles.forEach((zipFile: string) => { const sourcePath = path.join(source, zipFile) @@ -70,4 +70,4 @@ export function copyZipFiles( ) } -copyZipFiles(sourceFolder, destinationFolder, spinner) +await copyZipFiles(sourceFolder, destinationFolder, spinner) diff --git a/scripts/redirect-from.test.ts b/scripts/redirect-from.test.ts deleted file mode 100644 index fa1a6a9a..00000000 --- a/scripts/redirect-from.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { test, expect, vi } from 'vitest' -import fs from 'node:fs/promises' -import { Stats } from 'node:fs' -import { findMarkdownFilesWithRedirects } from './redirect-from' - -test('findMarkdownFilesWithRedirects should generate correct redirects', async () => { - const readdirMock = vi.spyOn(fs, 'readdir') - readdirMock.mockResolvedValue(['post1.md', 'post2.md'] as any) - - const statMock = vi.spyOn(fs, 'stat') - statMock.mockResolvedValue({ isFile: () => true } as Stats) - - const readFileMock = vi.spyOn(fs, 'readFile') - readFileMock.mockResolvedValueOnce( - '---\nredirect_from: ["/old1", "/old2"]\nslug: /new1\n---' - ) - readFileMock.mockResolvedValueOnce( - '---\nredirect_from: ["/old3"]\nslug: /new2\n---' - ) - - // Mock fs.writeFile to do nothing - const writeFileMock = vi.spyOn(fs, 'writeFile') - writeFileMock.mockResolvedValue() - - const redirects = await findMarkdownFilesWithRedirects('some/dir') - - expect(redirects).toEqual({ - '/old1': '/new1', - '/old2': '/new1', - '/old3': '/new2' - }) -}) diff --git a/scripts/redirect-from.ts b/scripts/redirect-from.ts deleted file mode 100644 index 88f46aac..00000000 --- a/scripts/redirect-from.ts +++ /dev/null @@ -1,76 +0,0 @@ -// -// astro-redirect-from -// -import fs from 'node:fs/promises' -import path from 'node:path' -import frontmatter from 'front-matter' -import ora from 'ora' -import chalk from 'chalk' - -const contentDir = 'content/' -const outputFilePath = '.config/redirects.json' -let fileCount = 0 - -type Frontmatter = { redirect_from?: string[]; slug?: string } - -const spinner = ora( - `${chalk.bold('[redirect-from]')} Extract redirects` -).start() - -export async function findMarkdownFilesWithRedirects( - dir: string -): Promise<{ [old: string]: string }> { - const redirects: { [old: string]: string } = {} - - async function processDir(currentDir: string) { - const items = await fs.readdir(currentDir, { recursive: true }) - - for (const item of items) { - const itemPath = path.join(currentDir, item) - const stats = await fs.stat(itemPath) - - if ( - stats.isFile() && - item.endsWith('.md') && - !itemPath.includes('links') - ) { - const fileContent = await fs.readFile(itemPath, 'utf-8') - const { attributes }: { attributes: Frontmatter } = - frontmatter(fileContent) - - // construct slug from frontmatter or folder name - const postSlug = - attributes.slug || `/${itemPath.split('/')[2].substring(11)}` - - // Check if the Markdown file has a redirect_from field - if (attributes.redirect_from) { - fileCount++ - const redirectFromSlugs = attributes.redirect_from - for (const slug of redirectFromSlugs) { - // Add entries to the redirects object - redirects[slug] = postSlug - } - } - } - } - } - - await processDir(dir) - return redirects -} - -try { - const redirects = await findMarkdownFilesWithRedirects(contentDir) - const redirectsJSON = JSON.stringify(redirects, null, 2) - - // Write the redirects object to the output file - fs.writeFile(outputFilePath, redirectsJSON, 'utf-8') - - spinner.succeed( - `${chalk.bold('[redirect-from]')} Extracted ${ - Object.keys(redirects).length - } redirects from ${fileCount} files to ${outputFilePath}` - ) -} catch (error: any) { - spinner.fail(`${chalk.bold('[redirect-from]')} ${(error as Error).message}`) -} diff --git a/src/components/Changelog/index.astro b/src/components/Changelog/index.astro index 2367d396..7cfe2e1c 100644 --- a/src/components/Changelog/index.astro +++ b/src/components/Changelog/index.astro @@ -13,7 +13,7 @@ if (!repoInfo) { console.info(`Repo ${repo} not found`) return } -const { url, owner, object } = repoInfo +const { url, object } = repoInfo const changelogHtml = await markdownToHtml( object.text.replace('### Changelog', '') ) @@ -27,7 +27,7 @@ const changelogHtml = await markdownToHtml(

sourced from{' '} - {`${owner?.login}/${repo}:CHANGELOG.md`} + {`${repo}:CHANGELOG.md`}

diff --git a/src/lib/astro/getAllPostsForSearch.ts b/src/lib/astro/getAllPostsForSearch.ts index 496a4bee..56e68e7a 100644 --- a/src/lib/astro/getAllPostsForSearch.ts +++ b/src/lib/astro/getAllPostsForSearch.ts @@ -1,10 +1,10 @@ import { type CollectionEntry } from 'astro:content' -import { getAllPosts } from './index' +import { getAllPosts } from './getAllPosts' // helps to reduce DOM size export async function getAllPostsForSearch() { const allPosts = await getAllPosts() - if (!allPosts) return + if (!allPosts) return [] const cleaned = await Promise.all( allPosts.map(async (post) => { diff --git a/src/lib/astro/getSlug.ts b/src/lib/astro/getSlug.ts new file mode 100644 index 00000000..b7963599 --- /dev/null +++ b/src/lib/astro/getSlug.ts @@ -0,0 +1,22 @@ +import type { CollectionEntry } from 'astro:content' +import path from 'node:path' + +export function getSlug(filePath: string) { + const parsedPath = path.parse(filePath) + let slug + + // construct slug as full path from either file or folder name, + if (parsedPath.base === 'index.md') { + slug = parsedPath.dir + } else { + slug = `${parsedPath.dir}/${parsedPath.name}` + } + + // remove folder structure + slug = slug.split('/')[1] + + // remove the date prefix + slug = slug.substring(11) + + return slug as CollectionEntry<'articles' | 'photos' | 'links'>['slug'] +} diff --git a/src/lib/astro/loadAndFormatCollection.ts b/src/lib/astro/loadAndFormatCollection.ts index d511ba8d..440ecc12 100644 --- a/src/lib/astro/loadAndFormatCollection.ts +++ b/src/lib/astro/loadAndFormatCollection.ts @@ -1,8 +1,9 @@ -import { getCollection, type CollectionEntry } from 'astro:content' +import { getCollection } from 'astro:content' import { readOutExif } from '@lib/exif' import path from 'path' import config from '@config/blog.config' import { sortPosts } from './sortPosts' +import { getSlug } from './getSlug' // // Main loader for all collections content. @@ -29,19 +30,9 @@ export async function loadAndFormatCollection( : new Date(post.id.split('/')[0].substring(0, 10)) // - // remove date from slug + // construct slug from folder or file name // - let slug = post.id.split('/')[0].substring(11) as CollectionEntry< - 'articles' | 'photos' | 'links' - >['slug'] - - // links are not folders so remove .md from the end - if (post.collection === 'links') { - slug = slug.substring( - 0, - slug.length - 3 - ) as CollectionEntry<'links'>['slug'] - } + const slug = getSlug(`${post.collection}/${post.id}`) const githubLink = `${config.repoContentPath}/${post.collection}/${post.id}` diff --git a/test/e2e/post.spec.ts b/test/e2e/post.spec.ts index 7c44b362..f2eba9c4 100644 --- a/test/e2e/post.spec.ts +++ b/test/e2e/post.spec.ts @@ -9,11 +9,11 @@ test.beforeEach(async ({ page }) => { }) test('meta is correct', async ({ page }) => { - await expect(page).toHaveTitle(/Redirect plugin for Markdown Pages in Gatsby/) + await expect(page).toHaveTitle(/Redirect Plugin for Markdown Pages in Gatsby/) await expect(page.locator('meta[property="og:title"]')).toHaveAttribute( 'content', - /Redirect plugin for Markdown Pages in Gatsby/ + /Redirect Plugin for Markdown Pages in Gatsby/ ) await expect(page.locator('link[rel="canonical"]')).toHaveAttribute( 'href',