"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const promise_1 = __importDefault(require("../utils/promise")); const timing_1 = __importDefault(require("../utils/timing")); const templateOutput_1 = __importDefault(require("../models/templateOutput")); const replaceShortcuts_1 = __importDefault(require("./replaceShortcuts")); /** * Render a template * * @param {TemplateEngine} engine * @param {string} filePath: absolute path for the loader * @param {string} content * @param {Object} context (optional) * @return {Promise<TemplateOutput>} */ function renderTemplate(engine, filePath, content, context) { context = context || {}; // Mutable objects to contains all blocks requiring post-processing const blocks = {}; // Create nunjucks environment const env = engine.toNunjucks(blocks); // Replace shortcuts from plugin's blocks content = (0, replaceShortcuts_1.default)(engine.getBlocks(), filePath, content); return timing_1.default.measure("template.render", promise_1.default.nfcall(env.renderString.bind(env), content, context, { path: filePath }) .then((content) => { return templateOutput_1.default.create(content, blocks); }) .catch((error) => { console.log("env:", env); console.log("context:", context); console.log("content:", content); console.error("rendering error:", error); return promise_1.default.reject(error); })); } exports.default = renderTemplate;