markdown-to-html-cli
Version:
Command line tool generates markdown as html.
129 lines (126 loc) • 6.44 kB
JavaScript
import fs from 'fs-extra';
import path from 'path';
import minimist from 'minimist';
import { globSync } from "glob";
import { create } from './create.js';
import { formatConfig } from './utils.js';
export * from './create.js';
export * from './utils.js';
export function run(opts = {}) {
const argvs = minimist(process.argv.slice(2), {
alias: {
help: 'h',
version: 'v',
config: 'c',
source: 's',
output: 'o',
},
default: {
version: opts.v || opts.version || false,
help: opts.h || opts.help || false,
ignoreFile: opts.ignoreFile || '(node_modules)',
'img-base64': opts.imgBase64 ?? false,
source: opts.s || opts.source || 'README.md',
markdown: opts.markdown || '',
'markdown-style': 'max-width: 960px;',
description: opts.description || '',
corners: opts.corners || true,
output: opts.o || opts.output,
},
});
if (argvs.h || argvs.help) {
console.log(`${cliHelp}${exampleHelp}`);
return;
}
const mdFilesPath = globSync([...argvs._], {
ignore: {
ignored: p => {
return (new RegExp(argvs.ignoreFile, 'i')).test(p.fullpath()) || !/\.md$/i.test(p.fullpath());
},
},
});
const pkgPath = path.resolve(new URL('../package.json', import.meta.url).pathname);
if ((argvs.v || argvs.version) && fs.existsSync(pkgPath)) {
const pkg = fs.readJSONSync(pkgPath);
console.log(`\n \x1b[35mmarkdown-to-html-cli\x1b[0m v${pkg.version}\n`);
return pkg.version;
}
// One File
if (argvs.source && !argvs.markdown) {
argvs.markdown = fs.readFileSync(path.resolve(argvs.source)).toString();
}
const options = formatConfig({ ...opts, ...argvs });
const output = path.resolve(argvs.output || 'index.html');
if (!Array.isArray(options.document.style))
options.document.style = [options.document.style].flat().filter(Boolean);
if (options.style) {
const stylePath = path.resolve(process.cwd(), options.style);
if (fs.existsSync(stylePath)) {
const cssString = fs.readFileSync(stylePath).toString();
options.document.style.push(cssString);
}
else {
options.document.style.push(options.style);
}
}
// One File
if (mdFilesPath.length === 0) {
options.sourcePath = path.resolve(argvs.source);
const strMarkdown = create({ ...argvs, ...options });
fs.writeFileSync(output, strMarkdown);
console.log(`\nmarkdown-to-html: \x1b[32;1m${path.relative(process.cwd(), output)}\x1b[0m\n`);
}
if (mdFilesPath.length > 0) {
mdFilesPath.forEach((mdFile) => {
options.sourcePath = path.resolve(mdFile);
options.markdown = fs.readFileSync(path.resolve(mdFile)).toString();
const htmlPath = path.resolve(mdFile.replace(/\.md$/i, '.html').replace(/README\.html$/i, 'index.html').replace(/README-(.*)\.html$/i, 'index-$1.html'));
const mdFilePath = path.resolve(process.cwd(), (argvs.output || 'dist') + htmlPath.replace(process.cwd(), ''));
options.output = mdFilePath;
const strMarkdown = create({ ...argvs, ...options });
fs.ensureDirSync(path.dirname(options.output));
fs.writeFileSync(options.output, strMarkdown);
console.log(`\nmarkdown-to-html: \x1b[32;1m${path.relative(process.cwd(), options.output)}\x1b[0m\n`);
});
}
}
export const cliHelp = `\n Usage: markdown-to-html [options] [--help|h]
Options:\n
--author Define the author of a page.
--config, -o Specify the configuration file. Default: "<process.cwd()>/package.json".
--description Define a description of your web page.
--favicon Add a Favicon to your Site.
--no-corners Hide Github corner from your project page.
--github-corners Add a Github corner to your project page.
--github-corners-fork Github corners style.
--keywords Define keywords for search engines.
--no-dark-mode Disable light and dark theme styles button.
--markdown Markdown string.
--img-base64 Convert images in HTML to base64.
--style Override default styles. css file path or css string.
--markdown-style-theme Setting markdown-style light/dark theme.
--markdown-style Markdown wrapper style.
--output, -o Output static pages to the specified directory. Default: "index.html"
--source, -s The path of the target file "README.md". Default: "README.md"
--title The \`<title>\` tag is required in HTML documents!
--ignore-file Ignore markdown files under certain paths. Default: "(node_modules)"
--version, -v Show version number
--help, -h Displays help information.
`;
export const exampleHelp = `\n Example:
\x1b[35mnpx\x1b[0m markdown-to-html-cli
\x1b[35mnpx\x1b[0m markdown-to-html-cli **/*.md \x1b[33m--output\x1b[0m "dist"
\x1b[35mnpx\x1b[0m markdown-to-html-cli **/*.md \x1b[33m--ignore-file\x1b[0m="(test)"
\x1b[35mmarkdown-to-html\x1b[0m \x1b[33m--title\x1b[0m="Hello World!"
\x1b[35mmarkdown-to-html\x1b[0m \x1b[33m--config\x1b[0m="config/conf.json"
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--markdown\x1b[0m="Hello World!"
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--no-dark-mode\x1b[0m
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--markdown-style-theme\x1b[0m dark
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--github-corners\x1b[0m https://github.com/jaywcjlove/markdown-to-html-cli
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--github-corners\x1b[0m https://github.com/jaywcjlove --github-corners-fork
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--output\x1b[0m coverage/index.html
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--source\x1b[0m README.md
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--source\x1b[0m README.md --style=./style.css
\x1b[35mnpx\x1b[0m markdown-to-html-cli \x1b[33m--source\x1b[0m README.md --style='body { color: red; }'
`;
//# sourceMappingURL=index.js.map