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 }}' }) + }) })