in packages/shared/util/Recoil_deepFreezeValue.js [21:69]
function shouldNotBeFrozen(value: mixed): boolean {
// Primitives and functions:
if (value === null || typeof value !== 'object') {
return true;
}
// React elements:
switch (typeof value.$$typeof) {
case 'symbol':
return true;
case 'number':
return true;
}
// Immutable structures:
if (
value['@@__IMMUTABLE_ITERABLE__@@'] != null ||
value['@@__IMMUTABLE_KEYED__@@'] != null ||
value['@@__IMMUTABLE_INDEXED__@@'] != null ||
value['@@__IMMUTABLE_ORDERED__@@'] != null ||
value['@@__IMMUTABLE_RECORD__@@'] != null
) {
return true;
}
// DOM nodes:
if (isNode(value)) {
return true;
}
if (isPromise(value)) {
return true;
}
if (value instanceof Error) {
return true;
}
if (ArrayBuffer.isView(value)) {
return true;
}
// Some environments, just as Jest, don't work with the instanceof check
if (!isReactNative && isWindow(value)) {
return true;
}
return false;
}