Skip to content

Commit a00ef94

Browse files
committed
refactor(parser): exclude file writing
1 parent 180e13f commit a00ef94

File tree

2 files changed

+65
-45
lines changed

2 files changed

+65
-45
lines changed

src/index.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
1-
import chalk from 'chalk';
21
import del from 'del';
3-
import fs from 'fs/promises';
4-
import jsdoc2md from 'jsdoc-to-markdown';
5-
import mm from 'micromatch';
62
import mkdirp from 'mkdirp';
7-
import path from 'path';
83

9-
import { parseFile, parseVueFile } from './parser';
10-
import { checkExtension, getExtension, getFilename, asyncForEach } from './utils';
11-
import parseVuepressComment from './utils/comment-parser';
4+
import { parseFile, parseVueFile, writeContentToFile } from './parser';
5+
import { getExtension } from './utils';
126
import { getFileStructure } from './utils/file-structure';
13-
import vueSidebar from './utils/vue-sidebar';
147

158
const fileTree: any[] = [];
169
const statistics: Record<string, any> = {};
@@ -68,11 +61,13 @@ export const generate = async (argv: Record<string, string>) => {
6861
case '.tsx':
6962
case '.ts':
7063
case '.js':
71-
parsePromises.push(parseFile(file, srcFolder, docsFolder, argv.jsDocConfigPath, partials));
64+
parsePromises.push(
65+
writeContentToFile(parseFile(file, srcFolder, docsFolder, argv.jsDocConfigPath, partials))
66+
);
7267
break;
7368
case '.jsx':
7469
case '.vue':
75-
parsePromises.push(parseVueFile(file, srcFolder, docsFolder));
70+
parsePromises.push(writeContentToFile(parseVueFile(file, srcFolder, docsFolder)));
7671
break;
7772
}
7873
}

src/parser.ts

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,67 @@
1-
import chalk from 'chalk';
2-
import del from 'del';
31
import fs from 'fs/promises';
42
import jsdoc2md from 'jsdoc-to-markdown';
5-
import mm from 'micromatch';
63
import mkdirp from 'mkdirp';
74
import path from 'path';
85
import compileTemplates from 'vue-docgen-cli/lib/compileTemplates';
9-
import vueDocgen, { extractConfig } from 'vue-docgen-cli/lib/docgen';
6+
import { extractConfig } from 'vue-docgen-cli/lib/docgen';
107

118
import { DirectoryFile } from './interfaces';
129
import { parseVuepressFileHeader } from './utils/comment-parser';
1310

11+
interface ParseReturn {
12+
dest: string;
13+
filename: string;
14+
content: string;
15+
}
16+
1417
export const parseFile = async (
1518
file: DirectoryFile,
1619
srcFolder: string,
1720
destFolder: string,
1821
configPath: string,
1922
partials: string | string[]
20-
) => {
21-
if (!file.folder) return;
23+
): Promise<ParseReturn | null> => {
24+
if (!file.folder) return null;
2225

2326
const root = process.cwd();
2427
const folderInDest = path.join(root, destFolder, file.folder.replace(srcFolder, ''));
2528
const folderInSrc = path.join(root, file.folder);
2629

27-
try {
28-
// render file
29-
const content = await jsdoc2md.render({
30-
files: [`${path.join(folderInSrc, file.name + file.ext)}`],
31-
configure: configPath,
32-
partial: [
33-
path.resolve(__filename, '../../template/header.hbs'),
34-
path.resolve(__filename, '../../template/main.hbs'),
35-
...partials
36-
]
37-
});
38-
39-
const header = parseVuepressFileHeader(
40-
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
41-
file
42-
);
43-
44-
await mkdirp(folderInDest);
45-
await fs.writeFile(`${path.join(folderInDest, file.name)}.md`, `${header}${content}`, 'utf-8');
46-
47-
return `${header}${content}`;
48-
} catch (e) {}
30+
// render file
31+
const content = await jsdoc2md.render({
32+
files: [`${path.join(folderInSrc, file.name + file.ext)}`],
33+
configure: configPath,
34+
partial: [
35+
path.resolve(__filename, '../../template/header.hbs'),
36+
path.resolve(__filename, '../../template/main.hbs'),
37+
...partials
38+
]
39+
});
40+
41+
if (!content) {
42+
return null;
43+
}
44+
45+
let fileContent = parseVuepressFileHeader(
46+
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
47+
file
48+
);
49+
50+
fileContent += content;
51+
52+
return {
53+
dest: folderInDest,
54+
filename: file.name,
55+
content: fileContent
56+
};
4957
};
5058

51-
export const parseVueFile = async (file: DirectoryFile, srcFolder: string, destFolder: string) => {
52-
if (!file.folder) return;
59+
export const parseVueFile = async (
60+
file: DirectoryFile,
61+
srcFolder: string,
62+
destFolder: string
63+
): Promise<ParseReturn | null> => {
64+
if (!file.folder) return null;
5365

5466
const root = process.cwd();
5567
const folderInDest = path.join(root, destFolder, file.folder.replace(srcFolder, ''));
@@ -66,18 +78,31 @@ export const parseVueFile = async (file: DirectoryFile, srcFolder: string, destF
6678
file.name + file.ext
6779
);
6880

81+
await fs.unlink(`${path.join(folderInDest, file.name)}.md`);
82+
6983
if (!data.content) {
70-
return;
84+
return null;
7185
}
7286

7387
let fileContent = parseVuepressFileHeader(
7488
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
7589
file
7690
);
91+
7792
fileContent += data.content;
7893

79-
await mkdirp(folderInDest);
80-
await fs.writeFile(`${path.join(folderInDest, file.name)}.md`, fileContent, 'utf-8');
94+
return {
95+
dest: folderInDest,
96+
filename: file.name,
97+
content: fileContent
98+
};
99+
};
81100

82-
return fileContent;
101+
export const writeContentToFile = async (file: Promise<ParseReturn | null>) => {
102+
const data = await file;
103+
104+
if (data) {
105+
await mkdirp(data?.dest);
106+
await fs.writeFile(`${path.join(data.dest, data.filename)}.md`, data.content, 'utf-8');
107+
}
83108
};

0 commit comments

Comments
 (0)