From b0c01541e26f69632ff82efd08ff658232032f72 Mon Sep 17 00:00:00 2001 From: Nils Knappmeier Date: Sun, 6 Aug 2023 17:22:32 +0200 Subject: [PATCH] Ensure that programs always return strings Fixes #1838 --- .../compiler/javascript-compiler.js | 2 +- spec/javascript-compiler.js | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/handlebars/compiler/javascript-compiler.js b/lib/handlebars/compiler/javascript-compiler.js index 7762412ef..e93d81a37 100644 --- a/lib/handlebars/compiler/javascript-compiler.js +++ b/lib/handlebars/compiler/javascript-compiler.js @@ -308,7 +308,7 @@ JavaScriptCompiler.prototype = { if (appendOnly) { if (bufferStart) { - bufferStart.prepend('return '); + bufferStart.prepend('return "" + '); bufferEnd.add(';'); } else if (!sourceSeen) { this.source.push('return "";'); diff --git a/spec/javascript-compiler.js b/spec/javascript-compiler.js index ed2dc8c56..89efbbc7e 100644 --- a/spec/javascript-compiler.js +++ b/spec/javascript-compiler.js @@ -34,6 +34,7 @@ describe('javascript-compiler api', function() { .toCompileTo('food'); }); }); + describe('#compilerInfo', function() { var $superCheck, $superInfo; beforeEach(function() { @@ -58,6 +59,7 @@ describe('javascript-compiler api', function() { .toCompileTo('food '); }); }); + describe('buffer', function() { var $superAppend, $superCreate; beforeEach(function() { @@ -116,4 +118,23 @@ describe('javascript-compiler api', function() { }); }); }); + + describe('options', function() { + it('should append `noEscape` statements as string', function() { + expectTemplate('{{a}}{{b}}') + .withCompileOptions({ noEscape: true }) + .withInput({ a: 1, b: 1 }) + .toCompileTo('11'); + }); + + it('should append `noEscape` statements as string in a block', function() { + expectTemplate('{{#block}}{{a}}{{b}}{{/block}}') + .withCompileOptions({ noEscape: true }) + .withHelper('block', function(options) { + return options.fn(this); + }) + .withInput({ a: 1, b: 1 }) + .toCompileTo('11'); + }); + }); });