[PR #614] [MERGED] fix: add .js extensions for NodeNext module resolution #1438

Closed
opened 2026-03-14 09:36:50 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/anomalyco/opentui/pull/614
Author: @schickling
Created: 2/1/2026
Status: Merged
Merged: 3/12/2026
Merged by: @kommander

Base: mainHead: fix/dts-extensions


📝 Commits (1)

  • 4e5c678 fix: add .js extensions to relative imports for NodeNext compatibility

📊 Changes

268 files changed (+1043 additions, -1016 deletions)

View changed files

📝 packages/core/dev/keypress-debug-renderer.ts (+4 -4)
📝 packages/core/dev/print-env-vars.ts (+1 -1)
📝 packages/core/dev/thai-debug-test.ts (+2 -2)
📝 packages/core/src/3d.ts (+1 -1)
📝 packages/core/src/3d/SpriteResourceManager.ts (+1 -1)
📝 packages/core/src/3d/SpriteUtils.ts (+1 -1)
📝 packages/core/src/3d/ThreeRenderable.ts (+6 -6)
📝 packages/core/src/3d/WGPURenderer.ts (+4 -4)
📝 packages/core/src/3d/animation/ExplodingSpriteEffect.ts (+2 -2)
📝 packages/core/src/3d/animation/PhysicsExplodingSpriteEffect.ts (+3 -3)
📝 packages/core/src/3d/animation/SpriteAnimator.ts (+1 -1)
📝 packages/core/src/3d/animation/SpriteParticleGenerator.ts (+1 -1)
📝 packages/core/src/3d/canvas.ts (+3 -3)
📝 packages/core/src/3d/index.ts (+12 -12)
📝 packages/core/src/3d/physics/PlanckPhysicsAdapter.ts (+1 -1)
📝 packages/core/src/3d/physics/RapierPhysicsAdapter.ts (+1 -1)
📝 packages/core/src/Renderable.ts (+9 -9)
📝 packages/core/src/animation/Timeline.test.ts (+1 -1)
📝 packages/core/src/animation/Timeline.ts (+1 -1)
📝 packages/core/src/benchmark/renderer-benchmark.ts (+3 -3)

...and 80 more files

📄 Description

Summary

This PR fixes TypeScript module resolution for consumers using moduleResolution: "NodeNext".

  • Add .js extensions to all relative imports/exports in TypeScript source files
  • Convert directory imports like ./lib to ./lib/index.js
  • Convert from "." imports to from "./index.js"

Problem

When TypeScript processes the package with moduleResolution: "NodeNext", it cannot resolve re-exports like export * from "./renderer" because NodeNext requires explicit file extensions. This causes TypeScript to report errors like:

Module '"@opentui/core"' has no exported member 'BoxRenderable'.
Module '"@opentui/react"' has no exported member 'createRoot'.

Solution

Add explicit .js extensions to all relative imports/exports. TypeScript understands that ./renderer.js refers to ./renderer.ts during compilation, and the generated .d.ts files will have the correct extensions for NodeNext resolution.

Test plan

Fixes #504


Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/anomalyco/opentui/pull/614 **Author:** [@schickling](https://github.com/schickling) **Created:** 2/1/2026 **Status:** ✅ Merged **Merged:** 3/12/2026 **Merged by:** [@kommander](https://github.com/kommander) **Base:** `main` ← **Head:** `fix/dts-extensions` --- ### 📝 Commits (1) - [`4e5c678`](https://github.com/anomalyco/opentui/commit/4e5c6783bcdcf60cfbffb625a11ac27fdd99c948) fix: add .js extensions to relative imports for NodeNext compatibility ### 📊 Changes **268 files changed** (+1043 additions, -1016 deletions) <details> <summary>View changed files</summary> 📝 `packages/core/dev/keypress-debug-renderer.ts` (+4 -4) 📝 `packages/core/dev/print-env-vars.ts` (+1 -1) 📝 `packages/core/dev/thai-debug-test.ts` (+2 -2) 📝 `packages/core/src/3d.ts` (+1 -1) 📝 `packages/core/src/3d/SpriteResourceManager.ts` (+1 -1) 📝 `packages/core/src/3d/SpriteUtils.ts` (+1 -1) 📝 `packages/core/src/3d/ThreeRenderable.ts` (+6 -6) 📝 `packages/core/src/3d/WGPURenderer.ts` (+4 -4) 📝 `packages/core/src/3d/animation/ExplodingSpriteEffect.ts` (+2 -2) 📝 `packages/core/src/3d/animation/PhysicsExplodingSpriteEffect.ts` (+3 -3) 📝 `packages/core/src/3d/animation/SpriteAnimator.ts` (+1 -1) 📝 `packages/core/src/3d/animation/SpriteParticleGenerator.ts` (+1 -1) 📝 `packages/core/src/3d/canvas.ts` (+3 -3) 📝 `packages/core/src/3d/index.ts` (+12 -12) 📝 `packages/core/src/3d/physics/PlanckPhysicsAdapter.ts` (+1 -1) 📝 `packages/core/src/3d/physics/RapierPhysicsAdapter.ts` (+1 -1) 📝 `packages/core/src/Renderable.ts` (+9 -9) 📝 `packages/core/src/animation/Timeline.test.ts` (+1 -1) 📝 `packages/core/src/animation/Timeline.ts` (+1 -1) 📝 `packages/core/src/benchmark/renderer-benchmark.ts` (+3 -3) _...and 80 more files_ </details> ### 📄 Description ## Summary This PR fixes TypeScript module resolution for consumers using `moduleResolution: "NodeNext"`. - Add `.js` extensions to all relative imports/exports in TypeScript source files - Convert directory imports like `./lib` to `./lib/index.js` - Convert `from "."` imports to `from "./index.js"` ## Problem When TypeScript processes the package with `moduleResolution: "NodeNext"`, it cannot resolve re-exports like `export * from "./renderer"` because NodeNext requires explicit file extensions. This causes TypeScript to report errors like: ``` Module '"@opentui/core"' has no exported member 'BoxRenderable'. Module '"@opentui/react"' has no exported member 'createRoot'. ``` ## Solution Add explicit `.js` extensions to all relative imports/exports. TypeScript understands that `./renderer.js` refers to `./renderer.ts` during compilation, and the generated `.d.ts` files will have the correct extensions for NodeNext resolution. ## Test plan - [x] Verified the fix with the reproduction at https://github.com/schickling-repros/opentui-nodenext-issue - [x] TypeScript trace resolution shows all relative imports are successfully resolved - [x] No new TypeScript errors introduced (existing errors in examples/tests remain) Fixes #504 --- Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-03-14 09:36:50 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/opentui#1438
No description provided.