Skip to content

fix(transform): support import.meta.resolve in CJS - #837

Open
lprnmns wants to merge 2 commits into
privatenumber:masterfrom
lprnmns:fix/import-meta-resolve-cjs
Open

lprnmns wants to merge 2 commits into
privatenumber:masterfrom
lprnmns:fix/import-meta-resolve-cjs

Conversation

@lprnmns

@lprnmns lprnmns commented Aug 31, 2026

Copy link
Copy Markdown

Problem

When an ESM-syntax JavaScript or TypeScript module is transformed to CommonJS by tsx, its synthesized import.meta object has no resolve function. A CJS entry that requires such a module therefore gets TypeError: define_import_meta_default.resolve is not a function. This reproduces the remaining gap described in #744.

Fix

Keep the existing synthesized metadata values and add a synchronous import.meta.resolve-compatible shim for CJS-transformed modules. Relative, absolute, URL, builtin, package-import, query, and conditional-export cases are covered by the URL path and Node resolver branches. A per-file collision-safe helper keeps user module bindings from shadowing the synthesized object. Native ESM transforms are unchanged.

Tests

Compatibility

The change is limited to CJS transforms that contain import.meta. It does not add dependencies or change the lockfile. Bare package resolution uses Node's existing resolver with node/import conditions; the broader test suite passed on Node 24.15.0.

Related issue

Fixes #744

@lprnmns
lprnmns marked this pull request as ready for review August 31, 2026 14:07

This branch has not been deployed

No deployments
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.

ESM required from CJS is missing import.meta props (works fine in Node 20)

1 participant