@stacksjs/error-handling
Version:
Type safe error handling.
1 lines • 1.11 kB
JavaScript
import{createHighlighter,detectLanguageFromExtension,getLanguageByExtension}from"ts-syntax-highlighter";let sharedHighlighter=null,sharedCss=null;async function getHighlighter(){if(!sharedHighlighter)sharedHighlighter=await createHighlighter({theme:"github-light",cache:!0});return sharedHighlighter}export function languageForFile(file){const ext=file.includes(".")?`.${file.split(".").pop()}`:file,byExt=detectLanguageFromExtension(file)??getLanguageByExtension(ext);if(byExt)return byExt.id;if(ext===".php")return"php";if(ext===".sql")return"sql";return"text"}export async function highlightSnippet(code,file,highlightLine,startingLine){const highlighter=await getHighlighter(),lang=languageForFile(file),relativeHighlight=Math.max(1,highlightLine-startingLine+1),result=await highlighter.highlight(code,lang,{lineNumbers:!0,highlightLines:[relativeHighlight]});if(result.css&&!sharedCss)sharedCss=result.css;return{html:result.html,css:sharedCss??result.css??""}}export function getSharedHighlighterCss(){return sharedCss??""}export function resetHighlighterCache(){sharedHighlighter=null;sharedCss=null}