|
- #!/usr/bin/env node
-
- const { promises } = require('fs')
- const path = require('path')
- const childProcess = require('child_process')
- const docgen = require('react-docgen-typescript')
-
- const main = async () => {
- const configFilePath = path.resolve(process.cwd(), 'docs.config.json')
- const docsConfigBuffer = await promises.readFile(configFilePath)
- const docsConfigString = docsConfigBuffer.toString('utf-8')
- const docsConfig = JSON.parse(docsConfigString)
-
- try {
- //await promises.mkdir('.docs')
- //await childProcess.exec('npx create-next-app dummy-docs --ts')
- //await promises.rmdir('.docs')
- //await promises.rename('dummy-docs', '.docs')
- } catch {
-
- }
-
- const getSources = (nav) => nav.reduce(
- (sourcesToParse, navItem) => {
- if (navItem?.source?.endsWith('.tsx')) {
- return [
- ...sourcesToParse,
- navItem,
- ...(Array.isArray(navItem?.children) ? getSources(navItem.children) : []),
- ]
- }
-
- return [
- ...sourcesToParse,
- ...(Array.isArray(navItem?.children) ? getSources(navItem.children) : []),
- ]
- },
- []
- )
-
- const sources = getSources(docsConfig.nav)
- const docgenInfo = docgen.parse(
- sources.map(s => path.resolve(process.cwd(), s.source)),
- {
- shouldExtractLiteralValuesFromEnum: true,
- shouldRemoveUndefinedFromOptional: true,
- propFilter: (prop) => {
- if (prop.declarations !== undefined && prop.declarations.length > 0) {
- const hasPropAdditionalDescription = prop.declarations.find((declaration) => {
- return !declaration.fileName.includes("node_modules");
- });
-
- return Boolean(hasPropAdditionalDescription);
- }
-
- return true;
- },
- }
- )
- const sourcesWithDocgenInfo = sources.map((s, i) => ({
- ...s,
- docgen: docgenInfo[i],
- }))
-
- console.log(JSON.stringify(sourcesWithDocgenInfo, null, 2))
- }
-
- void main()
|