egoist / tsup

The simplest and fastest way to bundle your TypeScript libraries.
https://tsup.egoist.dev
MIT License
8.48k stars 209 forks source link

`experimentalDts` generates broken type declarations. #1050

Open ChristophP opened 7 months ago

ChristophP commented 7 months ago

Problem

When using experimentalDts in a with components in a subfolder the generated output points to files that don't exist.

Version info

tsup 8.0.1 @microsoft/api-extractor 7.38.3

Example

// input files
./src
  components/
    ComponentA/
      index.tsx

// tsup config
export default defineConfig({
      target: 'esnext',
      platform: 'neutral',
      format: 'esm',
      experimentalDts: true,
      entry: [ "./src/components/ComponentA.tsx" ]
});

// output files (Note how the components/ folder does not exist in dist)
./dist
  ComponentA/
      index.tsx
  _tsup-dts-rollup.d.ts

Now when looking into the dist/_tsup-dts-rollup.d.ts file it contains references to ./components/ComponentA resulting in broken typings.

Proposed fix

The generated paths in dist/_tsup-dts-rollup.d.ts somehow reference nonexisting files when the entry code is in a subdirectory, so the fix would probably have to check the actual location of the output file and reference that instead.

Other feedback

@ocavue I originally tried out the experimentalDts option because I am building a number of entries (20+) and the dts build is very slow (~30 seconds). With the new experimentalDts option this time went down to ~7 seconds. Thanks for that great speed improvement. So it would be very nice to use if the generated paths were correct.

Upvote & Fund

Fund with Polar

ocavue commented 7 months ago

I cannot reproduce "the components/ folder does not exist" issue with the following repo. Could you provide me a minimal reproduction so that I can better debug it?

https://stackblitz.com/github/issueset/tsup-1050

The output files are shown below. The fact that index.js and index.d.ts are not in the same folder looks like an issue, but the declaration file itself seems to be all good.

image
ocavue commented 7 months ago

By the way, have you tried to remove the .tsup temporary directory and run the build again?

ChristophP commented 7 months ago

Hi thanks for responding so promptly. I'll to create a minimal repro and will post back.

ChristophP commented 7 months ago

@ocavue This is the smallest I could get it to in a short amount of time. https://github.com/ChristophP/tsup-experimental-dts-bug

To reproduce:

  1. Clone the repo
  2. Run npm ci
  3. Run npx tsup
  4. Take a look at dist/_tsup-dts-rollup.d.ts and notice how it points at paths that do not exist.
ocavue commented 7 months ago

Thanks! The generated dist/_tsup-dts-rollup.d.ts in your repo is indeed messed up. I will fix it.

ChristophP commented 7 months ago

Awesome, thank you.

TheAsda commented 5 months ago

Facing the same issue with tsup@8.0.1 and @microsoft/api-extractor@7.39.1