Skip to content

Writing to frozen/reserved data fails silently (should error in strict mode/ESM) #3470

Open
@kleinfreund

Description

@kleinfreund

Operating system

Windows 11, macOS

Eleventy

3.0.0

Describe the bug

Since upgrading to Eleventy 3.0.0, eleventy --serve is crashing after picking up the first changes to the watched files (i.e. not immediately upon running eleventy --serve).

Error:

[11ty] Problem writing Eleventy templates:
[11ty] Cannot assign to read only property 'source' of object '#<Object>' (via TypeError)
[11ty]
[11ty] Original error stack trace: TypeError: Cannot assign to read only property 'source' of object '#<Object>'
[11ty]     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:25)
[11ty]     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:27)
[11ty]     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:27)
[11ty]     at Merge (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:75:12)
[11ty]     at #getGlobalData (file:///C:/Users/phil/dev/kleinfreund.de/node_modules/@11ty/eleventy/src/Data/TemplateData.js:364:26)
[11ty] Wrote 0 files in 0.03 seconds (v3.0.0)
[11ty] Watching…

Turning on debug mode for Eleventy*, the source of the issue points to global data files:

  Eleventy:FastGlobManager Glob search ('global-data') searching for: [ './src/_data/**/*.{json,mjs,cjs,js}' ] +39ms
  Eleventy:TemplateData Found global data file ./src/_data/metadata.json and adding as: metadata +10ms
  Eleventy:TemplateData Found global data file ./src/_data/eleventy.js and adding as: eleventy +0ms
[11ty] Problem writing Eleventy templates:
  Eleventy:EleventyErrorHandler Full error object: "TypeError: Cannot assign to read only property 'source' of object '#<Object>'\n" + '    at getMergedItem (C:\\Users\\phil\\dev\\kleinfreund.de\\node_modules\\@11ty\\eleventy-utils\\src\\Merge.js:38:25)\n' + '    at getMergedItem (C:\\Users\\phil\\dev\\kleinfreund.de\\node_modules\\@11ty\\eleventy-utils\\src\\Merge.js:38:27)\n' + '    at getMergedItem (C:\\Users\\phil\\dev\\kleinfreund.de\\node_modules\\@11ty\\eleventy-utils\\src\\Merge.js:38:27)\n' + '    at Merge (C:\\Users\\phil\\dev\\kleinfreund.de\\node_modules\\@11ty\\eleventy-utils\\src\\Merge.js:75:12)\n' + '    at #getGlobalData (file:///C:/Users/phil/dev/kleinfreund.de/node_modules/@11ty/eleventy/src/Data/TemplateData.js:364:26)' +0ms
[11ty] Cannot assign to read only property 'source' of object '#<Object>' (via TypeError)
  Eleventy:EleventyErrorHandler (error stack): TypeError: Cannot assign to read only property 'source' of object '#<Object>'
  Eleventy:EleventyErrorHandler     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:25)
  Eleventy:EleventyErrorHandler     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:27)
  Eleventy:EleventyErrorHandler     at getMergedItem (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:38:27)
  Eleventy:EleventyErrorHandler     at Merge (C:\Users\phil\dev\kleinfreund.de\node_modules\@11ty\eleventy-utils\src\Merge.js:75:12)
  Eleventy:EleventyErrorHandler     at #getGlobalData (file:///C:/Users/phil/dev/kleinfreund.de/node_modules/@11ty/eleventy/src/Data/TemplateData.js:364:26) +1ms

Deleting src/_data/eleventy.js resolves the issue.

The contents of that file are:

export default {
  isProduction: process.env.NODE_ENV === 'production',
};

The contents don't seem to matter (e.g. removing the access to process doesn't resolve the issue).

Reproduction steps

  1. Set up the reproduction project.

    git clone https://github.com/kleinfreund/kleinfreund.de.git
    cd kleinfreund.de
    git reset --hard https://github.com/kleinfreund/kleinfreund.de/commit/79044f8f1eed33ca7c2aff24c97d4cfbb7688888  # The commit in which I upgraded to Eleventy 3.0.0
    npm install
  2. Run npm start and make a file change in a watched file (e.g. src/_includes/layouts/base.liquid).

  3. Observe the watcher output for result 1. Stop the npm start script.

  4. For working behavior comparison: Delete src/_data/eleventy.js.

  5. Repeat step 2 and observe the watcher output for result 2. Stop the npm start script.

  6. For working behavior comparison: Run:

    git reset --hard https://github.com/kleinfreund/kleinfreund.de/commit/a6b5e66f03f651050701e4935d53cc291ad56a3b  # The commit right before I upgraded to Eleventy 3.0.0
    npm install
  7. Repeat step 2 and observe the watcher output for result 3. Stop the npm start script.

  8. Delete the reproduction project.

    cd ..
    rm -rf kleinfreund.de

Expected behavior

Result 1, 2, and 3 show no errors after the file change.

The actual behavior, however, shows an error in result 1. Result 2 and 3 show the working behavior.

Reproduction URL

https://github.com/kleinfreund/kleinfreund.de

Screenshots

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug: liteDebatable whether or not this is a bug. I mean, it’s not great but it’s not really broken either.error-messagingfeature: 🏔 data cascadeIssues related to the Data Cascade feature

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions