UNPKG

longdown

Version:

Convert longform markdown files to outline format used by Logseq

82 lines (72 loc) 3.18 kB
import * as squint_core from 'squint-cljs/core.js'; import * as fs from 'node:fs'; import * as path from 'node:path'; import { parseArgs } from 'node:util'; import * as str from 'squint-cljs/src/squint/string.js'; import * as lib from './lib.mjs'; var slurp = function (path) { return fs.readFileSync(path, "utf-8"); }; var spit = function (path, output) { return fs.writeFileSync(path, output); }; var cli_options = ({"help": ({"type": "boolean", "short": "h"}), "out-dir": ({"type": "string", "short": "d"}), "html": ({"type": "boolean"}), "strip-highlights": ({"type": "boolean"})}); var usage_text = str.join("\n", ["Convert longform markdown files to outline format used by Logseq", "", "Usage: longdown [options] file.md...", " longdown -", "", "When file is -, reads standard input and prints to standard output.", "", "Options:", " -d, --out-dir DIR Output directory", " --html Read HTML input instead of markdown", " --strip-highlights Strip headers and leading bold formatting", " -h, --help Show this help"]); var convert_files = function (out_dir, filenames, convert_fn) { for (let G__1 of squint_core.iterable(filenames)) { const in_path2 = G__1; const out_path3 = path.join(out_dir, in_path2); fs.mkdirSync(path.dirname(out_path3), ({"recursive": true})); spit(out_path3, convert_fn(slurp(in_path2))) } return null; }; var convert_from_stdin = function (convert_fn) { return squint_core.println(convert_fn(slurp(process.stdin.fd)).replace(/\n+$/, "")); }; var _main = (() => { const f1 = (function (var_args) { const args21 = []; const len__23360__auto__2 = arguments.length; let i33 = 0; while(true){ if ((i33 < len__23360__auto__2)) { args21.push((arguments[i33])); let G__4 = (i33 + 1); i33 = G__4; continue; };break; } ; const argseq__23545__auto__5 = (((0 < args21.length)) ? (args21.slice(0)) : (null)); return f1.cljs$core$IFn$_invoke$arity$variadic(argseq__23545__auto__5); }); f1.cljs$core$IFn$_invoke$arity$variadic = (function (_args) { const parsed6 = parseArgs(({"options": cli_options, "allowPositionals": true, "args": process.argv.slice(2)})); const opts7 = parsed6.values; const arguments$8 = parsed6.positionals; const html9 = opts7.html; const strip_highlights10 = opts7.strip_highlights; const out_dir11 = opts7["out-dir"]; const convert_fn12 = lib.make_converter(({"html": html9, "strip-highlights?": strip_highlights10})); if (squint_core.truth_((() => { const or__23522__auto__13 = opts7.help; if (squint_core.truth_(or__23522__auto__13)) { return or__23522__auto__13} else { return squint_core.empty_QMARK_(arguments$8)}; })())) { return squint_core.println(usage_text)} else { if (squint_core.truth_(((squint_core.count(arguments$8) === 1) && (squint_core.first(arguments$8) === "-")))) { return convert_from_stdin(convert_fn12)} else { if ((out_dir11 == null)) { squint_core.println("Output directory is required"); return process.exit(1); } else { if ("else") { return convert_files(out_dir11, arguments$8, convert_fn12)} else { return null}}}}; }); f1.cljs$lang$maxFixedArity = 0; return f1; })(); export { cli_options, usage_text, convert_files, convert_from_stdin, _main }