unjs / unplugin

Unified plugin system for Vite, Rollup, Webpack, esbuild, Rolldown, and more

Home Page:https://unplugin.unjs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Types are not portable error when trying to generate .d.ts files with unplugin packages

roninjin10 opened this issue · comments

Environment

  • node 18.12.1
  • pnpm 8.6.5
  • typescript 5.1.6
  • unplugin 1.3.2

Reproduction

https://github.com/evmts/evmts-monorepo/blob/main/bundlers/bundler/src/unplugin/index.ts

  1. Check out monorepo
  2. pnpm install
  3. cd bundlers/bundler
  4. npx tsc --emitDeclarationOnly

Describe the bug

When trying to compile unplugin we get a type is not portable error on multiple plugins.

Additional context

This error happens when trying to compile a .d.ts file. Some inferred type within unplugin is private, making it impossible for the .d.ts file to reference it. Because of this this error gets thrown.

As a workaround I cast the vite plugin as a rollup plugin and the webpack plugin as a rsPack plugin.

To fix just need to explicitly type whatever types from vite and webpack are being inferred privately or reexport them.

Logs

src/unplugin/index.ts:55:14 - error TS2742: The inferred type of 'viteFoundry' cannot be named without a reference to '.pnpm/vite@4.3.9_@types+node@20.4.2/node_modules/vite'. This is likely not portable. A type annotation is necessary.

55 export const viteFoundry = foundryUnplugin.vite
                ~~~~~~~~~~~

src/unplugin/index.ts:58:14 - error TS2742: The inferred type of 'webpackFoundry' cannot be named without a reference to '.pnpm/webpack@5.1.0/node_modules/webpack'. This is likely not portable. A type annotation is necessary.

58 export const webpackFoundry =