vue-docgen-cli
Version:
Generate documentation markdown files from VueJs components using the vue-docgen-api.
138 lines (137 loc) • 5.32 kB
TypeScript
import { DocGenOptions, PropDescriptor, SlotDescriptor, MethodDescriptor, EventDescriptor, ExposeDescriptor, ComponentDoc, parseMulti } from 'vue-docgen-api';
import type { LogLevelDesc } from 'loglevel';
import { ContentAndDependencies, SubTemplateOptions } from './compileTemplates';
export { ContentAndDependencies, SubTemplateOptions };
type AddParameters<TFunction extends (...args: any) => any, TParameters extends [...args: any]> = (...args: [...Parameters<TFunction>, ...TParameters]) => ReturnType<TFunction>;
export type FileEventType = 'add' | 'change' | 'delete' | 'init';
export type PropsParser = AddParameters<typeof parseMulti, [event?: FileEventType]>;
export interface SafeDocgenCLIConfig {
/**
* Should we add default examples
* @default true
*/
defaultExamples?: boolean;
/**
* Directory where the files will be built
* @default docs
*/
outDir: string;
/**
* File name where the current section is going to be output
*/
outFile?: string;
/**
* A glob to tell docgen where to document components
* @uitype string
* @description In the file you can have multiple here
*/
components?: string | string[];
/**
* components to exclude from the generated documentation
* @uitype string
*/
ignore?: string | string[];
/**
* The root folder where components and subcomponents are going to be found
* @description The scaffolding of whatever is below this path will be kept in the `outDir`
*/
componentsRoot: string;
/**
* Allows you to pass [vue-docgen-api](https://vue-styleguidist.github.io/docs/Docgen.html) some config.
* Most notably, you can specify wether your components contain JSX code and the alias configured in your webpack.
*/
apiOptions?: DocGenOptions;
/**
* By default it will find the `Readme.md` sibling to the component files.
* Use this to point docgen to the files that contain documentation specific to a component.
* @param componentPath the path of the parsed components this doc is attached to
*/
getDocFileName(componentPath: string): string | string[] | false;
/**
* Function returning the absolute path of the documentation markdown files. If [outFile](#outfile) is used, this config will be ignored.
* @param file original file
* @param config config file
*/
getDestFile(file: string, config: SafeDocgenCLIConfig): string;
/**
* Should vue-docgen keep on watching your files for changes once generation is done?
*/
watch: boolean;
/**
* A set of function used to render the documentation
*/
templates: Templates;
/**
* if you want to force the current working directory to another absolute path
*/
cwd: string;
/**
* if you want to force the current working directory to another absolute path
*/
pages?: SafeDocgenCLIConfig[];
/**
* for edit links
*/
docsRepo?: string;
/**
* for edit links
*/
docsBranch?: string;
/**
* for edit links
*/
docsFolder?: string;
/**
* Determines the urls behind each edit on github link
*/
getRepoEditUrl?: (relativePath: string) => string;
/**
* Label to give to the edit button at the bottom of each page
*/
editLinkLabel: string;
/**
* Parser used to extract props, slots and events from each component
*/
propsParser: PropsParser;
/**
* In a single md setup, this function will be called to determine the order of the components on the page
*/
sortComponents(a: {
filePath: string;
docs: ComponentDoc[];
}, b: {
filePath: string;
docs: ComponentDoc[];
}): 0 | 1 | -1;
/**
* Show the verbose output
*/
verbose: boolean;
/**
* The level of verbosity the logger should use
*/
logLevel: LogLevelDesc;
}
export interface DocgenCLIConfig extends Omit<SafeDocgenCLIConfig, 'templates' | 'pages'> {
templates: Partial<Templates>;
pages?: Partial<DocgenCLIConfig>[];
}
export interface Templates {
header(docs: ComponentDoc[], config: SafeDocgenCLIConfig, hasSubComponent: boolean, componentRelativePath: string): string | Promise<string>;
props(props: PropDescriptor[], opt?: SubTemplateOptions, doc?: ComponentDoc): string | Promise<string>;
slots(slots: SlotDescriptor[], opt?: SubTemplateOptions, doc?: ComponentDoc): string | Promise<string>;
methods(methods: MethodDescriptor[], opt?: SubTemplateOptions, doc?: ComponentDoc): string | Promise<string>;
events(events: EventDescriptor[], opt?: SubTemplateOptions, doc?: ComponentDoc): string | Promise<string>;
expose(exposed: ExposeDescriptor[], opt?: SubTemplateOptions, doc?: ComponentDoc): string | Promise<string>;
component(usage: RenderedUsage, doc: ComponentDoc, config: SafeDocgenCLIConfig, componentRelativePath: string, requiresMd: ContentAndDependencies[], opt: SubTemplateOptions): string | Promise<string>;
defaultExample(doc: ComponentDoc): string | Promise<string>;
functionalTag: string;
}
export interface RenderedUsage {
props: string;
slots: string;
methods: string;
events: string;
expose: string;
functionalTag: string;
}