67 lines
1.6 KiB
JavaScript
67 lines
1.6 KiB
JavaScript
|
|
|
|
function generateTitle (name) {
|
|
return `## ${name} \`<${name}/>\``;
|
|
}
|
|
|
|
function generateDesciption (description) {
|
|
return description + '\n';
|
|
}
|
|
|
|
function generatePropType (type) {
|
|
let values;
|
|
if (Array.isArray(type.value)) {
|
|
values = '(`' +
|
|
type.value.map(function (typeValue) {
|
|
return typeValue.name || typeValue.value;
|
|
}).join('`,`') +
|
|
'`)';
|
|
} else {
|
|
values = type.value;
|
|
}
|
|
|
|
return `\`${type.name}\`${(values ? values : '')}`;
|
|
}
|
|
|
|
function generateProp (propName, prop) {
|
|
if (!prop.description) {
|
|
if (propName === 'className') {
|
|
prop.description = 'Additional class(es) for custom styling.';
|
|
} else if (propName === 'children') {
|
|
prop.description = 'Children to pass through the component.';
|
|
}
|
|
}
|
|
|
|
return (
|
|
`| \`${propName}\` ${prop.required ? '(required)' : ''}` +
|
|
`| ${(prop.type ? generatePropType(prop.type) : '')} ` +
|
|
`| ${(prop.defaultValue ? `\`${prop.defaultValue}\`` : '')} ` +
|
|
`| ${(prop.description ? prop.description : '')} ` +
|
|
'|'
|
|
);
|
|
}
|
|
|
|
function generateProps (props) {
|
|
const title = '### Properties';
|
|
|
|
return (
|
|
`${title}\n` +
|
|
'| Name | Type | Default | Description |\n' +
|
|
'|:-----|:-----|:-----|:-----|\n' +
|
|
Object.keys(props).sort().map(propName => {
|
|
return generateProp(propName, props[propName]);
|
|
}).join('\n')
|
|
);
|
|
}
|
|
|
|
function generateMarkdown (name, reactAPI) {
|
|
const markdownString =
|
|
generateTitle(name) + '\n' +
|
|
(reactAPI.description ? generateDesciption(reactAPI.description) + '\n' : '\n') +
|
|
generateProps(reactAPI.props);
|
|
|
|
return markdownString;
|
|
}
|
|
|
|
module.exports = generateMarkdown;
|