66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true,
 | |
| });
 | |
| exports.instanceOf = void 0;
 | |
| 
 | |
| var _inspect = require('./inspect.js');
 | |
| 
 | |
| /* c8 ignore next 3 */
 | |
| const isProduction =
 | |
|   globalThis.process && // eslint-disable-next-line no-undef
 | |
|   process.env.NODE_ENV === 'production';
 | |
| /**
 | |
|  * A replacement for instanceof which includes an error warning when multi-realm
 | |
|  * constructors are detected.
 | |
|  * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production
 | |
|  * See: https://webpack.js.org/guides/production/
 | |
|  */
 | |
| 
 | |
| const instanceOf =
 | |
|   /* c8 ignore next 6 */
 | |
|   // FIXME: https://github.com/graphql/graphql-js/issues/2317
 | |
|   isProduction
 | |
|     ? function instanceOf(value, constructor) {
 | |
|         return value instanceof constructor;
 | |
|       }
 | |
|     : function instanceOf(value, constructor) {
 | |
|         if (value instanceof constructor) {
 | |
|           return true;
 | |
|         }
 | |
| 
 | |
|         if (typeof value === 'object' && value !== null) {
 | |
|           var _value$constructor;
 | |
| 
 | |
|           // Prefer Symbol.toStringTag since it is immune to minification.
 | |
|           const className = constructor.prototype[Symbol.toStringTag];
 | |
|           const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library.
 | |
|             Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009
 | |
|               ? value[Symbol.toStringTag]
 | |
|               : (_value$constructor = value.constructor) === null ||
 | |
|                 _value$constructor === void 0
 | |
|               ? void 0
 | |
|               : _value$constructor.name;
 | |
| 
 | |
|           if (className === valueClassName) {
 | |
|             const stringifiedValue = (0, _inspect.inspect)(value);
 | |
|             throw new Error(`Cannot use ${className} "${stringifiedValue}" from another module or realm.
 | |
| 
 | |
| Ensure that there is only one instance of "graphql" in the node_modules
 | |
| directory. If different versions of "graphql" are the dependencies of other
 | |
| relied on modules, use "resolutions" to ensure only one version is installed.
 | |
| 
 | |
| https://yarnpkg.com/en/docs/selective-version-resolutions
 | |
| 
 | |
| Duplicate "graphql" modules cannot be used at the same time since different
 | |
| versions may have different capabilities and behavior. The data from one
 | |
| version used in the function from another could produce confusing and
 | |
| spurious results.`);
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
|       };
 | |
| exports.instanceOf = instanceOf;
 |