import {ProjectConfiguration} from "../project/project-configuration"; import * as path from 'path'; import {Logger} from "../logging/Logger"; import {FileInfo} from "html-pdf"; import ejs = require("ejs"); import pdf = require('html-pdf'); export namespace Renderer { interface Content { header: string; content: string; footer: string; } export async function render(projectPath: string): Promise { const projectConfig: ProjectConfiguration = await ProjectConfiguration.read(projectPath); const payload = require(path.resolve(projectPath, 'data.js')); const content: Content = await renderTemplate(projectPath, projectConfig, payload); return generatePdf(content.content, path.resolve(process.cwd(), 'dist/out.pdf')); } async function renderTemplate(projectPath: string, config: ProjectConfiguration, payload: object): Promise { return { header: '', content: await renderEjs(path.resolve(projectPath, config.config.main), payload), footer: '' }; } function renderEjs(file: string, payload: object): Promise { return new Promise(resolve => { ejs.renderFile(file, payload, {}, (err: Error, html: string) => { if (err) { Logger.error('Could not render file :('); Logger.error(err.name); err.message.split('\n').forEach((line: string) => { Logger.error(line); }) err.stack.split('\n').forEach((line: string) => { Logger.error(line); }) } resolve(html); }); }); } async function generatePdf(content: string, outPath: string): Promise { return new Promise(resolve => { pdf.create(content, {}).toFile(outPath, (err: Error, res: FileInfo) => { if (err) { Logger.error('Oops! :('); Logger.error(err.name); Logger.error(err.message); } console.log(res); resolve(res.filename); }); }); } }