UNPKG

typedoc-plugin-markdown

Version:

A plugin for TypeDoc that enables TypeScript API documentation to be generated in Markdown.

51 lines (50 loc) 1.7 kB
import { MarkdownTheme } from '../theme/index.js'; import * as fs from 'fs'; import * as path from 'path'; import { Converter, EventHooks } from 'typedoc'; /** * Create dedicated hooks and async job collections for markdown rendering. */ export function setupRenderer(app) { // Define the markdown theme app.renderer.defineTheme('markdown', MarkdownTheme); Object.defineProperty(app.renderer, 'markdownHooks', { value: new EventHooks(), }); Object.defineProperty(app.renderer, 'preMarkdownRenderAsyncJobs', { value: [], }); Object.defineProperty(app.renderer, 'postMarkdownRenderAsyncJobs', { value: [], }); app.converter.on(Converter.EVENT_RESOLVE_END, (context) => { if (app.options.packageDir) { resolvePackages(app, context, app.options.packageDir); } }); } /** * Resolves packages meta data for the project. * * @remarks * * Currently options set for packages are only stored on the converter and are destroyed before being passed to the Renderer. * * By intercepting the package options set in the converter and storing them on the renderer we can use them later in the theme. */ function resolvePackages(app, context, packageDir) { const packageJsonContents = fs .readFileSync(path.join(packageDir, 'package.json')) .toString(); const packageJson = packageJsonContents ? JSON.parse(packageJsonContents) : {}; const renderer = app.renderer; renderer.packagesMeta = { ...(renderer.packagesMeta || {}), [context.project.name]: { description: packageJson.description, options: app.options, }, }; }