diff options
Diffstat (limited to 'lib/approval/template-utils.ts')
| -rw-r--r-- | lib/approval/template-utils.ts | 23 |
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); }); |
