Skip to content

Commit

Permalink
refactor(parser): exclude file writing
Browse files Browse the repository at this point in the history
  • Loading branch information
ph1p committed Sep 1, 2021
1 parent 180e13f commit a00ef94
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 45 deletions.
17 changes: 6 additions & 11 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
import chalk from 'chalk';
import del from 'del';
import fs from 'fs/promises';
import jsdoc2md from 'jsdoc-to-markdown';
import mm from 'micromatch';
import mkdirp from 'mkdirp';
import path from 'path';

import { parseFile, parseVueFile } from './parser';
import { checkExtension, getExtension, getFilename, asyncForEach } from './utils';
import parseVuepressComment from './utils/comment-parser';
import { parseFile, parseVueFile, writeContentToFile } from './parser';
import { getExtension } from './utils';
import { getFileStructure } from './utils/file-structure';
import vueSidebar from './utils/vue-sidebar';

const fileTree: any[] = [];
const statistics: Record<string, any> = {};
Expand Down Expand Up @@ -68,11 +61,13 @@ export const generate = async (argv: Record<string, string>) => {
case '.tsx':
case '.ts':
case '.js':
parsePromises.push(parseFile(file, srcFolder, docsFolder, argv.jsDocConfigPath, partials));
parsePromises.push(
writeContentToFile(parseFile(file, srcFolder, docsFolder, argv.jsDocConfigPath, partials))
);
break;
case '.jsx':
case '.vue':
parsePromises.push(parseVueFile(file, srcFolder, docsFolder));
parsePromises.push(writeContentToFile(parseVueFile(file, srcFolder, docsFolder)));
break;
}
}
Expand Down
93 changes: 59 additions & 34 deletions src/parser.ts
Original file line number Diff line number Diff line change
@@ -1,55 +1,67 @@
import chalk from 'chalk';
import del from 'del';
import fs from 'fs/promises';
import jsdoc2md from 'jsdoc-to-markdown';
import mm from 'micromatch';
import mkdirp from 'mkdirp';
import path from 'path';
import compileTemplates from 'vue-docgen-cli/lib/compileTemplates';
import vueDocgen, { extractConfig } from 'vue-docgen-cli/lib/docgen';
import { extractConfig } from 'vue-docgen-cli/lib/docgen';

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

interface ParseReturn {
dest: string;
filename: string;
content: string;
}

export const parseFile = async (
file: DirectoryFile,
srcFolder: string,
destFolder: string,
configPath: string,
partials: string | string[]
) => {
if (!file.folder) return;
): Promise<ParseReturn | null> => {
if (!file.folder) return null;

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

try {
// render file
const content = await jsdoc2md.render({
files: [`${path.join(folderInSrc, file.name + file.ext)}`],
configure: configPath,
partial: [
path.resolve(__filename, '../../template/header.hbs'),
path.resolve(__filename, '../../template/main.hbs'),
...partials
]
});

const header = parseVuepressFileHeader(
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
file
);

await mkdirp(folderInDest);
await fs.writeFile(`${path.join(folderInDest, file.name)}.md`, `${header}${content}`, 'utf-8');

return `${header}${content}`;
} catch (e) {}
// render file
const content = await jsdoc2md.render({
files: [`${path.join(folderInSrc, file.name + file.ext)}`],
configure: configPath,
partial: [
path.resolve(__filename, '../../template/header.hbs'),
path.resolve(__filename, '../../template/main.hbs'),
...partials
]
});

if (!content) {
return null;
}

let fileContent = parseVuepressFileHeader(
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
file
);

fileContent += content;

return {
dest: folderInDest,
filename: file.name,
content: fileContent
};
};

export const parseVueFile = async (file: DirectoryFile, srcFolder: string, destFolder: string) => {
if (!file.folder) return;
export const parseVueFile = async (
file: DirectoryFile,
srcFolder: string,
destFolder: string
): Promise<ParseReturn | null> => {
if (!file.folder) return null;

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

await fs.unlink(`${path.join(folderInDest, file.name)}.md`);

if (!data.content) {
return;
return null;
}

let fileContent = parseVuepressFileHeader(
await fs.readFile(`${path.join(folderInSrc, file.name + file.ext)}`, 'utf-8'),
file
);

fileContent += data.content;

await mkdirp(folderInDest);
await fs.writeFile(`${path.join(folderInDest, file.name)}.md`, fileContent, 'utf-8');
return {
dest: folderInDest,
filename: file.name,
content: fileContent
};
};

return fileContent;
export const writeContentToFile = async (file: Promise<ParseReturn | null>) => {
const data = await file;

if (data) {
await mkdirp(data?.dest);
await fs.writeFile(`${path.join(data.dest, data.filename)}.md`, data.content, 'utf-8');
}
};

0 comments on commit a00ef94

Please sign in to comment.