mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-01-07 21:44:02 -05:00
104 lines
3.0 KiB
JavaScript
104 lines
3.0 KiB
JavaScript
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 `<pre><code>${code}</code></pre>`;
|
|
}
|
|
const html = escapeSvelte(highlighter.codeToHtml(code, { lang, theme: dracula }));
|
|
return `{@html \`${html}\`}`;
|
|
} catch (error) {
|
|
console.error('Failed to highlight code:', error);
|
|
return `<pre><code>${code}</code></pre>`;
|
|
}
|
|
}
|
|
},
|
|
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;
|