From 5def7d8c101f66b2c3bb7c0ff77b4cb9cde9bcbd Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Thu, 14 Apr 2022 16:22:30 -0500 Subject: [PATCH] Fixes #2267 --- src/Engines/Custom.js | 15 ++++++++------ test/TemplateRenderCustomTest.js | 16 +++++++++++++++ test/TemplateTest-CustomExtensions.js | 28 +++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/Engines/Custom.js b/src/Engines/Custom.js index 4ba8ba3de..095106430 100644 --- a/src/Engines/Custom.js +++ b/src/Engines/Custom.js @@ -165,12 +165,15 @@ class CustomEngine extends TemplateEngine { defaultRenderer, // bind defaultRenderer to compile function })(str, inputPath); - // Bind defaultRenderer to render function - if ("then" in fn && typeof fn.then === "function") { - // Promise, wait to bind - return fn.then((fn) => fn.bind({ defaultRenderer })); - } else if ("bind" in fn && typeof fn.bind === "function") { - return fn.bind({ defaultRenderer }); + // Support `undefined` to skip compile/render + if (fn) { + // Bind defaultRenderer to render function + if ("then" in fn && typeof fn.then === "function") { + // Promise, wait to bind + return fn.then((fn) => fn.bind({ defaultRenderer })); + } else if ("bind" in fn && typeof fn.bind === "function") { + return fn.bind({ defaultRenderer }); + } } return fn; diff --git a/test/TemplateRenderCustomTest.js b/test/TemplateRenderCustomTest.js index 2e35eb394..b17c76f38 100644 --- a/test/TemplateRenderCustomTest.js +++ b/test/TemplateRenderCustomTest.js @@ -215,3 +215,19 @@ test("JavaScript functions should not be mutable but not *that* mutable", async let data = await tmpl.getData(); t.is(await tmpl.render(data), "

Paragraph

"); }); + +test("Return undefined in compile to ignore #2267", async (t) => { + let eleventyConfig = new TemplateConfig(); + eleventyConfig.userConfig.extensionMap.add({ + extension: "txt", + key: "txt", + compile: function (str, inputPath) { + return; + }, + }); + + let tr = getNewTemplateRender("txt", null, eleventyConfig); + + let fn = await tr.getCompiledTemplate("

Paragraph

"); + t.is(fn, undefined); +}); diff --git a/test/TemplateTest-CustomExtensions.js b/test/TemplateTest-CustomExtensions.js index 569f44197..a056a2b13 100644 --- a/test/TemplateTest-CustomExtensions.js +++ b/test/TemplateTest-CustomExtensions.js @@ -438,3 +438,31 @@ test("Access to default renderer when you override an existing extension (async let data = await tmpl.getData(); t.is(await tmpl.render(data), "hi"); }); + +test("Return undefined in compile to ignore #2267", async (t) => { + let eleventyConfig = new TemplateConfig(); + eleventyConfig.userConfig.extensionMap.add({ + extension: "txt", + key: "txt", + compileOptions: { + cache: false, + }, + getData: false, + compile: function (str, inputPath) { + return; + }, + }); + + let dataObj = new TemplateData("./test/stubs/", eleventyConfig); + let tmpl = getNewTemplate( + "./test/stubs/custom-extension.txt", + "./test/stubs/", + "dist", + dataObj, + null, + eleventyConfig + ); + + let data = await tmpl.getData(); + t.is(await tmpl.render(data), undefined); +});