import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; import adapter from '@sveltejs/adapter-static'; import fs from 'fs'; import { mdsvex, escapeSvelte } from 'mdsvex'; import remarkAlert from './src/lib/markdown.js' import relativeImages from 'mdsvex-relative-images' import remarkToc from 'remark-toc' import rehypeSlug from 'rehype-slug' import { getHighlighter } from 'shiki' import rehypeKatexSvelte from "rehype-katex-svelte"; import remarkMath from 'remark-math' const contentDir = process.env?.CHRYSOBLOG_CONTENT ?? "src/content"; const metadata = await fs.promises.readFile(contentDir + "/metadata.json") .then((file) => JSON.parse(file.toString())); const langs = metadata?.markdown.highlighterLangs ?? [ "javascript", "lean", "lisp", "nix", "python", "rust", "toml", "typescript", "yaml", "c", "c++", "sh", ]; const katexOptions = metadata?.markdown.katex ?? { macros: { "\\Nat": "\\mathbb N", "\\Complex": "\\mathbb C", "\\vec": "\\boldsymbol", "\\mat": "\\boldsymbol", "\\rv": "\\mathrm", }, }; const highlightingThemes = { light: 'vitesse-light', dark: 'vitesse-dark', }; const themes = Object.keys(highlightingThemes).map(function(k){ return highlightingThemes[k] }); const highlighter = await getHighlighter({ themes, langs, }) await highlighter.loadLanguage(...langs); /** @type {import('@sveltejs/kit').Config} */ const config = { // Consult https://kit.svelte.dev/docs/integrations#preprocessors // for more information about preprocessors preprocess: [ mdsvex({ extensions: ['.md'], remarkPlugins: [ remarkAlert, relativeImages, [remarkToc, {tight: true}], remarkMath, ], rehypePlugins: [ [ rehypeKatexSvelte, katexOptions ], rehypeSlug, ], highlight: { highlighter: async (code, lang = 'text') => { const html = escapeSvelte(highlighter.codeToHtml(code, { lang, themes: highlightingThemes, })) return `{@html \`${html}\` }` } }, }), vitePreprocess(), ], extensions: [".svelte", ".md"], kit: { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported, or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter({ pages: "build", assets: "build", fallback: null, precompress: false, trailingSlash: 'always', }), prerender: { crawl: true, entries: ['*'], }, alias: { $content: contentDir, "@/*": "./*", }, } }; export default config;