UNPKG

@ogs-gmbh/ngx-template-engine

Version:

A library providing a flexible and efficient template engine for dynamic content rendering. It enables easy integration of customizable templates within Angular applications.

28 lines 4.88 kB
import { AstKind } from "./ast"; import { isObject } from "./utils"; function transformAst(ast, data) { if (Array.isArray(data) && ast.mode !== "index" || isObject(data) && ast.mode !== "property") throw new Error(`Expected an appropiate data type matching to ${ast.mode}-based template variables`); return ast.nodes.map((node) => { if (node.kind === AstKind.TEXT) return node.value; switch (ast.mode) { case "property": { const dataIndex = node.property; const dataValue = data[dataIndex]; if (dataValue === undefined) throw new Error(`Expected data for key ${dataIndex}`); return dataValue.toString(); } case "index": { const dataIndex = node.index; const dataValue = data[dataIndex]; if (dataValue === undefined) throw new Error(`Expected data for key ${dataIndex}`); return dataValue.toString(); } } }).join(""); } export { transformAst }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBdUUsTUFBTSxPQUFPLENBQUM7QUFDMUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU1uQyxTQUFTLFlBQVksQ0FBRSxHQUFRLEVBQUUsSUFBNEI7SUFDM0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDMUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBaUQsR0FBRyxDQUFDLElBQUssMkJBQTJCLENBQUMsQ0FBQztJQUd6RyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBYSxFQUFVLEVBQUU7UUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJO1lBQzVCLE9BQVEsSUFBb0IsQ0FBQyxLQUFLLENBQUM7UUFFckMsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBWSxJQUFnQyxDQUFDLFFBQVEsQ0FBQztnQkFDckUsTUFBTSxTQUFTLEdBQWlDLElBQW1CLENBQUUsU0FBUyxDQUFFLENBQUM7Z0JBRWpGLElBQUksU0FBUyxLQUFLLFNBQVM7b0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQTBCLFNBQVUsRUFBRSxDQUFDLENBQUM7Z0JBRTFELE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLENBQUM7WUFFRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsTUFBTSxTQUFTLEdBQVksSUFBNkIsQ0FBQyxLQUFLLENBQUM7Z0JBQy9ELE1BQU0sU0FBUyxHQUFpQyxJQUFrQixDQUFFLFNBQVMsQ0FBRSxDQUFDO2dCQUVoRixJQUFJLFNBQVMsS0FBSyxTQUFTO29CQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUEwQixTQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUUxRCxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNkLENBQUM7QUFNRCxPQUFPLEVBQ0wsWUFBWSxFQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3QsIEFzdEtpbmQsIEFzdE5vZGUsIEFzdFRlbXBsYXRlUHJvcGVydHlOb2RlLCBBc3RUZXh0Tm9kZSwgQXN0VGVtcGxhdGVJbmRleE5vZGUgfSBmcm9tIFwiLi9hc3RcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxudHlwZSBEYXRhUmVjb3JkID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcblxudHlwZSBEYXRhQXJyYXkgPSBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Bc3QgKGFzdDogQXN0LCBkYXRhOiBEYXRhUmVjb3JkIHwgRGF0YUFycmF5KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgYXN0Lm1vZGUgIT09IFwiaW5kZXhcIiB8fCBpc09iamVjdChkYXRhKSAmJiBhc3QubW9kZSAhPT0gXCJwcm9wZXJ0eVwiKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYW4gYXBwcm9waWF0ZSBkYXRhIHR5cGUgbWF0Y2hpbmcgdG8gJHsgYXN0Lm1vZGUgfS1iYXNlZCB0ZW1wbGF0ZSB2YXJpYWJsZXNgKTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyYXktY2FsbGJhY2stcmV0dXJuICovXG4gIHJldHVybiBhc3Qubm9kZXMubWFwKChub2RlOiBBc3ROb2RlKTogc3RyaW5nID0+IHtcbiAgICBpZiAobm9kZS5raW5kID09PSBBc3RLaW5kLlRFWFQpXG4gICAgICByZXR1cm4gKG5vZGUgYXMgQXN0VGV4dE5vZGUpLnZhbHVlO1xuXG4gICAgc3dpdGNoIChhc3QubW9kZSkge1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6IHtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4OiBzdHJpbmcgPSAobm9kZSBhcyBBc3RUZW1wbGF0ZVByb3BlcnR5Tm9kZSkucHJvcGVydHk7XG4gICAgICAgIGNvbnN0IGRhdGFWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gKGRhdGEgYXMgRGF0YVJlY29yZClbIGRhdGFJbmRleCBdO1xuXG4gICAgICAgIGlmIChkYXRhVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGRhdGEgZm9yIGtleSAkeyBkYXRhSW5kZXggfWApO1xuXG4gICAgICAgIHJldHVybiBkYXRhVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBcImluZGV4XCI6IHtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4OiBudW1iZXIgPSAobm9kZSBhcyBBc3RUZW1wbGF0ZUluZGV4Tm9kZSkuaW5kZXg7XG4gICAgICAgIGNvbnN0IGRhdGFWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gKGRhdGEgYXMgRGF0YUFycmF5KVsgZGF0YUluZGV4IF07XG5cbiAgICAgICAgaWYgKGRhdGFWYWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZGF0YSBmb3Iga2V5ICR7IGRhdGFJbmRleCB9YCk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGFWYWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgfSkuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IHR5cGUge1xuICBEYXRhUmVjb3JkLFxuICBEYXRhQXJyYXlcbn07XG5leHBvcnQge1xuICB0cmFuc2Zvcm1Bc3Rcbn07XG4iXX0=