From ca3240c2c4d157095d2ebe0024d0c71bc5e435f8 Mon Sep 17 00:00:00 2001 From: Harttle Date: Thu, 24 Feb 2022 01:14:46 +0800 Subject: [PATCH] fix: `url_encode` throws on undefined value, fixes #479 --- src/builtin/filters/url.ts | 6 ++++-- test/e2e/issues.ts | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/builtin/filters/url.ts b/src/builtin/filters/url.ts index f14e73a9b..087a6de27 100644 --- a/src/builtin/filters/url.ts +++ b/src/builtin/filters/url.ts @@ -1,2 +1,4 @@ -export const urlDecode = (x: string) => x.split('+').map(decodeURIComponent).join(' ') -export const urlEncode = (x: string) => x.split(' ').map(encodeURIComponent).join('+') +import { stringify } from '../../util/underscore' + +export const urlDecode = (x: string) => stringify(x).split('+').map(decodeURIComponent).join(' ') +export const urlEncode = (x: string) => stringify(x).split(' ').map(encodeURIComponent).join('+') diff --git a/test/e2e/issues.ts b/test/e2e/issues.ts index 4236e43a4..2beca164f 100644 --- a/test/e2e/issues.ts +++ b/test/e2e/issues.ts @@ -199,4 +199,12 @@ describe('Issues', function () { const html = engine.parseAndRenderSync('{{foo | size}}-{{bar.coo}}', { foo: 'foo', bar: Object.create({ coo: 'COO' }) }) expect(html).to.equal('3-') }) + it('#479 url_encode throws on undefined value', async () => { + const engine = new Liquid({ + strictVariables: false + }) + const tpl = engine.parse('{{ v | url_encode }}') + const html = await engine.render(tpl, { v: undefined }) + expect(html).to.equal('') + }) })