Skip to content

How to create one output file per class

Lloyd Brookes edited this page Sep 1, 2024 · 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:

import jsdoc2md from 'jsdoc-to-markdown'
import { promises as fs } from 'node:fs'
import path from 'path'

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

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

/* reduce templateData to an array of class names */
const classNames = templateData.filter(i => i.kind === 'class').map(i => i.name)

/* 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 = await jsdoc2md.render({ data: templateData, template: template })
  await fs.writeFile(path.resolve(`${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