mirror of
https://github.com/ezolenko/rollup-plugin-typescript2.git
synced 2025-12-08 19:06:16 +00:00
fix(diagnostics): workaround Rollup duplicating error messages (#373)
* fix(diagnostics): workaround Rollup duplicating error messages
- per my investigation in the linked issues, it seems like Rollup has a bug where it duplicates some error message
- this occurs when the error has a stack (or frame) which contains the error message itself
- Rollup prints _both_ the error message _and_ the stack in that case, causing duplication
- this fix adds a workaround for this upstream Rollup bug
- it detects if there is a stack and if the message is duplicated in the stack
- if so, it removes the duplication in the stack
- this workaround should be forward-compatible if this behavior is fixed upstream
- this code should just end up re-throwing in that case (effectively a no-op)
* fix watch mode by spreading err
- apparently Rollup attaches several properties to the error object, including `watchFiles`
- so removing them / not spreading causes watch to just stop working
here are some of the additional properties I logged out, for example:
```js
{
id: '/project-dir/src/difference.ts',
hook: 'transform',
code: 'PLUGIN_ERROR',
plugin: 'rpt2',
watchFiles: [
'/project-dir/src/index.ts',
'/project-dir/tsconfig.json',
'/project-dir/src/types.ts',
'/project-dir/src/difference.ts'
]
}
}
```
This commit is contained in:
parent
f048e770be
commit
00b4414401
13
src/index.ts
13
src/index.ts
@ -253,6 +253,19 @@ const typescript: PluginImpl<RPT2Options> = (options) =>
|
||||
return transformResult;
|
||||
},
|
||||
|
||||
buildEnd(err)
|
||||
{
|
||||
if (!err)
|
||||
return
|
||||
|
||||
// workaround: err.stack contains err.message and Rollup prints both, causing duplication, so split out the stack itself if it exists (c.f. https://github.com/ezolenko/rollup-plugin-typescript2/issues/103#issuecomment-1172820658)
|
||||
const stackOnly = err.stack?.split(err.message)[1];
|
||||
if (stackOnly)
|
||||
this.error({ ...err, message: err.message, stack: stackOnly });
|
||||
else
|
||||
this.error(err);
|
||||
},
|
||||
|
||||
generateBundle(bundleOptions)
|
||||
{
|
||||
self._ongenerate();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user