longdown
Version:
Convert longform markdown files to outline format used by Logseq
82 lines (72 loc) • 3.18 kB
JavaScript
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 }