Open alessbell opened 5 months ago
This error was a red herring 🙃 It's actually coming from @graphql-tools/executor
which lists graphql
as a peer dependency that includes v15 in its range, but copy-pasted execute.ts
from graphql
v16 into its src (https://github.com/ardatan/graphql-tools/issues/6279).
The fact that MSW lists graphql as a dependency was unexpected, though; it would be easier to rule it out as a source of potential conflicts if it treated it as a peer dependency, so I'll leave this open for now.
Hi, @alessbell. Thanks for proposing this.
I agree it makes sense to list graphql
as a peer dependency of MSW. I wouldn't allow both v15 and v16 because our library code still has to (dev) depend on a fixed version of GraphQL. As of now, we support v16 officially, with no promise of v15 support. I think that's an important note given the rest of your repo relies on v15.
One potential problem here is that graphql
is an optional peer dependency. While there's peerDependenciesMeta
field in package.json, it's up to your package manager to interpret or even respect that field. Optional peer dependencies are still rather poorly supported in the ecosystem last time I checked. I am a bit concerned that some folks will start getting a missing peer dependency warning if we make this change. Granted, that likely means their package manager is old and doesn't support the meta field.
I've opened a pull request with the proposed change: https://github.com/mswjs/msw/pull/2187.
@alessbell, please, could you give it a try in your project? You can add a dependency from a pull request/branch using all modern package managers. If you have any problems, please let me know.
Code reviews are welcome too!
This has been released in v2.4.0!
Make sure to always update to the latest version (npm i msw@latest
) to get the newest features and bug fixes.
Predictable release automation by @ossjs/release.
My attempt at listing graphql as an optional peer dependency was unsuccessful. There isn't really a concept of an optional peer dependency in ESM (see #2267 for more details).
As the next step, I will try installing graphql as a regular dependency with MSW while also listing it as an optional peer dependency. That should provide both the fallback for teams not using GraphQL, as well as take the project's graphql version as a priority during the module resolution. At least, I hope it will.
Prerequisites
Environment check
msw
versionBrowsers
No response
Reproduction repository
https://github.com/apollographql/graphql-testing-library
Reproduction steps
When installing
msw
,graphql
is installed as a transitive dependency at v16. This goes against the expectation in the GraphQL ecosystem thatgraphql
always be treated as a peer dependency: https://github.com/graphql/graphql-js/issues/594#issuecomment-1189850052From the
graphql
source:This cannot be trivially overridden with all package managers (e.g. npm overrides has open issues), and causes surprising behavior.
Current behavior
graphql
is a dependency of MSW.Here's an example of a project using a number of packages that rely on
graphql
. All of them list it as a peer dependency with the range of 15 || 16, except for MSW.The result is my MSW GraphQL handler returning errors about unsupported GraphQL features for a version of GraphQL I haven't installed and don't expect to be executing my queries:
Expected behavior
I'd expect MSW to treat it as a peer dependency.