Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: generate index.d.mts and index.d.cts #273

Merged
merged 2 commits into from
Jul 18, 2023
Merged

Conversation

xiaoxiangmoe
Copy link
Contributor

close #238

src/builder/rollup.ts Show resolved Hide resolved
src/builder/rollup.ts Show resolved Hide resolved
src/auto.ts Outdated Show resolved Hide resolved
@pi0 pi0 requested review from pi0 and danielroe June 26, 2023 09:32
@xiaoxiangmoe xiaoxiangmoe requested a review from lsdsjy June 30, 2023 03:49
@pi0
Copy link
Member

pi0 commented Jun 30, 2023

/cc @danielroe

Copy link
Member

@antfu antfu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Look good to me. But should we generate a fallback of .d.ts for the libraries that still rely on it to avoid breakage?

src/builder/rollup.ts Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
package.json Show resolved Hide resolved
@xiaoxiangmoe
Copy link
Contributor Author

friendly ping @pi0 @danielroe

sentience added a commit to cultureamp/js-lingui that referenced this pull request Aug 24, 2023
The recent lingui#1742 explicitly exports TypeScript type definitions
from package.json:

```json
  "exports": {
     ".": {
       "require": {
         "types": "./dist/index.d.ts",
         "default": "./dist/index.cjs"
       },
       "import": {
         "types": "./dist/index.d.ts",
         "default": "./dist/index.mjs"
       }
     },
     "./package.json": "./package.json"
   },
```

Unfortunately, [as documented in the TypeScript Handbook][handbook],
CommonJS (`require`) and ESM (`import`) module versions
cannot share the same index.d.ts file:

> It’s important to note that the CommonJS entrypoint and the ES module entrypoint each needs its own declaration file, even if the contents are the same between them. Every declaration file is interpreted either as a CommonJS module or as an ES module, based on its file extension and the "type" field of the package.json, and this detected module kind must match the module kind that Node will detect for the corresponding JavaScript file for type checking to be correct. Attempting to use a single .d.ts file to type both an ES module entrypoint and a CommonJS entrypoint will cause TypeScript to think only one of those entrypoints exists, causing compiler errors for users of the package.

I am seeing the compiler errors that this documentation warns of.

This issue appears to have been recently fixed in
the unbuild build tool that js-lingui depends upon
(see issue unjs/unbuild#238
and fix unjs/unbuild#273),
and that fix was released in [unbuild 2.0.0-rc0].

This fix for detect-locale, therefore, is to upgrade to unbuild 2.0.0,
and use the separate .d.cts and .d.mts type declaration files
it outputs.

**Note:** This moves detect-locale onto a newer major version of unbuild
than the other packages in this monorepo.
It may be preferred to upgrade them all,
but I am not familiar enough with the other packages to do this quickly.

[handbook]: https://www.typescriptlang.org/docs/handbook/esm-node.html#packagejson-exports-imports-and-self-referencing
[unbuild 2.0.0-rc0]: https://github.com/unjs/unbuild/blob/main/CHANGELOG.md#v200-rc0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Generate index.d.mts and index.d.cts
5 participants