@alanizcreative/formation-docs
v0.0.2
Published
Utilities to generate docs from JSDoc comments in TypeScript or JavaScript files
Maintainers
Readme
Formation Docs
Utilities to generate Markdown or HTML documentation files from JSDoc comments in JavaScript or TypeScript files.
Installation
npm install -D @alanizcreative/formation-docsgetDocs
getDocs(args: DocsArgs): Promise<DocsResult>
Rich text objects from source code and JSDoc explain.
Parameters
argsDocsArgs required
Returns
Promise<DocsResult>
Examples
// src/button/button.ts
// src/button/buttonTypes.ts
// src/form/__tests__/form.test.ts
// src/form/form.ts
/**
* Form
*
* @file
* title: Form Components
* Output form, field and option elements.
*/
import type { FormType } from './formTypes.js'
/**
* Outputs form element.
*
* @param {FormType} type
* @return {string}
*/
const Form = (type: FormType): string => {
// ...
}
// src/form/formTypes.ts:
/**
* @typedef {'a'|'b'|'c'} FormType
*/
export type FormType = 'a' | 'b' | 'c'
// =========================================================================
import { getDocs } from '@alanizcreative/formation-docs/docs.js'
const result = await getDocs({
include: 'src/**\/*.ts',
exclude: 'src/**\/*.test.ts',
docsInclude: 'src/form/**\/*.ts',
docsExclude: 'src/**\/*Types.ts'
})
result = {
'src/form': {
content: [
{ tag: 'h1', content: 'Form Components' },
{ tag: 'p', content: 'Output form, field and option elements.' },
{ tag: 'h2', content: 'Form' },
{ tag: 'p', content: [{
tag: 'strong', content: [{
tag: 'code', content: [{
content: 'Form(type: FormType): string'
}]
}]}
]},
{ tag: 'p', content: 'Outputs form element.' },
{ tag: 'h2', content: 'Parameters' },
{ tag: 'dl', content: [{
tag: 'div', content: [{
tag: 'dt', content: [
{ tag: 'strong', content: [{ tag: 'code', content: 'type' }]},
{ content: ' ' },
{ tag: 'code', content: [{
content: [{ tag: 'a', content: 'FormType', link: '#formtype' }]
}]},
{ content: ' ' },
{ content: 'required' }
]
},
{ tag: 'dd', content: [] }
]}]},
{ tag: 'h2', content: 'Returns' },
{ tag: 'p', content: [{
tag: 'code', content: [{ content: 'string' }]
}]},
{ tag: 'h2', content: 'Types' },
{ tag: 'h3', content: 'FormType' },
{ tag: 'p', content: [
{ tag: 'strong', content: 'Type:' },
{ content: ' ' },
{ tag: 'code', content: [{
content: [{ content: ''a' | 'b' | 'c'' }]
}]}
]}
]
}
}renderMarkdownDocs
renderMarkdownDocs(args: DocsArgs): Promise<void>
Output normalized JSDoc data as Markdown files.
Parameters
argsDocsArgs required
Returns
Promise<void>
Examples
import { renderMarkdownDocs } from '@alanizcreative/formation-docs/docs.js'
await renderMarkdownDocs({
include: 'src/**\/*.ts',
exclude: [
'src/**\/*.test.ts',
'src/**\/*Mock.ts'
],
docsInclude: 'src/form/**\/*.ts',
docsExclude: 'src/**\/*Types.ts'
})
// src/button/button.ts
// src/button/buttonTypes.ts
// src/form/__tests__/form.test.ts
// src/form/form.ts
// src/form/README.md
// src/form/formMock.ts
// src/form/formTypes.tsrenderHtmlDocs
renderHtmlDocs(args: DocsHtmlArgs): Promise<void>
Output normalized JSDoc data as HTML files.
Parameters
argsDocsHtmlArgs required
Returns
Promise<void>
Examples
import { renderHtmlDocs } from '@alanizcreative/formation-docs/docs.js'
await renderHtmlDocs({
outDir: 'docs',
include: 'src/**\/*.ts',
exclude: 'src/**\/*.test.ts',
docsExclude: 'src/**\/*Types.ts',
url: 'https://docs.formation.org'
})
// src/button/button.ts
// src/button/buttonTypes.ts
// src/form/__tests__/form.test.ts
// src/form/form.ts
// src/form/formTypes.ts
// docs/button/index.html
// docs/form/index.htmlTypes
DocsFilterTitle
Type: function
Parameters
titlestring requireddirstring required
DocsArgs
Type: object
Properties
includestring | string[] required
Glob pattern of files to include in types.excludestring | string[] optional
Glob pattern of files to exclude from types.docsIncludestring | string[] optional
Glob pattern of files to include in result.docsExcludestring | string[] optional
Glob pattern of files to exclude from result.docsTypesstring | string[] optional
Glob pattern of type definition files.srcDirstring optional
Source directory of input files.
Default:srcoutDirstring optional
Directory to write documentation files to.urlstring optional
Repository URL for Markdown docs or site URL for HTML docs.indexstring optional
Comments representing index documentation page.filterTitleDocsFilterTitle optional
Customize title for multi file directories.
DocsContent
Type: object
Properties
contentstring | DocsContent[] required
Plain text or nested HTML content.tagstring optional
HTML element tag.linkstring optional
Anchor link to type definition.
DocsResult
Type: Object<string, DocsContent>
DocsFilterAttr
Type: function
Parameters
attrObject<string, string> required
Element attributes as key-value pairs.dataDocsContent required
Element tag and content.outerTagstring required
Parent element tag.
Returns
Object<string, string>
DocsNavigationItem
Type: object
Properties
idstring requiredtitlestring requiredlinkstring requiredchildrenDocsNavigationItem[] optional
DocsHeading
Type: object
Properties
idstring requiredtagstring requiredtitlestring requiredchildrenDocsHeading[] optional
DocsFilterOutput
Type: function
Parameters
outputstring required
HTML output.idstring required
Kebab case of file path.titlestring required
File title.slugstring required
File path as link.navigationDocsNavigationItem[] required
Objects matching directory stucture in alphabetical order.headingsDocsHeading[] required
File headings as nested object stucture.cssstring optional
CSS output by Shiki.
Returns
string
DocsHtmlArgs
Type: object
Augments: DocsArgs
Properties
outDirstring optional
Directory to write documentation files to.
Default:docsthemesObject<string, string> optional
Themes to pass to Shiki for syntax highlighting.classPrefixstring optional
Prefix classes output by Shiki Transformer.filterAttrDocsFilterAttr optional
Customize HTML element attributes.filterOutputDocsFilterOutput optional
Customize HTML output.
