/***
@ Base: https://carbon.now.sh/
@ Author: Shannz
@ Note: Beautify your code with carbon with many styles.
***/
import mql from '@microlink/mql';
const CARBON_CONFIG = {
bg: 'rgba(226,233,239,1)',
t: 'dracula-pro', //seti, one-light, one-dark, verminal, night-owl, nord, synthwave-84, 3024-night, blackboard, base16-dark, base16-light, cobalt, duotone-dark, hopscotch, lucario, material, monokai, oceanic-next, panda-syntax, paraiso-dark, solarized, twilight, yeti, zenburn
wt: 'none',
l: 'auto',
ds: 'false',
dsyoff: '20px',
dsblur: '68px',
wc: 'true',
wa: 'true',
pv: '56px',
ph: '56px',
ln: 'true',
fl: '1',
fm: 'Fira Code', //Monoid, Fantasque Sans Mono, Hack, JetBrains Mono, Cascadia Code, IBM Plex Mono, Anonymous Pro, Droid Sans Mono, Inconsolata, Source Code Pro, Ubuntu Mono, Space Mono
fs: '14px',
lh: '152%',
si: 'false',
es: '2x',
wm: 'false',
};
export const carbon = async (codeSnippet) => {
try {
const params = new URLSearchParams(CARBON_CONFIG);
params.append('code', codeSnippet);
const targetUrl = `https://carbon.now.sh/?${params.toString()}`;
const { data } = await mql(targetUrl, {
screenshot: {
element: '.export-container',
optimizeForSpeed: true
},
viewport: { width: 1024, height: 768 },
waitFor: 3000,
meta: false,
});
if (data.screenshot && data.screenshot.url) {
return { success: true, image: data.screenshot.url, font: CARBON_CONFIG.fm, theme: CARBON_CONFIG.t };
} else {
throw new Error('Screenshot URL tidak ditemukan dalam response.');
}
} catch (error) {
console.error('Error generating Carbon URL:', error.message);
return null;
}
};