77 lines
2.9 KiB
JavaScript
77 lines
2.9 KiB
JavaScript
import fs from 'fs-extra';
|
|
import path from 'path';
|
|
import recursiveReaddirFiles from 'recursive-readdir-files';
|
|
import { create } from './create.mjs';
|
|
|
|
export const OUTOUT = path.resolve(process.cwd(), 'dist');
|
|
export const DOCS = path.resolve(process.cwd(), 'docs');
|
|
/** 搜索数据路径 */
|
|
export const SEARCH_DATA = path.resolve(OUTOUT, 'data.json');
|
|
export const SEARCH_DATA_CACHE = path.resolve(process.cwd(), 'node_modules/.cache/reference/data.json');
|
|
|
|
export async function createHTML(files = [], num = 0) {
|
|
const dataFile = files[num];
|
|
if (!dataFile) {
|
|
console.log(' \n done!\n');
|
|
return;
|
|
}
|
|
++num;
|
|
const githubURL = `https://github.com/jaywcjlove/reference/blob/main/${path
|
|
.relative(process.cwd(), dataFile.path)
|
|
.replace(path.sep, '/')}`;
|
|
|
|
const mdstr = await fs.readFile(dataFile.path);
|
|
const htmlPath = path.relative(DOCS, dataFile.path);
|
|
const outputHTMLPath = path
|
|
.resolve(OUTOUT, 'docs', htmlPath)
|
|
.replace(/README.md$/i, 'index.html')
|
|
.replace(/.md$/, '.html');
|
|
|
|
await fs.ensureDir(path.dirname(outputHTMLPath));
|
|
const options = {
|
|
filename: path.basename(outputHTMLPath, '.html'),
|
|
isHome: /README.md$/.test(path.relative(process.cwd(), dataFile.path)),
|
|
githubURL,
|
|
homePath: path.relative(path.dirname(outputHTMLPath), path.resolve(OUTOUT, 'index.html')),
|
|
css: [
|
|
path.relative(path.dirname(outputHTMLPath), path.resolve(OUTOUT, 'style/style.css')),
|
|
path.relative(path.dirname(outputHTMLPath), path.resolve(OUTOUT, 'style/katex.css')),
|
|
],
|
|
};
|
|
const { html, data } = create(mdstr.toString(), options);
|
|
if (!options.isHome) {
|
|
const searchData = await fs.readJSON(SEARCH_DATA_CACHE);
|
|
data.path = path.relative(OUTOUT, outputHTMLPath);
|
|
searchData[options.filename] = data;
|
|
searchData.name = options.filename;
|
|
await fs.writeJSON(SEARCH_DATA_CACHE, searchData);
|
|
const resultSearchData = Object.keys({ ...searchData })
|
|
.map((name) => searchData[name])
|
|
.filter((item) => typeof item !== 'string');
|
|
await fs.writeJSON(SEARCH_DATA, resultSearchData);
|
|
}
|
|
await fs.writeFile(outputHTMLPath, html);
|
|
console.log(`♻️ \x1b[32;1m ${path.relative(OUTOUT, outputHTMLPath)} \x1b[0m`);
|
|
createHTML(files, num);
|
|
}
|
|
|
|
export async function run() {
|
|
try {
|
|
await fs.ensureDir(OUTOUT);
|
|
await fs.emptyDir(OUTOUT);
|
|
await fs.ensureDir(path.resolve(OUTOUT, 'style'));
|
|
await fs.ensureFile(SEARCH_DATA_CACHE);
|
|
await fs.writeFile(SEARCH_DATA_CACHE, '{}');
|
|
await fs.writeFile(SEARCH_DATA, '[]');
|
|
await fs.copy(path.resolve(process.cwd(), 'scripts/style'), path.resolve(OUTOUT, 'style'));
|
|
const files = await recursiveReaddirFiles(process.cwd(), {
|
|
ignored: /\/(node_modules|\.git)/,
|
|
exclude: /(\.json|\.mjs|CONTRIBUTING\.md)$/,
|
|
filter: (item) => item.ext === 'md',
|
|
});
|
|
createHTML(files);
|
|
} catch (error) {
|
|
console.log('ERR:', error);
|
|
}
|
|
}
|