mxdocgen
Version:
A small tool that mimics the documentation generation capabilities offered in Mendix Studio Pro, but with greater flexibility. It uses the Mendix Model SDK to extract information from a Mendix model, which is then fed into a set of templates to generate
39 lines (31 loc) • 1.24 kB
text/typescript
import path from "path";
import * as fs from "fs";
import pkgDir from "pkg-dir";
import Mustache from "mustache";
export interface TemplateConfig {
directory: string;
extension: string;
mainTemplate: string;
}
export interface TemplateData {
[property: string]: string | number | boolean | undefined | TemplateData | Array<TemplateData>;
}
export const defaultTemplateConfig: TemplateConfig = {
directory: path.join(pkgDir.sync(__dirname)!, "templates"),
extension: ".html",
mainTemplate: "Main"
};
export const render = (config: TemplateConfig, templateData: TemplateData): string => {
const templates = loadTemplates(config.directory, config.extension, config.mainTemplate);
return Mustache.render(templates.main, templateData, templates.partials);
};
const loadTemplates = (directory: string, extension: string, main: string) => ({
main: loadTemplate(directory, extension, main),
partials: (partialName: string) => loadTemplate(directory, extension, partialName)
});
const loadTemplate = (directory: string, extension: string, name: string): string => {
const cleanExtension = extension.match(/^[.\\/]*(.*)$/)![1];
return fs.readFileSync(path.join(directory, `${name}.${cleanExtension}`), {
encoding: "utf8"
});
};