You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.7 KiB
53 lines
1.7 KiB
4 months ago
|
function maybe(thunk) {
|
||
|
try { return thunk() } catch (_) {}
|
||
|
}
|
||
|
|
||
|
var safeGlobal = (
|
||
|
maybe(function() { return globalThis }) ||
|
||
|
maybe(function() { return window }) ||
|
||
|
maybe(function() { return self }) ||
|
||
|
maybe(function() { return global }) ||
|
||
|
// We don't expect the Function constructor ever to be invoked at runtime, as
|
||
|
// long as at least one of globalThis, window, self, or global is defined, so
|
||
|
// we are under no obligation to make it easy for static analysis tools to
|
||
|
// detect syntactic usage of the Function constructor. If you think you can
|
||
|
// improve your static analysis to detect this obfuscation, think again. This
|
||
|
// is an arms race you cannot win, at least not in JavaScript.
|
||
|
maybe(function() { return maybe.constructor("return this")() })
|
||
|
);
|
||
|
|
||
|
var needToRemove = false;
|
||
|
|
||
|
export function install() {
|
||
|
if (safeGlobal &&
|
||
|
!maybe(function() { return process.env.NODE_ENV }) &&
|
||
|
!maybe(function() { return process })) {
|
||
|
Object.defineProperty(safeGlobal, "process", {
|
||
|
value: {
|
||
|
env: {
|
||
|
// This default needs to be "production" instead of "development", to
|
||
|
// avoid the problem https://github.com/graphql/graphql-js/pull/2894
|
||
|
// will eventually solve, once merged and released.
|
||
|
NODE_ENV: "production",
|
||
|
},
|
||
|
},
|
||
|
// Let anyone else change global.process as they see fit, but hide it from
|
||
|
// Object.keys(global) enumeration.
|
||
|
configurable: true,
|
||
|
enumerable: false,
|
||
|
writable: true,
|
||
|
});
|
||
|
needToRemove = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Call install() at least once, when this module is imported.
|
||
|
install();
|
||
|
|
||
|
export function remove() {
|
||
|
if (needToRemove) {
|
||
|
delete safeGlobal.process;
|
||
|
needToRemove = false;
|
||
|
}
|
||
|
}
|