/* eslint-disable @typescript-eslint/no-var-requires */ const { stripScript, stripTemplate, genInlineComponentText, } = require('./util') const md = require('./config') module.exports = function(source) { const content = md.render(source) const startTag = '' const endTagLen = endTag.length let componenetsString = '' let id = 0 // demo 的 id let output = [] // 输出的内容 let start = 0 // 字符串开始位置 let commentStart = content.indexOf(startTag) let commentEnd = content.indexOf(endTag, commentStart + startTagLen) while (commentStart !== -1 && commentEnd !== -1) { output.push(content.slice(start, commentStart)) const commentContent = content.slice(commentStart + startTagLen, commentEnd) const html = stripTemplate(commentContent) const script = stripScript(commentContent) let demoComponentContent = genInlineComponentText(html, script) const demoComponentName = `element-demo${id}` output.push(``) componenetsString += `${JSON.stringify(demoComponentName)}: ${demoComponentContent},` // 重新计算下一次的位置 id++ start = commentEnd + endTagLen commentStart = content.indexOf(startTag, start) commentEnd = content.indexOf(endTag, commentStart + startTagLen) } // 仅允许在 demo 不存在时,才可以在 Markdown 中写 script 标签 // todo: 优化这段逻辑 let pageScript = '' if (componenetsString) { pageScript = `` } else if (content.indexOf('') + ''.length pageScript = content.slice(0, start) } output.push(content.slice(start)) const result = ` ${pageScript} ` return result }