[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
typescriptgenerator already has an internal optionextensionForDeno, which is set to.tswhenplatformisdeno. I suggest renamingextensionForDenotoimportFileExtensionand 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,.tjsetc.) and users may have different preferences. - Perhaps a new option
moduleResolutionwith valuesnodeandnode16inspired by TypeScript?
- From