UNPKG

@nitrogenbuilder/client-core

Version:

Nitrogen Builder Core Client

43 lines (42 loc) 1.4 kB
import { applyFilters } from './templateFilters.js'; import { parseSegment } from './parseTemplateExpression.js'; import { resolve } from './resolve.js'; function isEmpty(value) { return value === null || value === undefined || value === ''; } function evaluateSegment(segment, context) { const parsed = parseSegment(segment); const results = parsed.parts.map((part) => { let value; if (part.type === 'literal') { value = part.value; } else { value = resolve(part.value, context); } if (part.filters.length > 0 && value != null) { value = applyFilters(value, part.filters); } return value; }); if (results.length === 1) return results[0]; if (results.some((r) => r === null || r === undefined)) return ''; return results.map(String).join(''); } export function renderTemplate(str, context, builderMode) { if (typeof str !== 'string') return str; return str.replace(/{{\s*([^}]+)\s*}}/g, (_, raw) => { const segments = raw.split('||'); for (const segment of segments) { const value = evaluateSegment(segment, context); if (!isEmpty(value)) { const resolved = String(value); return builderMode ? resolved : resolved; } } return ''; }); }