@vuese/markdown-render is a tool that renders the markdown string based on the result of @vuese/parser.


yarn add @vuese/markdown-render



// Import parser function
import { parser } from '@vuese/parser'
import { Render } from '@vuese/markdown-render'

// Read vue file content
const source = fs.readFileSync('path-to-your-component.vue', 'utf-8')

// Parse and get the result using the parser function
try {
  const parserRes = parser(source)
  // Create a render instance
  const r = new Render(parserRes)
  // Basic rendering, the return value is an object
  const renderRes = r.render()
  // Render full markdown text, return value is markdown string
  const markdownRes = r.renderMarkdown()
} catch(e) {


@vuese/markdown-render can only handle the default processing results of the @vuese/parser module correctly.

Render Class

The type of the @vuese/markdown-render module default export class is as follows:



class Render {
  parserResult: ParserResult
  options?: RenderOptions
  constructor(parserResult: ParserResult, options?: RenderOptions)
  render(): RenderResult
  propRender(propsRes: PropsResult[]): string
  slotRender(slotsRes: SlotResult[]): string
  eventRender(propsRes: EventResult[]): string
  methodRender(slotsRes: MethodResult[]): string
  renderTabelHeader(header: string[]): string
  renderTabelRow(row: string[]): string
  renderSplitLine(num: number): string
  renderMarkdown(): MarkdownResult | null


Focus on the highlighted code.

The constructor of the Render class takes two arguments: the parsing result of the @vuese/parser module, and an optional option object.


  • Type:
interface RenderOptions {
  props: string[]
  slots: string[]
  events: string[]
  methods: string[]
  • Default:
  props: ['Name', 'Description', 'Type', 'Required', 'Default'],
  events: ['Event Name', 'Description', 'Parameters'],
  slots: ['Name', 'Description', 'Default Slot Content'],
  methods: ['Method', 'Description', 'Parameters']

As you may have noticed, the string in each array is the title of the rendered table. But unfortunately, you can't change their names, but you can change their order to sort the columns of the rendered table.

Instance method - render

Calling the r.render() function returns a result with RenderResult type:

interface RenderResult {
  props?: string
  slots?: string
  events?: string
  methods?: string

An example is:

  "props": "|Name|Description|Type|Required|Default|\n|---|---|---|---|---|\n|name|The name of the form, up to 8 characters|`String` / `Number`|`true`|-|\n",
  "slots": "|Name|Description|Default Slot Content|\n|---|---|---|\n|header|Form header|`<th>title</th>`|\n",
  "events": "|Event Name|Description|Parameters|\n|---|---|---|\n|onclear|Fire when the form is cleared| The argument is a boolean value representing xxx|\n",
  "methods": "|Method|Description|Parameters|\n|---|---|---|\n|clear|Used to manually clear the form|-|\n"

Instance method - renderMarkdown

Calling the r.renderMarkdown() function returns the full markdown string and component name. Essentially, that's the combination of the return values of the r.render() function:

interface MarkdownResult {
  content: string
  componentName: string