11ty / eleventy

A simpler site generator. Transforms a directory of templates (of varying types) into HTML.
https://www.11ty.dev/
MIT License
16.61k stars 482 forks source link

Tried to use templateContent too early in eleventy 3.0.0-alpha.3 on rerender #3136

Closed Snapstromegon closed 2 weeks ago

Snapstromegon commented 6 months ago

Operating system

Windows 11 Pro

Eleventy

3.0.0-alpha.3

Describe the bug

This description is based on my real blog. I wasn't yet able to create a reduced example. If I manage to create one, I'll update it here. If someone else is able to create one, post them too!

When serving a project and changing a file afterwards, the build fails with this error:

[11ty] File changed: src\webdev-sins\2023-12-23-building-on-feelings.md
[11ty] Unhandled rejection in promise: (more in DEBUG output)
[11ty] Tried to use templateContent too early on ./src/webdev-sins/2023-12-23-building-on-feelings.md (via TemplateContentPrematureUseError)
[11ty]
[11ty] Original error stack trace: TemplateContentPrematureUseError: Tried to use templateContent too early on ./src/webdev-sins/2023-12-23-building-on-feelings.md 
[11ty]     at Object.get [as templateContent] (file:///D:/Documents/DEV/hoeser.dev/node_modules/@11ty/eleventy/src/Template.js:619:14)
[11ty]     at Object.memberLookup (D:\Documents\DEV\hoeser.dev\node_modules\nunjucks\src\runtime.js:201:17)
[11ty]     at eval (eval at _compile (D:\Documents\DEV\hoeser.dev\node_modules\nunjucks\src\environment.js:527:18), <anonymous>:58:59)
[11ty]     at iterCallback (D:\Documents\DEV\hoeser.dev\node_modules\nunjucks\src\runtime.js:236:11)
[11ty]     at next (D:\Documents\DEV\hoeser.dev\node_modules\nunjucks\src\lib.js:258:7)
[11ty]     at eval (eval at _compile (D:\Documents\DEV\hoeser.dev\node_modules\nunjucks\src\environment.js:527:18), <anonymous>:62:1)
[11ty]     at D:\Documents\DEV\hoeser.dev\node_modules\@11ty\eleventy-plugin-rss\.eleventy.js:29:7
[11ty]     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Reproduction steps

  1. Clone my blog repo from here: https://github.com/Snapstromegon/hoeser.dev
  2. Checkout this commit: 0a7c573ae2ba6358b43fd35b948fe5570c557545 (the bug was introduced here, when I switched to v3)
  3. Install and run npm run serve
  4. Edit any src/blog/*.md entry or src/webdev-sins/*.md file

Expected behavior

The page rebuilds successfully.

Reproduction URL

No response

Screenshots

No response

Snapstromegon commented 6 months ago

I could find that this has to do with my src/feed.xml.njk, which generates a custom atom feed and is based on https://www.11ty.dev/docs/plugins/rss/. It includes this line:

<content type="html">{{ post.templateContent | htmlToAbsoluteUrls(absolutePostUrl) }}</content>

which seems to trigger this issue. Did something change in the order of template execution?

jamesdoc commented 6 months ago

I've experienced this too on both 3.0.0-alpha.2 and 3.0.0-alpha.3.

Removing htmlToAbsoluteUrls restores the expected functionality.


Update on this: I am now unable to reproduce this issue… without seeming to have changed anything.

uncenter commented 6 months ago

I just started to upgrade and I am now getting this too... 👀

ghost commented 6 months ago

Hey, I've been having the same issue for almost a month, and I'm on v2. My bug report (and a link to an MWE) is here: https://github.com/11ty/eleventy/issues/3146

My issue seemed to be related to my RSS feed as well, at least at first, since I'd get the error to occur if I was editing any Markdown files. However, I've even had the error happen when I'd edit an HTML page that has nothing to do with my RSS feed or Markdown files (that I'm aware of, at least).

Worst part is, the issue is inconsistent when it comes to reproducing, at least on different computers. I've had uncenter and aankhen over at the Eleventy Discord channel help me figure this out all this time, and between the three of us, we'd have the error happen with different files, or inconsistently with the same file. It's weird.

EDIT: And here's my Discord topic on this weird bug, if anyone wants to chime in there about this issue: https://discord.com/channels/741017160297611315/1182433386111971338

gunnarsson commented 4 months ago

I'm on alpha5 and just started seeing this error. It seems to be triggered by the rss plugin for me as well, and I also have the <description>{{ post.templateContent | htmlToAbsoluteUrls(absolutePostUrl) }}</description> line.

I haven't seen the error previously, before or after upgrading to 3.0.0. If I delete my _site folder and start the dev server the entire site generates without problem, but if I then just save a markdown file it triggers the error. It doesn't seem to matter which post I'm saving.

[11ty] Tried to use templateContent too early on ./posts/bicycle-commuting-premiere.md (via TemplateContentPrematureUseError)
[11ty] 
[11ty] Original error stack trace: TemplateContentPrematureUseError: Tried to use templateContent too early on ./posts/bicycle-commuting-premiere.md
[11ty]     at Object.get [as templateContent] (file:///.../node_modules/@11ty/eleventy/src/Template.js:622:14)
[11ty]     at Object.memberLookup (/.../node_modules/nunjucks/src/runtime.js:201:17)
[11ty]     at eval (eval at _compile (/.../node_modules/nunjucks/src/environment.js:527:18), <anonymous>:47:59)
[11ty]     at iterCallback (/.../node_modules/nunjucks/src/runtime.js:236:11)
[11ty]     at next (/.../node_modules/nunjucks/src/lib.js:258:7)
[11ty]     at eval (eval at _compile (/.../node_modules/nunjucks/src/environment.js:527:18), <anonymous>:57:1)
[11ty]     at /.../node_modules/@11ty/eleventy-plugin-rss/.eleventy.js:29:7
[11ty]     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
yogensia commented 3 months ago

Having the same issue since I upgraded to v3 (I went straight to alpha-5 from an old 0.2 version). Running on Win11, node 20.11.0 and latest version of @11ty/eleventy-plugin-rss, 1.2.0, which seems to be the origin of the issue for me as well.

Here's a full log with DEBUG=eleventy* after editing a markdown file with --serve in case that helps give more context. Only thing that stands out to me is that undefined near the top: Eleventy Input (File): undefined, not sure if that's normal though.

Sorry if the wall of text is too much, if so please feel free to mention me and I'll change it to a gist link or something!

[11ty] File changed: src\blog\2021-04-20-toolbag-tips.md
  Eleventy Restarting +13s
  Eleventy:TemplatePassthroughManager Resetting counts to 0 +13s
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./node_modules/** +15s
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./dist/** +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.cache/** +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./ftp-config.json +1ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.env +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.log +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**.DS_Store* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./ehthumbs.db +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./Icon? +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./Thumbs.db +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./._* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.sass-cache +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.sass-cache/* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.map +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.github +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./src/drafts/** +1ms
  Eleventy:TemplatePassthroughManager Resetting counts to 0 +5ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./node_modules/** +3ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./dist/** +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.cache/** +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./ftp-config.json +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.env +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.log +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**.DS_Store* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./ehthumbs.db +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./Icon? +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./Thumbs.db +1ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./._* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.sass-cache +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.sass-cache/* +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./**/.map +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./.github +0ms
  Eleventy:EleventyFiles .gitignore,.eleventyignore,src/.eleventyignore ignoring: ./src/drafts/** +0ms
  Eleventy Directories:
  Eleventy Input (Dir): src
  Eleventy Input (File): undefined
  Eleventy Data: src/_data
  Eleventy Includes: src/_includes
  Eleventy Layouts: src/_layouts
  Eleventy Output: dist
  Eleventy Template Formats: liquid,md,njk,html,11ty.js
  Eleventy Verbose Output: false +9ms
  Eleventy:EleventyFiles Searching for: [ './src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}' ] +1ms
  Eleventy:FastGlobManager Glob search ('templates') searching for: [ './src/**/*.{liquid,md,njk,html,11ty.js,11ty.cjs,11ty.mjs}' ] +13s
  Eleventy:FastGlobManager Glob search ('templates') ignoring: [ 'node_modules/**',  'dist/**', '.cache/**',        'ftp-config.json', '.env',             '.log', '**.DS_Store*',     'ehthumbs.db', 'Icon?',            'Thumbs.db', '._*',              '**/.sass-cache', '**/.sass-cache/*', '**/.map', '.github',          'src/drafts/**', 'src/_includes/**', 'src/_layouts/**', 'src/_data/**',     '**/node_modules/**', '.git/**' ] +1ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copy started. +5ms
  Eleventy:TemplatePassthroughManager `addPassthroughCopy` config API paths: { 'src/js': { outputPath: true, copyOptions: {} }, 'src/assets/icons': { outputPath: true, copyOptions: {} }, 'src/assets/images': { outputPath: true, copyOptions: {} }, 'src/site.webmanifest': { outputPath: true, copyOptions: {} }, 'src/.htaccess': { outputPath: true, copyOptions: {} }, 'src/humans.txt': { outputPath: true, copyOptions: {} } } +0ms
  Eleventy:TemplatePassthroughManager `addPassthroughCopy` config API normalized paths: [ { inputPath: './src/js', outputPath: true, copyOptions: {} }, { inputPath: './src/assets/icons', outputPath: true, copyOptions: {} }, { inputPath: './src/assets/images', outputPath: true, copyOptions: {} }, { inputPath: './src/site.webmanifest', outputPath: true, copyOptions: {} }, { inputPath: './src/.htaccess', outputPath: true, copyOptions: {} }, { inputPath: './src/humans.txt', outputPath: true, copyOptions: {} } ] +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/js', outputPath: true, copyOptions: {} } +1ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/assets/icons', outputPath: true, copyOptions: {} } +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/assets/images', outputPath: true, copyOptions: {} } +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/site.webmanifest', outputPath: true, copyOptions: {} } +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/.htaccess', outputPath: true, copyOptions: {} } +0ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copying from config: { inputPath: './src/humans.txt', outputPath: true, copyOptions: {} } +0ms
  Eleventy:TemplatePassthrough Copying './src/js' +15s
  Eleventy:TemplatePassthrough Copying './src/assets/icons' +0ms
  Eleventy:TemplatePassthrough Copying './src/assets/images' +1ms
  Eleventy:TemplatePassthrough Copying './src/site.webmanifest' +0ms
  Eleventy:TemplatePassthrough Copying './src/.htaccess' +0ms
  Eleventy:TemplatePassthrough Copying './src/humans.txt' +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +15s
  Eleventy:TemplateData getLocalDataPaths('./src/403.md'): [ './src/403.11tydata.js', './src/403.11tydata.cjs', './src/403.11tydata.mjs', './src/403.11tydata.json', './src/403.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/403.md adding to template map. +14s
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/404.md'): [ './src/404.11tydata.js', './src/404.11tydata.cjs', './src/404.11tydata.mjs', './src/404.11tydata.json', './src/404.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/404.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/about.md'): [ './src/about.11tydata.js', './src/about.11tydata.cjs', './src/about.11tydata.mjs', './src/about.11tydata.json', './src/about.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/about.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/blog.md'): [ './src/blog.11tydata.js', './src/blog.11tydata.cjs', './src/blog.11tydata.mjs', './src/blog.11tydata.json', './src/blog.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/blog.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/cookies.md'): [ './src/cookies.11tydata.js', './src/cookies.11tydata.cjs', './src/cookies.11tydata.mjs', './src/cookies.11tydata.json', './src/cookies.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/cookies.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/disclaimer.md'): [ './src/disclaimer.11tydata.js', './src/disclaimer.11tydata.cjs', './src/disclaimer.11tydata.mjs', './src/disclaimer.11tydata.json', './src/disclaimer.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/disclaimer.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/feed.njk'): [ './src/feed.11tydata.js', './src/feed.11tydata.cjs', './src/feed.11tydata.mjs', './src/feed.11tydata.json', './src/feed.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/feed.njk adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/index.md'): [ './src/index.11tydata.js', './src/index.11tydata.cjs', './src/index.11tydata.mjs', './src/index.11tydata.json', './src/index.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/index.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio.md'): [ './src/portfolio.11tydata.js', './src/portfolio.11tydata.cjs', './src/portfolio.11tydata.mjs', './src/portfolio.11tydata.json', './src/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/privacy.md'): [ './src/privacy.11tydata.js', './src/privacy.11tydata.cjs', './src/privacy.11tydata.mjs', './src/privacy.11tydata.json', './src/privacy.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +1ms
  Eleventy:TemplateWriter ./src/privacy.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/sitemap.njk'): [ './src/sitemap.11tydata.js', './src/sitemap.11tydata.cjs', './src/sitemap.11tydata.mjs', './src/sitemap.11tydata.json', './src/sitemap.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/sitemap.njk adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/blog/2021-04-20-toolbag-tips.md'): [ './src/blog/2021-04-20-toolbag-tips.11tydata.js', './src/blog/2021-04-20-toolbag-tips.11tydata.cjs', './src/blog/2021-04-20-toolbag-tips.11tydata.mjs', './src/blog/2021-04-20-toolbag-tips.11tydata.json', './src/blog/2021-04-20-toolbag-tips.json', './src/blog/blog.11tydata.js', './src/blog/blog.11tydata.cjs', './src/blog/blog.11tydata.mjs', './src/blog/blog.11tydata.json', './src/blog/blog.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/blog/2021-04-20-toolbag-tips.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/blog/2021-07-06-discord-bot-part-1.md'): [ './src/blog/2021-07-06-discord-bot-part-1.11tydata.js', './src/blog/2021-07-06-discord-bot-part-1.11tydata.cjs', './src/blog/2021-07-06-discord-bot-part-1.11tydata.mjs', './src/blog/2021-07-06-discord-bot-part-1.11tydata.json', './src/blog/2021-07-06-discord-bot-part-1.json', './src/blog/blog.11tydata.js', './src/blog/blog.11tydata.cjs', './src/blog/blog.11tydata.mjs', './src/blog/blog.11tydata.json', './src/blog/blog.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/blog/2021-07-06-discord-bot-part-1.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/axe-the-shining.md'): [ './src/portfolio/axe-the-shining.11tydata.js', './src/portfolio/axe-the-shining.11tydata.cjs', './src/portfolio/axe-the-shining.11tydata.mjs', './src/portfolio/axe-the-shining.11tydata.json', './src/portfolio/axe-the-shining.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/axe-the-shining.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/brush-axe.md'): [ './src/portfolio/brush-axe.11tydata.js', './src/portfolio/brush-axe.11tydata.cjs', './src/portfolio/brush-axe.11tydata.mjs', './src/portfolio/brush-axe.11tydata.json', './src/portfolio/brush-axe.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/brush-axe.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/chess-set.md'): [ './src/portfolio/chess-set.11tydata.js', './src/portfolio/chess-set.11tydata.cjs', './src/portfolio/chess-set.11tydata.mjs', './src/portfolio/chess-set.11tydata.json', './src/portfolio/chess-set.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/chess-set.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/excalibur.md'): [ './src/portfolio/excalibur.11tydata.js', './src/portfolio/excalibur.11tydata.cjs', './src/portfolio/excalibur.11tydata.mjs', './src/portfolio/excalibur.11tydata.json', './src/portfolio/excalibur.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/excalibur.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/hardedge.md'): [ './src/portfolio/hardedge.11tydata.js', './src/portfolio/hardedge.11tydata.cjs', './src/portfolio/hardedge.11tydata.mjs', './src/portfolio/hardedge.11tydata.json', './src/portfolio/hardedge.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/hardedge.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/harley-quinn-bat.md'): [ './src/portfolio/harley-quinn-bat.11tydata.js', './src/portfolio/harley-quinn-bat.11tydata.cjs', './src/portfolio/harley-quinn-bat.11tydata.mjs', './src/portfolio/harley-quinn-bat.11tydata.json', './src/portfolio/harley-quinn-bat.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/harley-quinn-bat.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/l4d-adrenaline.md'): [ './src/portfolio/l4d-adrenaline.11tydata.js', './src/portfolio/l4d-adrenaline.11tydata.cjs', './src/portfolio/l4d-adrenaline.11tydata.mjs', './src/portfolio/l4d-adrenaline.11tydata.json', './src/portfolio/l4d-adrenaline.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/l4d-adrenaline.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/l4d-pipebomb.md'): [ './src/portfolio/l4d-pipebomb.11tydata.js', './src/portfolio/l4d-pipebomb.11tydata.cjs', './src/portfolio/l4d-pipebomb.11tydata.mjs', './src/portfolio/l4d-pipebomb.11tydata.json', './src/portfolio/l4d-pipebomb.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs',
 './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/l4d-pipebomb.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/mad-can.md'): [ './src/portfolio/mad-can.11tydata.js', './src/portfolio/mad-can.11tydata.cjs', './src/portfolio/mad-can.11tydata.mjs', './src/portfolio/mad-can.11tydata.json', './src/portfolio/mad-can.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/mad-can.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/master-sword.md'): [ './src/portfolio/master-sword.11tydata.js', './src/portfolio/master-sword.11tydata.cjs', './src/portfolio/master-sword.11tydata.mjs', './src/portfolio/master-sword.11tydata.json', './src/portfolio/master-sword.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs',
 './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/master-sword.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/modular-katanas.md'): [ './src/portfolio/modular-katanas.11tydata.js', './src/portfolio/modular-katanas.11tydata.cjs', './src/portfolio/modular-katanas.11tydata.mjs', './src/portfolio/modular-katanas.11tydata.json', './src/portfolio/modular-katanas.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/modular-katanas.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/nuka-cola-cap.md'): [ './src/portfolio/nuka-cola-cap.11tydata.js', './src/portfolio/nuka-cola-cap.11tydata.cjs', './src/portfolio/nuka-cola-cap.11tydata.mjs', './src/portfolio/nuka-cola-cap.11tydata.json', './src/portfolio/nuka-cola-cap.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/nuka-cola-cap.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/oil-spray-can.md'): [ './src/portfolio/oil-spray-can.11tydata.js', './src/portfolio/oil-spray-can.11tydata.cjs', './src/portfolio/oil-spray-can.11tydata.mjs', './src/portfolio/oil-spray-can.11tydata.json', './src/portfolio/oil-spray-can.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/oil-spray-can.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/pipe-axe.md'): [ './src/portfolio/pipe-axe.11tydata.js', './src/portfolio/pipe-axe.11tydata.cjs', './src/portfolio/pipe-axe.11tydata.mjs', './src/portfolio/pipe-axe.11tydata.json', './src/portfolio/pipe-axe.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/pipe-axe.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/rickenbacker.md'): [ './src/portfolio/rickenbacker.11tydata.js', './src/portfolio/rickenbacker.11tydata.cjs', './src/portfolio/rickenbacker.11tydata.mjs', './src/portfolio/rickenbacker.11tydata.json', './src/portfolio/rickenbacker.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs',
 './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/rickenbacker.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/skyrim-sword.md'): [ './src/portfolio/skyrim-sword.11tydata.js', './src/portfolio/skyrim-sword.11tydata.cjs', './src/portfolio/skyrim-sword.11tydata.mjs', './src/portfolio/skyrim-sword.11tydata.json', './src/portfolio/skyrim-sword.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs',
 './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/skyrim-sword.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/tamagotchi.md'): [ './src/portfolio/tamagotchi.11tydata.js', './src/portfolio/tamagotchi.11tydata.cjs', './src/portfolio/tamagotchi.11tydata.mjs', './src/portfolio/tamagotchi.11tydata.json', './src/portfolio/tamagotchi.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/tamagotchi.md adding to template map. +1ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +0ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/vinyl.md'): [ './src/portfolio/vinyl.11tydata.js', './src/portfolio/vinyl.11tydata.cjs', './src/portfolio/vinyl.11tydata.mjs', './src/portfolio/vinyl.11tydata.json', './src/portfolio/vinyl.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs', './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/vinyl.md adding to template map. +0ms
  Eleventy:TemplateData Using [ '.11tydata', '' ] suffixes to find data files. +1ms
  Eleventy:TemplateData getLocalDataPaths('./src/portfolio/vorpal-blade.md'): [ './src/portfolio/vorpal-blade.11tydata.js', './src/portfolio/vorpal-blade.11tydata.cjs', './src/portfolio/vorpal-blade.11tydata.mjs', './src/portfolio/vorpal-blade.11tydata.json', './src/portfolio/vorpal-blade.json', './src/portfolio/portfolio.11tydata.js', './src/portfolio/portfolio.11tydata.cjs', './src/portfolio/portfolio.11tydata.mjs', './src/portfolio/portfolio.11tydata.json', './src/portfolio/portfolio.json', './src/src.11tydata.js', './src/src.11tydata.cjs',
 './src/src.11tydata.mjs', './src/src.11tydata.json', './src/src.json' ] +0ms
  Eleventy:TemplateWriter ./src/portfolio/vorpal-blade.md adding to template map. +1ms
  Eleventy:TemplatePassthrough Searching for: './src/js' +20ms
  Eleventy:FastGlobManager Glob search ('passthrough') searching for: './src/js' +23ms
  Eleventy:TemplatePassthroughManager Skipped copying './src/js' (emulated passthrough copy) +22ms
  Eleventy:FastGlobManager Glob search ('global-data') searching for: [ './src/_data/**/*.{json,mjs,cjs,js}' ] +1ms
  Eleventy:TemplateData Found global data file ./src/_data/site.js and adding as: site +7ms
  Eleventy:Template getMappedDate: using a date in the data for './src/about.md' of 2021-03-26T22:04:19.000Z +13s
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-26T22:04:19.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/cookies.md' of 2017-07-26T21:36:29.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2017-07-26T21:36:29.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/disclaimer.md' of 2018-07-03T14:54:33.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2018-07-03T14:54:33.000Z +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/feed.njk' of 2021-04-08T15:14:44.943Z (from 1617894884943.266) +1ms
  Eleventy:Template getMappedDate: using a date in the data for './src/privacy.md' of 2017-07-26T14:32:48.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2017-07-26T14:32:48.000Z +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/sitemap.njk' of 2021-04-08T15:17:47.153Z (from 1617895067153.001) +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/blog/2021-07-06-discord-bot-part-1.md' of 2021-07-06T15:50:23.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-07-06T15:50:23.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/axe-the-shining.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/brush-axe.md' of 2021-03-22T06:23:47.000Z +1ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/chess-set.md' of 2021-04-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-04-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/excalibur.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/hardedge.md' of 2021-05-05T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-05-05T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/harley-quinn-bat.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +1ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/l4d-adrenaline.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/l4d-pipebomb.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/mad-can.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/master-sword.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +1ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/modular-katanas.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/nuka-cola-cap.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/oil-spray-can.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/pipe-axe.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +1ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/skyrim-sword.md' of 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/rickenbacker.md' of 2016-04-21T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2016-04-21T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/tamagotchi.md' of 2021-05-05T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-05-05T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/vinyl.md' of 2021-04-20T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-04-20T06:23:47.000Z +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/portfolio/vorpal-blade.md' of 2021-03-22T06:23:47.000Z +1ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-03-22T06:23:47.000Z +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/403.md' of 2021-04-09T12:27:50.679Z (from 1617971270679.9146) +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/404.md' of 2021-03-29T14:49:23.612Z (from 1617029363612.594) +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/blog.md' of 2021-03-25T17:10:44.443Z (from 1616692244443.883) +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/index.md' of 2021-03-19T15:04:47.584Z (from 1616166287584.9316) +0ms
  Eleventy:Template Template date: using file’s 'birthtimeMs' for './src/portfolio.md' of 2021-03-24T14:17:03.928Z (from 1616595423928.3223) +0ms
  Eleventy:Template getMappedDate: using a date in the data for './src/blog/2021-04-20-toolbag-tips.md' of 2021-04-20T06:23:47.000Z +2ms
  Eleventy:Template getMappedDate: YAML parsed it: 2021-04-20T06:23:47.000Z +0ms
  Eleventy:TemplateMap Caching collections objects. +15s
  Eleventy:Template Rendering permalink for './src/feed.njk': feed.xml becomes 'feed.xml' +1ms
  Eleventy:Template Rendering permalink for './src/sitemap.njk': /sitemap.xml becomes '/sitemap.xml' +1ms
  Eleventy:Template Rendering permalink for './src/403.md': 403.html becomes '403.html' +0ms
  Eleventy:Template Rendering permalink for './src/404.md': 404.html becomes '404.html' +0ms
  Eleventy:TemplateMap Collection: collections.all size: 28 +3ms
  Eleventy:TemplateMap Collection: collections.post size: 2 +0ms
  Eleventy:TemplateMap Collection: collections.portfolio size: 19 +0ms
  Eleventy:TemplateMap Collection: collections.all size: 28 +0ms
[11ty] Unhandled rejection in promise:
[11ty] Tried to use templateContent too early on ./src/blog/2021-04-20-toolbag-tips.md (via TemplateContentPrematureUseError)
  Eleventy:EleventyErrorHandler (error stack): TemplateContentPrematureUseError: Tried to use templateContent too early on ./src/blog/2021-04-20-toolbag-tips.md
  Eleventy:EleventyErrorHandler     at Object.get [as templateContent] (file:///D:/Dev/Yogensia/yogensia-dot-com/node_modules/@11ty/eleventy/src/Template.js:622:14)
  Eleventy:EleventyErrorHandler     at Object.memberLookup (D:\Dev\Yogensia\yogensia-dot-com\node_modules\nunjucks\src\runtime.js:201:17)
  Eleventy:EleventyErrorHandler     at eval (eval at _compile (D:\Dev\Yogensia\yogensia-dot-com\node_modules\nunjucks\src\environment.js:527:18), <anonymous>:64:59)
  Eleventy:EleventyErrorHandler     at iterCallback (D:\Dev\Yogensia\yogensia-dot-com\node_modules\nunjucks\src\runtime.js:236:11)
  Eleventy:EleventyErrorHandler     at next (D:\Dev\Yogensia\yogensia-dot-com\node_modules\nunjucks\src\lib.js:258:7)
  Eleventy:EleventyErrorHandler     at eval (eval at _compile (D:\Dev\Yogensia\yogensia-dot-com\node_modules\nunjucks\src\environment.js:527:18), <anonymous>:68:1)
  Eleventy:EleventyErrorHandler     at D:\Dev\Yogensia\yogensia-dot-com\node_modules\@11ty\eleventy-plugin-rss\.eleventy.js:29:7 +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\.htaccess' +51ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\site.webmanifest' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\humans.txt' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\apple-touch-icon.png' +2ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\android-chrome-192x192.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\android-chrome-512x512.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\browserconfig.xml' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\favicon-32x32.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\favicon-16x16.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\maskable-512x512.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\safari-pinned-tab.svg' +1ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\avatar.jpg' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\favicon.ico' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\icons\\mstile-150x150.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\intro.jpg' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\intro.webp' +1ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\logo.webp' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\yogensia-cover.jpg' +1ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\logo.png' +0ms
  Eleventy:TemplatePassthrough Copying individual file 'src\\assets\\images\\yogensia-cover.webp' +0ms
  Eleventy:TemplatePassthroughManager Copied './src/.htaccess' (1 files) +59ms
  Eleventy:TemplatePassthroughManager Copied './src/site.webmanifest' (1 files) +1ms
  Eleventy:TemplatePassthroughManager Copied './src/humans.txt' (1 files) +1ms
  Eleventy:TemplatePassthroughManager Copied './src/assets/icons' (10 files) +2ms
  Eleventy:TemplatePassthroughManager Copied './src/assets/images' (7 files) +1ms
  Eleventy:TemplatePassthroughManager TemplatePassthrough copy finished. Current count: 20 +0ms
chriskirknielsen commented 2 months ago

I ran into this issue a few times myself, without any clear idea of how to isolate and replicate the issue. The suggestion of eleventyImport from Juhis seems to have fixed it for me so far (adjust with your own tags!):

---
eleventyImport:
    collections: ["posts"]
---

I guess it makes sense if it's trying to generate the RSS feed before the posts it's showing are built!

sphars commented 2 months ago

I'm also seeing the same Tried to use templateContent too early on <markdown file> (via TemplateContentPrematureUseError)error, when saving markdown files when running eleventy --serve. I wanted to try out using the new transforms feature in the @11ty/eleventy-img plugin so I don't have to do anything fancy to get responsive images in Markdown to work (sidenote: after some configuration, it works great for me)

From the logs, I'm also seeing a reference to the RSS plugin:

[11ty] Unhandled rejection in promise: (more in DEBUG output)
[11ty] Tried to use templateContent too early on ./src/posts/2024/pc-build-2024.md (via TemplateContentPrematureUseError)
[11ty] 
[11ty] Original error stack trace: TemplateContentPrematureUseError: Tried to use templateContent too early on ./src/posts/2024/pc-build-2024.md
[11ty]     at Object.get [as templateContent] (file:///home/spencer/workspace/personal/spencerharston.com/node_modules/@11ty/eleventy/src/Template.js:622:14)
[11ty]     at Object.memberLookup (/home/spencer/workspace/personal/spencerharston.com/node_modules/nunjucks/src/runtime.js:201:17)
[11ty]     at eval (eval at _compile (/home/spencer/workspace/personal/spencerharston.com/node_modules/nunjucks/src/environment.js:527:18), <anonymous>:64:59)
[11ty]     at iterCallback (/home/spencer/workspace/personal/spencerharston.com/node_modules/nunjucks/src/runtime.js:236:11)
[11ty]     at next (/home/spencer/workspace/personal/spencerharston.com/node_modules/nunjucks/src/lib.js:258:7)
[11ty]     at eval (eval at _compile (/home/spencer/workspace/personal/spencerharston.com/node_modules/nunjucks/src/environment.js:527:18), <anonymous>:68:1)
[11ty]     at /home/spencer/workspace/personal/spencerharston.com/node_modules/@11ty/eleventy-plugin-rss/.eleventy.js:29:7
[11ty]     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

975 and #1615 (which adds the eleventyImport config, docs) mention this issue. I've tried adding the eleventyImport data to some of my templates to no avail, so I must be doing something non-standard with my setup.

To avoid the above error, I now run eleventy with the --incremental flag. Not 100% perfect (can't get the eleventyImport options to work so a restart is needed in some cases to see updates), but it no longer throws an error when editing a .md file.

You can reproduce it using my repo and running with eleventy --serve

Packages:

ttntm commented 1 month ago

This issue popped up for me today, after almost 3 days without any issues on 3.0.0-alpha.10.

Nothing other than removing htmlToAbsoluteUrls(absolutePostUrl) helped.

Interestingly, I still got the function call in one of my partial feed's *.njks and it's not causing any issues.

zachleat commented 1 month ago

I think https://github.com/11ty/eleventy-plugin-rss/issues/47 might be the best way forward here (supplying eleventyImport directly there too) but I welcome additional MVPs that reproduce this so I can help fix!

ttntm commented 1 month ago

@zachleat tried to reproduce it, but failed - everything worked.

I then proceeded to re-enable the commented htmlToAbsoluteUrls(absolutePostUrl) in my website's repo (1 and 2), and - lo and behold - it also worked there (again).

TBH, I'm quite confused now, because nothing's changed on a configuration level since my last comment - same machine, no system updates or other environment changes...

Anyway, the minimal reproduction repo can be found at, maybe someone else can manage to make the issue reproducible: https://github.com/ttntm/11ty_3136

zachleat commented 1 month ago

I’ve updated the RSS docs with the new RSS Plugin v2.0.0 release. The virtual template approach includes eleventyExcludeFromCollections and eleventyImport techniques to solve this issue: https://www.11ty.dev/docs/plugins/rss/#virtual-template

Regardless, you can apply those to your templates too, here’s what it looks like: https://github.com/11ty/eleventy-plugin-rss/blob/e1cccf6de0c82a1cf1ad4c8ac015c6fa1dc25c23/src/virtualTemplate.js#L139-L142

jamesdoc commented 4 weeks ago

Thanks @zachleat - Installed without an issue (aside from removed filters, but the error message was super clear, so thanks again), feels good so far!

zachleat commented 2 weeks ago

Related: added some much needed improvements to this one while working on #3324 and #3077 (see 65de3af07c25418a984ee77178736c86d920d7e3) that will ship with 3.0.0-alpha.14