Skip to content

How to create one output file per class

Lloyd Brookes edited this page Nov 8, 2016 · 6 revisions

1. Say you have several documented classes in a file named example.js:

/**
 * Animal.
 */
class Animal {
  constructor () {
    /**
     * Favourite food.
     */
    this.food = null
  }
}

/**
 * Habitat.
 */
class Habitat {
  constructor () {
    /**
     * Contains wood.
     */
    this.wood = null
  }
}

2. This example script will generate one output file per documented class found in the input. See also:

'use strict'
const jsdoc2md = require('jsdoc-to-markdown')
const fs = require('fs')
const path = require('path')

/* input and output paths */
const inputFile = 'example.js'
const outputDir = __dirname

/* get template data */
const templateData = jsdoc2md.getTemplateDataSync({ files: inputFile })

/* reduce templateData to an array of class names */
const classNames = templateData.reduce((classNames, identifier) => {
  if (identifier.kind === 'class') classNames.push(identifier.name)
  return classNames
}, [])

/* create a documentation file for each class */
for (const className of classNames) {
  const template = `{{#class name="${className}"}}{{>docs}}{{/class}}`
  console.log(`rendering ${className}, template: ${template}`)
  const output = jsdoc2md.renderSync({ data: templateData, template: template })
  fs.writeFileSync(path.resolve(outputDir, `${className}.md`), output)
}

3. Two output files are created, the first Animal.md:

Animal

Animal.

Kind: global class

animal.food

Favourite food.

Kind: instance property of Animal

4. The second output file, Habitat.md:

Habitat

Habitat.

Kind: global class

habitat.wood

Contains wood.

Kind: instance property of Habitat

Clone this wiki locally