{"version":3,"file":"template.mjs","names":[],"sources":["../../src/string/template.ts"],"sourcesContent":["/**\n * Replaces template placeholders with values from the data object.\n *\n * @param str - The template string\n * @param data - The data object with placeholder values\n * @returns The template string with placeholders replaced\n *\n * @example\n * template('Hello <%= name %>', { name: 'World' }) // => 'Hello World'\n * template('${name} is ${age} years old', { name: 'John', age: 30 }) // => 'John is 30 years old'\n */\nexport function template(str: string, data?: Record<string, unknown>): string {\n  if (typeof str !== 'string') {\n    return '';\n  }\n\n  if (!data) {\n    return str;\n  }\n\n  const stringify = (value: unknown): string => String(value as string | number | boolean | bigint | symbol | null);\n\n  // Replace <%= placeholder %> style\n  let result = str.replace(/<%=\\s*([^%]*?)\\s*%>/g, (_, key) => {\n    const value = data[key.trim()];\n    return value !== undefined ? stringify(value) : '';\n  });\n\n  // Replace ${placeholder} style\n  result = result.replace(/\\$\\{\\s*([^}]*?)\\s*\\}/g, (_, key) => {\n    const value = data[key.trim()];\n    return value !== undefined ? stringify(value) : '';\n  });\n\n  // Replace {placeholder} style\n  result = result.replace(/\\{\\s*([^}]*?)\\s*\\}/g, (_, key) => {\n    const value = data[key.trim()];\n    return value !== undefined ? stringify(value) : '';\n  });\n\n  return result;\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,SAAS,KAAa,MAAwC;CAC5E,IAAI,OAAO,QAAQ,UACjB,OAAO;CAGT,IAAI,CAAC,MACH,OAAO;CAGT,MAAM,aAAa,UAA2B,OAAO,KAA2D;CAGhH,IAAI,SAAS,IAAI,QAAQ,yBAAyB,GAAG,QAAQ;EAC3D,MAAM,QAAQ,KAAK,IAAI,KAAK;EAC5B,OAAO,UAAU,KAAA,IAAY,UAAU,KAAK,IAAI;CAClD,CAAC;CAGD,SAAS,OAAO,QAAQ,0BAA0B,GAAG,QAAQ;EAC3D,MAAM,QAAQ,KAAK,IAAI,KAAK;EAC5B,OAAO,UAAU,KAAA,IAAY,UAAU,KAAK,IAAI;CAClD,CAAC;CAGD,SAAS,OAAO,QAAQ,wBAAwB,GAAG,QAAQ;EACzD,MAAM,QAAQ,KAAK,IAAI,KAAK;EAC5B,OAAO,UAAU,KAAA,IAAY,UAAU,KAAK,IAAI;CAClD,CAAC;CAED,OAAO;AACT"}