66 lines
1.6 KiB
JavaScript
66 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;
|