UNPKG

@analogjs/platform

Version:

The fullstack meta-framework for Angular

58 lines 4.48 kB
import markedShiki from 'marked-shiki'; import { createHighlighter, } from 'shiki'; import { MarkedContentHighlighter } from '../marked/marked-content-highlighter.js'; export const defaultHighlighterOptions = { langs: [ 'json', 'ts', 'tsx', 'js', 'jsx', 'html', 'css', 'angular-html', 'angular-ts', ], themes: ['github-dark', 'github-light'], }; function escapeHtml(code) { return code .replaceAll('&', '&amp;') .replaceAll('<', '&lt;') .replaceAll('>', '&gt;') .replaceAll('"', '&quot;') .replaceAll("'", '&#39;'); } export class ShikiHighlighter extends MarkedContentHighlighter { constructor(highlighterOptions, highlightOptions, container, hasLoadMermaid = false, skipLangs = []) { super(); this.highlighterOptions = highlighterOptions; this.highlightOptions = highlightOptions; this.container = container; this.hasLoadMermaid = hasLoadMermaid; this.skipLangs = skipLangs; this.highlighter = createHighlighter(this.highlighterOptions); } getHighlightExtension() { return markedShiki({ container: this.container, highlight: async (code, lang, props) => { if (this.hasLoadMermaid && lang === 'mermaid') { return `<pre class="mermaid">${code}</pre>`; } if (this.skipLangs.includes(lang)) { const escapedCode = escapeHtml(code); return `<pre class="language-${lang}"><code class="language-${lang}">${escapedCode}</code></pre>`; } const { codeToHtml } = await this.highlighter; return codeToHtml(code, Object.assign({ lang, // required by `transformerMeta*` meta: { __raw: props.join(' ') }, theme: 'github-dark', }, this.highlightOptions)); }, }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpa2ktaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL2NvbnRlbnQvc2hpa2kvc2hpa2ktaGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFPTCxpQkFBaUIsR0FDbEIsTUFBTSxPQUFPLENBQUM7QUFFZixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVVuRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxLQUFLLEVBQUU7UUFDTCxNQUFNO1FBQ04sSUFBSTtRQUNKLEtBQUs7UUFDTCxJQUFJO1FBQ0osS0FBSztRQUNMLE1BQU07UUFDTixLQUFLO1FBQ0wsY0FBYztRQUNkLFlBQVk7S0FDYjtJQUNELE1BQU0sRUFBRSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUM7Q0FDeEMsQ0FBQztBQUVGLFNBQVMsVUFBVSxDQUFDLElBQVk7SUFDOUIsT0FBTyxJQUFJO1NBQ1IsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7U0FDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7U0FDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7U0FDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7U0FDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLHdCQUF3QjtJQUc1RCxZQUNVLGtCQUEyQyxFQUMzQyxnQkFBdUMsRUFDdkMsU0FBaUIsRUFDakIsaUJBQWlCLEtBQUssRUFDdEIsWUFBc0IsRUFBRTtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQU5BLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBeUI7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF1QjtRQUN2QyxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFQakIsZ0JBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQVUxRSxDQUFDO0lBQ0QscUJBQXFCO1FBQ25CLE9BQU8sV0FBVyxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzlDLE9BQU8sd0JBQXdCLElBQUksUUFBUSxDQUFDO2dCQUM5QyxDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBYyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUVyQyxPQUFPLHdCQUF3QixJQUFJLDJCQUEyQixJQUFJLEtBQUssV0FBVyxlQUFlLENBQUM7Z0JBQ3BHLENBQUM7Z0JBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDOUMsT0FBTyxVQUFVLENBQ2YsSUFBSSxFQUNKLE1BQU0sQ0FBQyxNQUFNLENBQ1g7b0JBQ0UsSUFBSTtvQkFDSixpQ0FBaUM7b0JBQ2pDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNoQyxLQUFLLEVBQUUsYUFBYTtpQkFDckIsRUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==