carbon.mjs

Beautify your code with carbon with many styles.

#tools#code#image
33
7 Jan 2026, 02:05
RawEdit
javascript0 lines
/***
  @ 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;
  }
};