UNPKG

@apicart/brackets

Version:

Small, flexible, easy to use, component-oriented javascript template engine.

57 lines (44 loc) 1.56 kB
import {templateLiteral} from '../../shared/variables'; import {utils} from '../../shared/utils'; import {processVariable} from './processors/procesVariable'; import {processMacro} from './processors/processMacro'; import {getMacros} from '../runtime/macros'; var variableMatchRegularExpression = /^\$/; /** * @param {{}} tokens * @param {{}} templateParametersNames * @return {Function} */ export function compileTemplate(tokens, templateParametersNames) { var macroTokenArray, macroTokenFirstPart, templateString = 'var _template = \'\';' + _templateAdd.toString() + ';'; utils.each(tokens.text, function (tokenKey, tokenText) { templateString += '_template += _templateAdd(' + templateLiteral + tokenText + templateLiteral + ');'; if (tokenKey in tokens.macros) { macroTokenArray = tokens.macros[tokenKey]; macroTokenFirstPart = macroTokenArray[0]; if (macroTokenFirstPart.match(variableMatchRegularExpression)) { templateString += processVariable(macroTokenArray); } else if (macroTokenFirstPart in getMacros()) { templateString += processMacro(macroTokenArray); } else { throw 'Unknown token: "' + macroTokenFirstPart + '"'; } } }); templateString += 'return _template;'; return new Function(templateParametersNames.join(','), templateString); } /** * _runtime is provided in the template * @param {*} data * @param {string} filter * @return {*} * @private */ function _templateAdd(data, filter) { /* eslint-disable-next-line no-undef */ return _runtime.templateAdd(data, filter); }