longform-markdown-splitter
Version:
Splits and transforms markdown files from obsidian for usage in hugo.
107 lines (106 loc) • 5.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MD_Exporter = exports.MD_EXPORTER_COMMANDS = void 0;
var fs = require("fs");
var md_filesystem_1 = require("./md-filesystem");
var md_transformer_factory_1 = require("./md-transformer-factory");
var MD_EXPORTER_COMMANDS;
(function (MD_EXPORTER_COMMANDS) {
MD_EXPORTER_COMMANDS["DO_NOT_WRITE_FILES"] = "do-not-write-file";
})(MD_EXPORTER_COMMANDS || (exports.MD_EXPORTER_COMMANDS = MD_EXPORTER_COMMANDS = {}));
var MD_Exporter = (function () {
function MD_Exporter() {
this.transformers = [];
this.do_not_write_file = false;
}
MD_Exporter.prototype.addTransformer = function (t) {
this.transformers.push(t);
};
MD_Exporter.prototype.do_command = function (from, to, command) {
if (command === MD_EXPORTER_COMMANDS.DO_NOT_WRITE_FILES) {
this.do_not_write_file = true;
}
};
MD_Exporter.prototype.perform_job = function (job_parameter) {
var _this = this;
if (md_filesystem_1.MD_Filesystem.isFolder(job_parameter.readPath)) {
var file_list = md_filesystem_1.MD_Filesystem.get_files_list(job_parameter.readPath);
console.log(file_list);
file_list.forEach(function (file) {
_this.transform_and_write(file, job_parameter, md_filesystem_1.MD_Filesystem.read_file(file));
});
}
else if (md_filesystem_1.MD_Filesystem.isFile(job_parameter.readPath)) {
this.transform_and_write(job_parameter.readPath, job_parameter, md_filesystem_1.MD_Filesystem.read_file(job_parameter.readPath));
}
else {
console.log("not supported: '".concat(job_parameter.readPath, "'"));
}
};
MD_Exporter.prototype.transform_and_write = function (source_file, job_parameter, md_content) {
var mdfc = md_filesystem_1.MD_Filesystem.split_frontmatter_body(md_content);
for (var _i = 0, _a = this.transformers; _i < _a.length; _i++) {
var transformer = _a[_i];
transformer.set_job_parameter(job_parameter);
transformer.addObserver(this);
for (var i = 0; i < mdfc.body_array.length; i++) {
mdfc.index = i;
var test = transformer.transform(mdfc, i);
if (test.index != i)
i = test.index;
}
}
var filename = md_filesystem_1.MD_Filesystem.get_filename_from(source_file);
var path_target_filename = md_filesystem_1.MD_Filesystem.concat_path_filename(job_parameter.writePath, filename);
md_filesystem_1.MD_Filesystem.ensure_path(job_parameter.writePath, job_parameter.simulate);
if (!job_parameter.simulate) {
if (!this.do_not_write_file) {
if (md_filesystem_1.MD_Filesystem.is_file_exist(path_target_filename)) {
if (md_filesystem_1.MD_Filesystem.is_file_modified(source_file, path_target_filename)) {
console.log("file does exist, and is modified (compared by modified-date): Write it.");
md_filesystem_1.MD_Filesystem.write_file(path_target_filename, md_filesystem_1.MD_Filesystem.merge_frontmatter_body(mdfc));
}
else {
console.log("file does exist, but is not modified: Skip writing.");
}
}
else {
console.log("file does not exist: Write it.");
md_filesystem_1.MD_Filesystem.write_file(path_target_filename, md_filesystem_1.MD_Filesystem.merge_frontmatter_body(mdfc));
}
}
}
else {
console.log("###########################");
console.log(source_file);
console.log(path_target_filename);
console.log("modified: ".concat(md_filesystem_1.MD_Filesystem.is_file_modified(source_file, path_target_filename)));
console.log("###########################");
}
};
MD_Exporter.prototype.perform_job_from = function (config_file, job_name) {
var _this = this;
var jsonData = JSON.parse(fs.readFileSync(config_file, "utf8"));
var the_job = null;
jsonData.job_list.forEach(function (job) {
if (job.job_name === job_name) {
the_job = job;
}
});
if (the_job != null) {
console.log("prepare job '".concat(the_job.job_name, "'"));
var job_parameter = the_job.job_parameter;
var job_tasks = the_job.job_tasks;
job_tasks.forEach(function (job_task) {
var transformer = new md_transformer_factory_1.MD_Transformer_Factory(job_task.transformer_class_name, job_task.transformer_parameter);
_this.addTransformer(transformer);
});
this.perform_job(job_parameter);
}
else {
console.log("job '".concat(the_job.job_name, "' not found in '").concat(config_file, "'"));
}
};
return MD_Exporter;
}());
exports.MD_Exporter = MD_Exporter;