UNPKG

@thi.ng/transclude

Version:

Extensible functional template engine for text document generation, incl. various high-level Markdown features

32 lines (31 loc) 1.11 kB
import { illegalArgs } from "@thi.ng/errors/illegal-arguments"; import { readText } from "@thi.ng/file-io/text"; import { basename, resolve } from "node:path"; const includeFile = ({ logger }, args, currPath) => readText(resolve(resolve(currPath, ".."), args[2].trim()), logger); const preincludeFile = ({ logger }, [src], initialPath) => { const pattern = /<!-- include (.+) -->/g; const fileCache = {}; const replaceImport = (includePath, currPath, route) => { includePath = resolve(resolve(currPath, ".."), includePath.trim()); if (fileCache[includePath]) return fileCache[includePath]; if (route.includes(includePath)) illegalArgs( `include cycle detected: ${basename(currPath)} -> ${basename( includePath )}` ); src = readText(includePath, logger).replace( pattern, (_, path) => replaceImport(path, includePath, [...route, path]) ); return fileCache[includePath] = src; }; return src.replace( pattern, (_, path) => replaceImport(path, initialPath, [initialPath]) ); }; export { includeFile, preincludeFile };