@rianbotha/react-doc-md
Version:
A markdown readme generator for React components.
31 lines (24 loc) • 1.24 kB
JavaScript
const babelParser = require('@babel/parser');
const defaultPlugins = ['jsx', 'flow', 'asyncGenerators', 'bigInt', 'classProperties', 'classPrivateProperties', 'classPrivateMethods', ['decorators', {
decoratorsBeforeExport: false
}], 'doExpressions', 'dynamicImport', 'exportDefaultFrom', 'exportNamespaceFrom', 'functionBind', 'functionSent', 'importMeta', 'logicalAssignment', 'nullishCoalescingOperator', 'numericSeparator', 'objectRestSpread', 'optionalCatchBinding', 'optionalChaining', ['pipelineOperator', {
proposal: 'minimal'
}], 'throwExpressions'];
const getExportDeclarations = (content) => {
const ast = babelParser.parse(content, {
sourceType: 'module', // parse in strict mode and allow module declarations
errorRecovery: true,
plugins: defaultPlugins,
});
let exportDeclarations = {};
let namedDeclarations = ast.program.body.filter(node => node.type === 'ExportNamedDeclaration') || [];
namedDeclarations.forEach((declaration) => {
if (declaration.specifiers) {
declaration.specifiers.forEach((specifier) => {
exportDeclarations[specifier.local.name] = specifier.exported.name;
});
}
});
return exportDeclarations;
}
module.exports = getExportDeclarations;