function shouldNotBeFrozen()

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;
}