UNPKG

typedoc-plugin-markdown

Version:

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

61 lines (60 loc) 2.64 kB
import { ReflectionKind } from 'typedoc'; export function getFlattenedDeclarations(model, options) { const getFlattenedDeclarations = (current) => { return current.type?.declaration?.children?.reduce((acc, child) => { child.originalName = child.name; const childObj = { ...child, name: `${current.name}.${child.name}`, }; return parseDeclarations(childObj, acc); }, []); }; const parseDeclarations = (current, acc) => { const shouldFlatten = current.type?.declaration?.children; const isAccessor = current.kind === ReflectionKind.Accessor; if (options?.includeSignatures) { if (isAccessor) { const accessors = []; if (current.getSignature) { accessors.push({ ...current, getFullName: () => `${current.getFullName()}`, getFriendlyFullName: () => `${current.getFriendlyFullName()}`, name: `get ${current.name}`, type: current.getSignature.type, comment: current.getSignature?.comment, }); } if (current.setSignature) { accessors.push({ ...current, getFullName: () => `${current.getFullName()}`, getFriendlyFullName: () => `${current.getFriendlyFullName()}`, name: `set ${current.name}`, type: current.setSignature.type, comment: current.setSignature?.comment, }); } return [...acc, ...accessors]; } if (current.signatures?.length) { const signatures = current.signatures.map((signature) => { return { ...current, getFullName: () => `${current.getFullName()}`, getFriendlyFullName: () => `${current.getFriendlyFullName()}`, name: signature.name, type: signature.type, comment: signature.comment, }; }); return [...acc, ...signatures]; } } return shouldFlatten ? [...acc, current, ...getFlattenedDeclarations(current)] : [...acc, current]; }; return model.reduce((acc, current) => parseDeclarations(current, acc), []); }