UNPKG

nucleus-ui-builder

Version:
66 lines (65 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return Compiler; } }); function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class Compiler { compile(template, replacements) { let compiled = ``; for(let i = 0; i < template.length; i++){ const char = template[i]; if (this.isOpeningBracket(char)) this.bracketStack.push(char); else if (this.isClosingBracket(char)) { if (!this.matchesLastOpened(char)) throw new Error(`Unmatched closing bracket: ${char}`); this.bracketStack.pop(); } compiled += char; } if (this.bracketStack.length > 0) throw new Error(`Unmatched opening bracket(s) detected`); return compiled.replace(this.placeholderRegex, (_, key)=>{ if (!(key in replacements)) throw new Error(`Missing replacement for: ${key}`); return replacements[key]; }); } isOpeningBracket(char) { return [ `[`, `{`, `(` ].includes(char); } isClosingBracket(char) { return [ `]`, `}`, `)` ].includes(char); } matchesLastOpened(char) { const lastOpened = this.bracketStack[this.bracketStack.length - 1]; return char === `]` && lastOpened === `[` || char === `}` && lastOpened === `{` || char === `)` && lastOpened === `(`; } constructor(){ _define_property(this, "bracketStack", []); _define_property(this, "placeholderRegex", /\{\{(.*?)}}/g); } } //# sourceMappingURL=compiler.js.map