import adapter from '@sveltejs/adapter-auto'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; import { mdsvex } from 'mdsvex'; import rehypeSlug from 'rehype-slug'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; import rehypeExternalLinks from 'rehype-external-links'; import rehypeUnwrapImages from 'rehype-unwrap-images'; import { escapeSvelte } from 'mdsvex'; //import { fileURLToPath } from 'url'; //import { dirname, join } from 'path'; import { getSingletonHighlighter } from 'shiki' import dracula from 'shiki/themes/dracula.mjs' //const __filename = fileURLToPath(import.meta.url); //const __dirname = dirname(__filename); // Initialize Shiki highlighter const initializeHighlighter = async () => { try { return await getSingletonHighlighter({ themes: ['dracula'], langs: ['javascript', 'typescript', 'svelte', 'markdown', 'bash', 'go', 'text', 'python', 'rust', 'c', 'c++', 'shell', 'ruby', 'json', 'html', 'css', 'java', 'sql', 'toml', 'yaml'] }); } catch (error) { console.error('Failed to initialize Shiki highlighter:', error); return null; } }; let shikiHighlighterPromise = initializeHighlighter(); /** @type {import('mdsvex').MdsvexOptions} */ const mdsvexOptions = { extensions: ['.md', '.svx'], smartypants: { quotes: true, ellipses: true, backticks: true, dashes: true, }, highlight: { highlighter: async (code, lang) => { try { const highlighter = await shikiHighlighterPromise; if (!highlighter) { console.warn('Shiki highlighter not available, falling back to plain text'); return `
${code}`;
}
const html = escapeSvelte(highlighter.codeToHtml(code, { lang, theme: dracula }));
return `{@html \`${html}\`}`;
} catch (error) {
console.error('Failed to highlight code:', error);
return `${code}`;
}
}
},
rehypePlugins: [
rehypeSlug,
rehypeUnwrapImages,
[rehypeAutolinkHeadings, {behavior: 'wrap'}],
[rehypeExternalLinks, {
target: '_blank',
rel: ['nofollow', 'noopener', 'noreferrer']
}]
],
};
/** @type {import('@sveltejs/kit').Config} */
const config = {
extensions: ['.svelte', '.md', '.svx'],
kit: {
adapter: adapter({
// You can add adapter-specific options here
pages: 'build',
assets: 'build',
fallback: null,
precompress: false,
strict: true
}),
prerender: {
handleHttpError: ({ path, referrer, message }) => {
// Log the error for debugging
console.warn(`HTTP error during prerendering: ${message}\nPath: ${path}\nReferrer: ${referrer}`);
// ignore 404 for specific case
if (path === '/not-found' && referrer === '/') {
return;
}
// otherwise fail
throw new Error(message);
},
},
},
preprocess: [
vitePreprocess({
script: true,
}),
mdsvex(mdsvexOptions)
],
};
export default config;