softonic / axios-retry

Axios plugin that intercepts failed requests and retries them whenever possible
Other
1.89k stars 167 forks source link

fix: ESM default import `This expression is not callable` #241

Closed yutak23 closed 1 year ago

yutak23 commented 1 year ago

This ought to fix https://github.com/softonic/axios-retry/issues/228

ESM seems incompatible in CommonJS PJs with default export (see https://github.com/microsoft/TypeScript/issues/52086). I think there are two solutions to make TypeScript types compatible with both CommonJS and ESM.

  1. Create a new type definition for ESM reference: https://www.typescriptlang.org/docs/handbook/esm-node.html#packagejson-exports-imports-and-self-referencing
  2. Change type definitions to support both CommonJS and ESM

Case 1, I would make a copy of the current index.d.ts, rename the file to index.d.mts, and change package.json as follows.

  "exports": {
    ".": {
      "import": {
        "types": "./index.d.mts",
        "default": "./lib/esm/index.js"
      },
      "require": {
        "types": "./index.d.ts",
        "default": "./index.js"
      }
    },
    "./package.json": "./package.json"
  }

However, I think this is redundant and low-maintainability because we have to manage two type definitions, so I tried to modify it in the second way(Case 2).

Explanation of this modification

For this change, I refer to the following

yutak23 commented 1 year ago

@mindhells

To avoid increased maintenance costs I have changed the content of the PR from https://github.com/softonic/axios-retry/pull/230.

I would appreciate it if you could review and respond to the content of the PR so that it can be made available to ES Module projects.

mindhells commented 1 year ago

LGTM and don't expect any impact on CommonJS either, but I'll publish as a new minor just in case.

mindhells commented 1 year ago

Published as 3.7.0 Thanks a lot @yutak23