/** * @fileoverview Interpolate keys from an object into a string with {{ }} markers. * @author Jed Fox */ "use strict"; //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ /** * Returns a global expression matching placeholders in messages. * @returns {RegExp} Global regular expression matching placeholders */ function getPlaceholderMatcher() { return /\{\{([^{}]+?)\}\}/gu; } /** * Replaces {{ placeholders }} in the message with the provided data. * Does not replace placeholders not available in the data. * @param {string} text Original message with potential placeholders * @param {Record} data Map of placeholder name to its value * @returns {string} Message with replaced placeholders */ function interpolate(text, data) { if (!data) { return text; } const matcher = getPlaceholderMatcher(); // Substitution content for any {{ }} markers. return text.replace(matcher, (fullMatch, termWithWhitespace) => { const term = termWithWhitespace.trim(); if (term in data) { return data[term]; } // Preserve old behavior: If parameter name not provided, don't replace it. return fullMatch; }); } module.exports = { getPlaceholderMatcher, interpolate };