[REQ] New typescript-generator option to set file extension for ECMAScript module resolution
Created by: danmichaelo
Is your feature request related to a problem? Please describe.
I'm trying to generate a pure ESM package (type: "module"
) using ESM in Node.js, but the Typescript generators generate relative imports without file extensions (e.g. import * as runtime from "../runtime"
) while Node.js requires file extensions for ESM imports (import * as runtime from "../runtime.js"
)
Describe the solution you'd like
- The
typescript
generator already has an internal optionextensionForDeno
, which is set to.ts
whenplatform
isdeno
. I suggest renamingextensionForDeno
toimportFileExtension
and making it a public option. - The other typescript generators does not have such an option, so it may have to be added to those, if needed
I can try putting together a PR for this, but would like to gather some feedback about whether it's a good idea first.
Describe alternatives you've considered
-
It's possible to generate a valid ESM package by settingmoduleResolution: "node"
(CommonJS for internal module resolution) andmodule: "ESNext"
, but this will fail if we add additional dependencies to the generated package that aren't CommonJS compatible. -
Instead of adding a new option
importFileExtension
, derive the file extension from some other option:- From
platform
? If we add a new value likenode-esm
. The problem is that there are several different extensions that can potentially be used (.js
,.mjs
,.tjs
etc.) and users may have different preferences. - Perhaps a new option
moduleResolution
with valuesnode
andnode16
inspired by TypeScript?
- From