UNPKG

alapa

Version:

A cutting-edge web development framework designed to revolutionize the way developers build modern web applications.

84 lines (83 loc) 3.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplateEngine = void 0; const utils_1 = require("../utils"); const main_1 = require("./extension/component/main"); const main_2 = require("./extension/container/main"); const include_1 = require("./extension/include"); const output_1 = require("./output"); const misc_1 = require("./regex/misc"); const utils_2 = require("./utils"); const fs_1 = __importDefault(require("fs")); class TemplateEngine { static compile(template, context) { template = template.replace(misc_1.templateCommentRegex, ""); template = (0, utils_2.removeCommentsFromCode)(template); template = include_1.Include.render(template); main_2.Container.compile(template); template = main_2.Container.removeContainersFromTemplate(template); let outputOfTemplateEngine = ""; function addOutPutToTemplateEngine(output = "") { outputOfTemplateEngine += output; } function containers(key) { if (!key) return main_2.Container.get(); return main_2.Container.get().filter((k) => k.key == key); } const getOutPutToTemplateEngine = () => outputOfTemplateEngine; context = context || {}; context["addOutPutToTemplateEngine"] = addOutPutToTemplateEngine; context["getOutPutToTemplateEngine"] = getOutPutToTemplateEngine; context["containers"] = containers; context["escapeHTML"] = utils_2.escapeHTML; // Clean up the template template = template.replace(misc_1.importRegex, ""); template = (0, output_1.outPutVariable)(template); template = template.replace(misc_1.codeRegex, (match, codeBlock) => { return `</no-code>${codeBlock}<no-code>`; }); template = `<no-code>${template}</no-code>`; // Escape HTML and prepare the output template = template.replace(misc_1.noCodeRegex, (match, html) => { html = (0, utils_2.escapeCode)(html); return `;addOutPutToTemplateEngine(\`${html}\`);`; }); // Prepare the function with the context directly accessible template = `${template} return getOutPutToTemplateEngine()`; const output = new Function(`return (function() { for (const key in this) { global[key] = this[key]; } ${template} }).apply(this); `).call(context); template = template.replace(/\[\[\s?(.*?)\s?\]\]/g, (match, key) => { try { const value = `{% addOutPutToTemplateEngine(\`$\{${key}}\`); %}`; return value; } catch (e) { utils_1.Logger.error(`Error while processing template: ${e}`); return ""; } }); return output !== undefined ? output : ""; } static renderString(template, context) { main_2.Container.clear(); return this.compile(template, context); } static getTemplate(templatePath) { const template = fs_1.default.readFileSync(templatePath, "utf8"); return template; } static renderFile(templatePath, context) { const template = main_1.Component.compileFile(templatePath, context); return this.renderString(template, context); } } exports.TemplateEngine = TemplateEngine;