const hljs = require('highlight.js'); const MarkdownIt = require('markdown-it'); function markdownCardWrapper(htmlCode) { const group = htmlCode .replace(/

{ if (fragment.indexOf('${fragment}`; } return fragment; }) .join(''); } function markdownHighlight(str, lang) { if (lang && hljs.getLanguage(lang)) { // https://github.com/highlightjs/highlight.js/issues/2277 return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value; } return ''; } const initMarkdownIt = () => { const md = new MarkdownIt({ html: true, linkify: true, typographer: false, highlight: markdownHighlight, }); const { slugify } = require('transliteration'); const markdownItAnchor = require('markdown-it-anchor'); markdownLinkOpen(md); md.use(markdownItAnchor, { level: 2, slugify, }); return md; }; const md = initMarkdownIt(); const markdownToJs = (raw) => { let html = md.render(raw); html = markdownCardWrapper(html); return ` import { openBlock, createElementBlock } from 'vue'; const _hoisted_1 = ['innerHTML']; const html = ${JSON.stringify(html)}; export default { setup() { return { html: '' }; }, render() { return ( openBlock(), createElementBlock( 'div', { class: 'van-doc-markdown-body', innerHTML: html, }, null, 8 /* PROPS */, _hoisted_1, ) ); }, }; ` }; // add target="_blank" to all links function markdownLinkOpen(md) { const defaultRender = md.renderer.rules.link_open; md.renderer.rules.link_open = (tokens, idx, options, env, self) => { const aIndex = tokens[idx].attrIndex('target'); if (aIndex < 0) { tokens[idx].attrPush(['target', '_blank']); // add new attribute } if (defaultRender) { return defaultRender(tokens, idx, options, env, self); } return self.renderToken(tokens, idx, options); }; } module.exports = function (raw) { return markdownToJs(raw); };