New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: remove globalThis
check and align with what bundlers can accept
#4022
base: 16.x.x
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Hi @JoviDeCroock, I'm @github-actions bot happy to help you with this PR 👋 Supported commandsPlease post this commands in separate comments and only one per comment:
|
daffdff
to
a8f5b4a
Compare
After talking to @phryneas there seems to be a lot of pushback from his side with regards to this change opting out of tree-shaking. I'll probably need more evidence that this breaks on different bundlers |
a8f5b4a
to
b0ca7e0
Compare
CC @graphql/graphql-js-reviewers |
src/jsutils/instanceOf.ts
Outdated
/* c8 ignore next 4 */ | ||
const isProduction = | ||
// eslint-disable-next-line no-undef | ||
typeof process !== 'undefined' && | ||
// eslint-disable-next-line no-undef | ||
process.env && | ||
// eslint-disable-next-line no-undef | ||
process.env.NODE_ENV === 'production'; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another alternative that makes the branch default to production
/* c8 ignore next 4 */ | |
const isProduction = | |
// eslint-disable-next-line no-undef | |
typeof process !== 'undefined' && | |
// eslint-disable-next-line no-undef | |
process.env && | |
// eslint-disable-next-line no-undef | |
process.env.NODE_ENV === 'production'; | |
/* c8 ignore next 4 */ | |
const isDev = | |
// eslint-disable-next-line no-undef | |
typeof process !== 'undefined' && | |
// eslint-disable-next-line no-undef | |
process.env.NODE_ENV === 'development'; | |
@@ -9,7 +18,7 @@ import { inspect } from './inspect'; | |||
export const instanceOf: (value: unknown, constructor: Constructor) => boolean = | |||
/* c8 ignore next 6 */ | |||
// FIXME: https://github.com/graphql/graphql-js/issues/2317 | |||
globalThis.process && globalThis.process.env.NODE_ENV === 'production' | |||
isProduction |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
isProduction | |
!isDevelopment |
As surfaced in Discord this currently is a breaking change in the 16.x.x release line which is preventing folks from upgrading towards a security fix. This PR should result in a patch release on the 16 release line.
This change was originally introduced to support CFW and browser environments which should still be supported with the
typeof
check CC @n1ru4lThis also adds a check whether
.env
is present as in the DOM usingid="process"
defines that as a global which we don't want to access on accident. as shown in #4017Bundles also target
process.env.NODE_ENV
specifically which fails when it replacesglobalThis.process.env.NODE_ENV
as this becomesglobalThis."production"
which is invalid syntax.Fixes #3978
Fixes #3918
Fixes #3758
This purposefully does not account for #3925 as we can't address this without breaking CF/plain browsers so the small byte-size increase will be expected for bundled browser environments. As a middle ground we did optimise the performance here. We can revisit this for v17
Supersedes #4021
Supersedes #4019
Supersedes #3927