build(react): migrate to ESM with explicit file extensions in imports #5857
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📝 Description
Migrate
@heroui/reactto ESM by adding explicit.jsextensions to all relative imports and updating the TS config.This fixes type resolution for ESM consumers of
@heroui/react@alpha.⛳️ Current behavior (updates)
Currently, while
packages/react/package.jsonspecifies"type": "module", the source code and build process are not fully ESM-compliant:import/exportstatements omit file extensions infromclauses (e.g.,from "./button")"moduleResolution": "Bundler", which doesn't enforce extension requirements.d.tsfiles also haveimport/exportstatements without file extensions infromclausesThis causes type resolution failures when importing
@heroui/reactfrom ESM projects.🚀 New behavior
.jsextensions (e.g.,from "./button.js")index.jsfiles (e.g.,from "../../utils/index.js")"module": "NodeNext"and"moduleResolution": "NodeNext".d.tsfiles include.jsextensions for proper type resolutionVerification
pnpm buildsucceedspnpm lintpassespnpm typecheckpasses💣 Is this a breaking change (Yes/No):
No
📝 Additional Information
Storybook Files Not Updated
The
*.stories.tsxfiles still use extensionless imports.I intentionally excluded them from this PR because:
If the team prefers, I'm happy to include Storybook file updates in this PR or a follow-up.