Skip to content

[REQ] New typescript-generator option to set file extension for ECMAScript module resolution #14333

@danmichaelo

Description

@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 option extensionForDeno, which is set to .ts when platform is deno. I suggest renaming extensionForDeno to importFileExtension 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 setting moduleResolution: "node" (CommonJS for internal module resolution) and module: "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 like node-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 values node and node16 inspired by TypeScript?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions