Skip to content

feat(json): add Rollup 5 compatibility - #2017

Open
TrickyPi wants to merge 4 commits into
rollup:masterfrom
TrickyPi:feat/rollup-5/json
Open

TrickyPi wants to merge 4 commits into
rollup:masterfrom
TrickyPi:feat/rollup-5/json

Conversation

@TrickyPi

@TrickyPi TrickyPi commented Jul 26, 2026 •

Copy link
Copy Markdown
Member

Rollup Plugin Name: json

This PR contains:

  • bugfix
  • feature
  • refactor
  • documentation
  • other

Are tests included?

  • yes (bugfixes and features will not be merged without tests)
  • no

Breaking Changes?

  • yes (breaking changes will not be merged unless absolutely necessary)
  • no

If yes, then include "BREAKING CHANGES:" in the first commit message body, followed by a description of what is breaking.

List any relevant issue numbers:
related to rollup/rollup#6266

Description

Rollup 5 will support importing the same module with different import attributes. As a result, the id passed as the second argument to the transform hook may include encoded import attributes, causing the existing id.slice(-5) !== '.json' check to incorrectly skip JSON modules.
This PR uses transformOptions.rawId for the JSON extension check when it is available and falls back to id for compatibility with earlier Rollup versions.

@TrickyPi
TrickyPi requested a review from shellscape as a code owner July 26, 2026 12:38
@TrickyPi TrickyPi changed the title feat: add Rollup 5 compatibility feat(json): add Rollup 5 compatibility Jul 26, 2026
@shellscape

Copy link
Copy Markdown
Collaborator

@greptile review

@greptile-apps

greptile-apps Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no blocking issues remain.

Reviews (4) · Last reviewed commit: "Merge branch 'master' into feat/rollup-5..." · Reviewed by Greptile

Comment thread packages/json/src/index.js Resolved

@lukastaegert lukastaegert left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thank you for taking care! I had a look at the changes and the fix looks good, however it would be nice to extend the testing a little more.
The pre-release version of rollup@5 is now basically complete, so we could switch the json plugin to directly test with this version. Maybe you can do it like #2037, #2038, #2039 by defining a catalog version? Then all other update PRs can also use that.

Comment on lines +180 to +186
test('excludes json files with import attributes', async () => {
expect(
json({ exclude: /\.json$/ }).transform(`{"a":"b"}`, idWithJsonAttributes, {
rawId: 'input.json'
})
).toBeNull();
});

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test currently does not trigger out fix because it filters out the file. What about this

Suggested change
test('excludes json files with import attributes', async () => {
expect(
json({ exclude: /\.json$/ }).transform(`{"a":"b"}`, idWithJsonAttributes, {
rawId: 'input.json'
})
).toBeNull();
});
test('applies exclude patterns to the raw id instead of the encoded id', async () => {
expect(
json({ exclude: /attributes/ }).transform(`{"a":"b"}`, idWithJsonAttributes, {
rawId: 'input.json'
}).code
).toEqual('export var a = "b";\nexport default {\n\ta: a\n};\n');
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants