From 623430f660a8db4687bb214d9348d4d4250f5fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bardon?= Date: Sat, 22 Jun 2024 19:58:03 +0200 Subject: [PATCH] Ignore undefined props --- src/index.ts | 6 ++++++ tests/index.test.ts | 20 +++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 532026b..69b0393 100644 --- a/src/index.ts +++ b/src/index.ts @@ -28,6 +28,12 @@ export function renderString( const variableValue = props[variable] + // If the variable doesn't exist, do not process the template + if (variableValue === undefined) { + expressions[i] = `${delimiters[0]}${expressions[i]}${delimiters[1]}` + continue + } + expressions[i] = filters.reduce((variableValue, filter) => { const splitPattern = /:(?![^{}]*})/g const [filterMethod, args] = filter.split(splitPattern) diff --git a/tests/index.test.ts b/tests/index.test.ts index 7eef043..ff8df11 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -106,11 +106,22 @@ describe('renderString', () => { expect(renderString('Test {{ value }}', { value: 123 })).toBe('Test 123') }) - test('should return ignore invalid filters', () => { + test('should ignore invalid filters', () => { expect(renderString('{{ value | invalidFilter }}', { value: 123 })).toBe( 123 ) }) + + test('should ignore undefined props', () => { + expect(renderString( + '{{ prefix }}/{{ suffix }}', + { prefix: 'abc' } + )).toBe('abc/{{ suffix }}') + expect(renderString( + '{{ prefix }}/{{ suffix | upcase }}', + { prefix: 'abc' } + )).toBe('abc/{{ suffix | upcase }}') + }) }) }) @@ -135,4 +146,11 @@ describe('renderObject', () => { list: [1, 1234, 3], }) }) + + test('should ignore undefined props', () => { + expect(renderObject( + { key: '{{ nested.prefix }}/{{ nested.suffix }}' }, + { nested: { prefix: 'abc' } } + )).toEqual({ key: 'abc/{{ nested.suffix }}' }) + }) })