|
|
|
// https://astro.build/config
|
|
|
|
import preact from '@astrojs/preact';
|
|
|
|
import sitemap from '@astrojs/sitemap';
|
|
|
|
import tailwind from '@astrojs/tailwind';
|
|
|
|
import compress from 'astro-compress';
|
|
|
|
import { defineConfig } from 'astro/config';
|
|
|
|
import rehypeExternalLinks from 'rehype-external-links';
|
|
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import { serializeSitemap, shouldIndexPage } from './sitemap.mjs';
|
|
|
|
|
|
|
|
// https://astro.build/config
|
|
|
|
export default defineConfig({
|
|
|
|
site: 'https://roadmap.sh/',
|
|
|
|
markdown: {
|
|
|
|
shikiConfig: {
|
|
|
|
theme: 'dracula',
|
|
|
|
},
|
|
|
|
rehypePlugins: [
|
|
|
|
[
|
|
|
|
rehypeExternalLinks,
|
|
|
|
{
|
|
|
|
target: '_blank',
|
|
|
|
rel: function (element) {
|
|
|
|
const href = element.properties.href;
|
|
|
|
const whiteListedStarts = [
|
|
|
|
'/',
|
|
|
|
'#',
|
|
|
|
'mailto:',
|
|
|
|
'https://github.com/kamranahmedse',
|
|
|
|
'https://thenewstack.io',
|
|
|
|
'https://cs.fyi',
|
|
|
|
'https://roadmap.sh',
|
|
|
|
];
|
|
|
|
|
|
|
|
if (whiteListedStarts.some((start) => href.startsWith(start))) {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
return 'noopener noreferrer nofollow';
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
|
|
|
},
|
|
|
|
build: {
|
|
|
|
format: 'file',
|
|
|
|
},
|
|
|
|
integrations: [
|
|
|
|
{
|
|
|
|
name: 'client-authenticated',
|
|
|
|
hooks: {
|
|
|
|
'astro:config:setup'(options) {
|
|
|
|
options.addClientDirective({
|
|
|
|
name: 'authenticated',
|
|
|
|
entrypoint: fileURLToPath(
|
|
|
|
new URL(
|
|
|
|
'./src/directives/client-authenticated.mjs',
|
|
|
|
import.meta.url
|
|
|
|
)
|
|
|
|
),
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
tailwind({
|
|
|
|
config: {
|
|
|
|
applyBaseStyles: false,
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
sitemap({
|
|
|
|
filter: shouldIndexPage,
|
|
|
|
serialize: serializeSitemap,
|
|
|
|
}),
|
|
|
|
compress({
|
|
|
|
CSS: false,
|
|
|
|
JavaScript: false,
|
|
|
|
}),
|
|
|
|
preact(),
|
|
|
|
],
|
|
|
|
});
|