import fs from "node:fs"; // Rehype plugins import { rehypeHeadingIds } from "@astrojs/markdown-remark"; import mdx from "@astrojs/mdx"; import sitemap from "@astrojs/sitemap"; import tailwind from "@tailwindcss/vite"; import { defineConfig } from "astro/config"; import expressiveCode from "astro-expressive-code"; import icon from "astro-icon"; import robotsTxt from "astro-robots-txt"; import webmanifest from "astro-webmanifest"; import rehypeAutolinkHeadings from "rehype-autolink-headings"; import rehypeExternalLinks from "rehype-external-links"; import rehypeUnwrapImages from "rehype-unwrap-images"; // Remark plugins import remarkDirective from "remark-directive"; /* Handle ::: directives as nodes */ import robotsConfig from "./robots-txt.config"; import { rehypeImageCaptions } from "./src/plugins/rehype-image-captions"; /* Add image captions on hover */ import { remarkAdmonitions } from "./src/plugins/remark-admonitions"; /* Add admonitions */ import { expressiveCodeOptions, siteConfig } from "./src/site.config"; // https://astro.build/config export default defineConfig({ site: siteConfig.url, integrations: [ expressiveCode(expressiveCodeOptions), icon(), sitemap(), mdx(), robotsTxt(robotsConfig), webmanifest({ // See: https://github.com/alextim/astro-lib/blob/main/packages/astro-webmanifest/README.md name: siteConfig.title, short_name: "Dawid_Rycerz", // optional description: siteConfig.description, lang: siteConfig.lang, icon: "public/icon.svg", // the source for generating favicon & icons icons: [ { src: "icons/apple-touch-icon.png", // used in src/components/BaseHead.astro L:26 sizes: "180x180", type: "image/png", }, { src: "icons/icon-192.png", sizes: "192x192", type: "image/png", }, { src: "icons/icon-512.png", sizes: "512x512", type: "image/png", }, ], start_url: "/", background_color: "#1d1f21", theme_color: "#2bbc8a", display: "standalone", config: { insertFaviconLinks: false, insertThemeColorMeta: false, insertManifestLink: false, }, }), ], markdown: { rehypePlugins: [ rehypeImageCaptions, rehypeHeadingIds, [rehypeAutolinkHeadings, { behavior: "wrap", properties: { className: ["not-prose"] } }], [ rehypeExternalLinks, { rel: ["noreferrer", "noopener"], target: "_blank", }, ], rehypeUnwrapImages, ], remarkPlugins: [remarkDirective, remarkAdmonitions], remarkRehype: { footnoteLabelProperties: { className: [""], }, }, }, // https://docs.astro.build/en/guides/prefetch/ prefetch: true, vite: { optimizeDeps: { exclude: ["@resvg/resvg-js"], }, plugins: [tailwind(), rawFonts([".ttf", ".woff"])], }, }); function rawFonts(ext: string[]) { return { name: "vite-plugin-raw-fonts", // @ts-expect-error:next-line transform(_, id) { if (ext.some((e) => id.endsWith(e))) { const buffer = fs.readFileSync(id); return { code: `export default ${JSON.stringify(buffer)}`, map: null, }; } }, }; }