Don't know where shortcode fails in Nunjucks template
Operating system
Xubuntu 22.04
Eleventy
2.0.1
Describe the bug
I have a fairly standard setup using an image shortcode to generate responsive images.
eleventyConfig.addShortcode("image", async function(src, alt, klass, sizes, loading) {
let metadata = await Image(src, {
widths: [500, 750, 1000, "auto"], // aligned with Strapi size optimization
formats: ["avif", "webp", "jpeg"],
outputDir: "dist/img"
});
let imageAttributes = {
class: klass,
alt,
sizes,
loading: loading || "eager",
decoding: "async",
};
// You bet we throw an error on a missing alt (alt="" works okay)
return Image.generateHTML(metadata, imageAttributes);
});
I use this several times in a template that consumes JavaScript data from Strapi, e.g.
{% image industrial.attributes.roadmapPhoto.data.attributes.url, "Roadmap photo", "img-fluid rounded-3", "(max-width: 500px) 100vw, (max-width: 750px) 100vw, (max-width: 1000px) 100vw" %}
However, if industrial.attributes.roadmapPhoto.data.attributes.url
is undefined, we get an error as per below.
[11ty] File changed: src/industrials.njk
[11ty] Problem writing Eleventy templates: (more in DEBUG output)
[11ty] 1. Having trouble rendering njk template ./src/industrials.njk (via TemplateContentRenderError)
[11ty] 2. (./src/industrials.njk)
[11ty] EleventyShortcodeError: Error with Nunjucks shortcode `image` (via Template render error)
[11ty] 3. `src` is a required argument to the eleventy-img utility (can be a String file path, String URL, or Buffer). (via Template render error)
[11ty]
[11ty] Original error stack trace: Error: `src` is a required argument to the eleventy-img utility (can be a String file path, String URL, or Buffer).
[11ty] at new Image (/home/antony/Sync/src/git/glenmore-frontend/node_modules/@11ty/eleventy-img/img.js:118:13)
[11ty] at queueImage (/home/antony/Sync/src/git/glenmore-frontend/node_modules/@11ty/eleventy-img/img.js:622:13)
[11ty] at Object.<anonymous> (/home/antony/Sync/src/git/glenmore-frontend/.eleventy.js:55:24)
[11ty] at Object.<anonymous> (/home/antony/Sync/src/git/eleventy-antgel/src/BenchmarkGroup.js:32:26)
[11ty] at ShortcodeFunction.run (/home/antony/Sync/src/git/eleventy-antgel/src/Engines/Nunjucks.js:200:14)
[11ty] at eval (eval at _compile (/home/antony/Sync/src/git/eleventy-antgel/node_modules/nunjucks/src/environment.js:527:18), <anonymous>:232:33)
[11ty] at iterCallback (/home/antony/Sync/src/git/eleventy-antgel/node_modules/nunjucks/src/runtime.js:236:11)
[11ty] at next (/home/antony/Sync/src/git/eleventy-antgel/node_modules/nunjucks/src/lib.js:258:7)
[11ty] at eval (eval at _compile (/home/antony/Sync/src/git/eleventy-antgel/node_modules/nunjucks/src/environment.js:527:18), <anonymous>:236:1)
[11ty] at /home/antony/Sync/src/git/eleventy-antgel/src/Engines/Nunjucks.js:202:15
[11ty] Benchmark 54ms 32% 246× (Configuration) "slugify" Nunjucks Filter
[11ty] Copied 9 files / Wrote 0 files in 0.17 seconds (v2.0.1)
The problem is that 11ty doesn't tell me where in the template it failed, which is frustrating as this shortcode is used in tens of places in the template, so I have to start commenting them out to see what happened. Can this information be exposed?
Note that running with DEBUG
doesn't add any more useful information.
Reproduction steps
No response
Expected behavior
No response
Reproduction URL
No response
Screenshots
No response