@analogjs/platform
Version:
The fullstack meta-framework for Angular
58 lines • 4.48 kB
JavaScript
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('&', '&')
.replaceAll('<', '<')
.replaceAll('>', '>')
.replaceAll('"', '"')
.replaceAll("'", ''');
}
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==