Skip to content

rewriteImportExtensions does not rewrite dynamic import() expressions #20120

@sverrejoh

Description

@sverrejoh

The rewriteImportExtensions option rewrites .ts/.mts/.cts/.tsx extensions in static import/export declarations, but does not handle dynamic import() expressions.

TypeScript's rewriteRelativeImportExtensions compiler option rewrites both static and dynamic imports (see esnextAnd2015.tsvisitImportOrRequireCall). OXC's implementation only visits ImportDeclaration, ExportNamedDeclaration, and ExportAllDeclaration, but not ImportExpression.

Input:

import "./a.ts";
const m = import("./a.ts");

Expected output (with rewriteImportExtensions: "rewrite"):

import "./a.js";
const m = import("./a.js");

Actual output:

import "./a.js";
const m = import("./a.ts"); // not rewritten

Impact: This breaks downstream consumers when packages use rewriteRelativeImportExtensions with OXC transpilation — emitted .js files still reference .ts extensions in dynamic imports, causing module resolution failures at runtime.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-transformerArea - Transformer / Transpiler

    Type

    No type

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions