summaryrefslogtreecommitdiff
path: root/lib/approval/template-utils.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/approval/template-utils.ts')
-rw-r--r--lib/approval/template-utils.ts23
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/approval/template-utils.ts b/lib/approval/template-utils.ts
index 0607f289..5a5bb307 100644
--- a/lib/approval/template-utils.ts
+++ b/lib/approval/template-utils.ts
@@ -39,14 +39,18 @@ export async function getApprovalTemplateByName(name: string) {
*
* {{변수명}} 형태의 변수를 실제 값으로 치환
*
+ * **중요**: 변수명의 앞뒤 공백은 자동으로 제거됩니다.
+ * - 템플릿: `{{ 변수명 }}` → `{{변수명}}`으로 정규화
+ * - 변수 키: ` 변수명 ` → `변수명`으로 정규화
+ *
* @param content - 템플릿 HTML 내용
* @param variables - 변수 매핑 객체
* @returns 치환된 HTML
*
* @example
* ```typescript
- * const content = "<p>{{이름}}님, 안녕하세요</p>";
- * const variables = { "이름": "홍길동" };
+ * const content = "<p>{{ 이름 }}님, 안녕하세요</p>";
+ * const variables = { " 이름 ": "홍길동" }; // 공백 있어도 OK
* const result = await replaceTemplateVariables(content, variables);
* // "<p>홍길동님, 안녕하세요</p>"
* ```
@@ -57,9 +61,20 @@ export async function replaceTemplateVariables(
): Promise<string> {
let result = content;
+ // 변수 키를 trim하여 정규화된 맵 생성
+ const normalizedVariables: Record<string, string> = {};
Object.entries(variables).forEach(([key, value]) => {
- // {{변수명}} 패턴을 전역으로 치환
- const pattern = new RegExp(`\\{\\{${escapeRegex(key)}\\}\\}`, 'g');
+ normalizedVariables[key.trim()] = value;
+ });
+
+ // 템플릿에서 {{ 변수명 }} 패턴을 찾아 치환
+ // 공백을 허용하는 정규식: {{\s*변수명\s*}}
+ Object.entries(normalizedVariables).forEach(([key, value]) => {
+ // 변수명 앞뒤에 공백이 있을 수 있으므로 \s*를 추가
+ const pattern = new RegExp(
+ `\\{\\{\\s*${escapeRegex(key)}\\s*\\}\\}`,
+ 'g'
+ );
result = result.replace(pattern, value);
});