const marked = require('marked') const createRenderer = require('./md-renderer') const renderer = createRenderer() const projectPath = require('./project-path') function parseMdAsAnchor (tokens) { const titles = tokens .filter((token) => token.type === 'heading' && token.depth === 2) .map((token) => token.text) const linkTags = titles.map((title) => { const href = title.replace(/ /g, '-') return `` }) return `${linkTags.join( '\n' )}` } function parseComponents (tokens) { const componentsIndex = tokens.findIndex( (token) => token.type === 'code' && token.lang === 'component' ) let components = [] if (~componentsIndex) { components = tokens[componentsIndex].text components = components .split('\n') .map((component) => component.trim()) .filter((component) => component.length) tokens.splice(componentsIndex, 1) } return components } module.exports = function (content, path) { const relativeURL = path.replace(projectPath + '/', '') const showAnchor = !!~content.search('') // for marked bug https://github.com/markedjs/marked/issues/1047 content = content.replace(/\n#/g, '\n\n#') const tokens = marked.lexer(content) const titleIndex = tokens.findIndex( (token) => token.type === 'heading' && token.depth === 1 ) const titleText = titleIndex > -1 ? JSON.stringify(tokens[titleIndex].text) : null const anchor = parseMdAsAnchor(tokens) const components = parseComponents(tokens) const importStatements = components .map((component) => `import ${component} from './${component}'`) .join('\n') let mdContent = marked.parser(tokens, { renderer }) if (titleText) { const githubButton = `` const titleReg = /(]*>)(.*?)(<\/n-h1>)/ mdContent = mdContent.replace(titleReg, `${githubButton}`) } return ` ` }