@argdown/cli
Version:
A command line interface for exporting Argdown files to html, dot or json.
73 lines (67 loc) • 2.3 kB
text/typescript
import { argdown, IAsyncArgdownPlugin } from "@argdown/node";
import { Arguments } from "yargs";
import { IGeneralCliOptions } from "../IGeneralCliOptions";
import MarkdownIt from "markdown-it";
import createArgdownPlugin from "@argdown/markdown-it-plugin";
import { runArgdown } from "./runArgdown";
/**
* This command uses the AsynArgdownApplication to load and export markdown files and save the exported html as html files.
* It add a custom plugin that simply takes the markdown input and renders it with markdown-it
* Markdown-it is configured to use the @argdown/markdown-it-plugin.
*/
const mdi = new MarkdownIt();
const markdownItPlugin = createArgdownPlugin((env: any) => {
return env.argdownConfig;
});
mdi.use(markdownItPlugin);
const markdownPlugin: IAsyncArgdownPlugin = {
name: "RenderMarkdownPlugin",
runAsync: async (request, response) => {
response.html = mdi.render(request.input || "", {
argdownConfig: request
});
}
};
argdown.addPlugin(markdownPlugin, "render-markdown");
export const command = "markdown [inputGlob] [outputDir]";
export const desc =
"export Markdown file to html while exporting all Argdown code fences as web components";
export const builder = {};
export interface IMarkdownCliOptions {
inputGlob?: string;
outputDir?: string;
}
export const handler = async function(
args: Arguments<IGeneralCliOptions & IMarkdownCliOptions>
) {
let config = await argdown.loadConfig(args.config);
if (args.inputGlob) {
config.inputPath = args.inputGlob;
}
config.saveAs = config.saveAs || {};
if (args.outputDir) {
config.saveAs.outputDir = args.outputDir;
}
config.logLevel = args.verbose ? "verbose" : config.logLevel;
config.logLevel = args.silent ? "silent" : config.logLevel;
config.watch = args.watch || config.watch;
config.process = ["load-file", "render-markdown"];
config.logParserErrors = args.logParserErrors || config.logParserErrors;
if (config.logParserErrors) {
config.process.push("log-parser-errors");
}
if (!args.stdout || args.outputDir) {
config.process.push("save-as-html");
}
if (args.stdout) {
config.process.push("stdout-html");
}
await runArgdown(
argdown,
config,
true,
"Markdown export canceled",
"exported",
`to html`
);
};