svem
Version:
Svelte in Markdown preprocessor
29 lines (28 loc) • 964 B
JavaScript
import { visit } from "unist-util-visit";
import { dirname, resolve } from "path";
import { existsSync, readFileSync } from "node:fs";
const remarkCodeImport = (options) => {
return (tree, file) => {
visit(tree, "code", (node) => {
if (typeof node.attributes?.file === "string") {
const baseDir = dirname(options?.cwd ?? file.path);
const filePath = resolve(baseDir, node.attributes.file);
if (existsSync(filePath)) {
if (options?.fileAsTitle && !node.attributes.title) {
node.attributes.title = node.attributes.file;
}
node.value = readFileSync(filePath, "utf-8").trim();
if (options?.transform) {
node.value = options.transform(node.value);
}
delete node.attributes.file;
} else {
console.warn(`\u26A0\uFE0F [CODE-IMPORT-ERROR] File not found: ${filePath}`);
}
}
});
};
};
export {
remarkCodeImport
};