Conversation
When a pnpmfile throws a non-native Error value (e.g. a string), `assert(util.types.isNativeError(err))` crashes pnpm with an unhelpful assertion failure. Replace the assertion with a guard that wraps non-native errors into a proper Error and reports them via PnpmFileFailError.
Contributor
There was a problem hiding this comment.
Pull request overview
Improves pnpmfile loading robustness by ensuring requirePnpmfile() reports failures consistently even when pnpmfiles throw non-Error values, avoiding assertion crashes during hook loading.
Changes:
- Replace the
isNativeErrorassertion with a guard that wraps non-native thrown values and rethrows asPnpmFileFailError. - Add a fixture pnpmfile that throws a string to reproduce the crash.
- Add a regression test to ensure non-
Errorthrows are handled without crashing.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| hooks/pnpmfile/src/requirePnpmfile.ts | Replaces assertion with non-native throw wrapping and consistent error reporting. |
| hooks/pnpmfile/test/index.ts | Adds regression test covering non-Error throws from pnpmfiles. |
| hooks/pnpmfile/test/fixtures/throwsString.cjs | Adds fixture pnpmfile that throws a string. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
assert(util.types.isNativeError(err))inrequirePnpmfilewith a guard that wraps non-native errors into a properErrorassert(util.types.isNativeError(err))new Error(String(err))and reported viaPnpmFileFailErrorlike any other pnpmfile errorContext
This was discovered when
@pnpm/plugin-trusted-depsCI failed withassert11(util37.types.isNativeError(err))during pnpmfile loading. The root cause was that a caught error was not a nativeErrorinstance, causing the assertion to crash instead of reporting the error properly.Test plan
throwsString.cjsfixture that throws a stringrequirePnpmfile wraps non-native-Error throws instead of crashing