/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native/Libraries/Utilities/PolyfillFunctions.js
54 строки
2 KB
Iwo Plaza
Migrate Utilities/deepFreezeAndThrowOnMutationInDev.js, Utilities/defineLazyObjectProperty.js, Utilities/DeviceInfo.js & Utilities/FeatureDetection.js to use export syntax (#49408)
14 фев 2025, 00:11
14 фев 2025, 00:11
028c0b3
Код
Авторство
О чём код?
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict * @format */ 'use strict'; const defineLazyObjectProperty = require('./defineLazyObjectProperty').default; /** * Sets an object's property. If a property with the same name exists, this will * replace it but maintain its descriptor configuration. The property will be * replaced with a lazy getter. * * In DEV mode the original property value will be preserved as `original[PropertyName]` * so that, if necessary, it can be restored. For example, if you want to route * network requests through DevTools (to trace them): * * global.XMLHttpRequest = global.originalXMLHttpRequest; * * @see https://github.com/facebook/react-native/issues/934 */ export function polyfillObjectProperty<T>( object: {...}, name: string, getValue: () => T, ): void { const descriptor = Object.getOwnPropertyDescriptor<$FlowFixMe>(object, name); if (__DEV__ && descriptor) { const backupName = `original${name[0].toUpperCase()}${name.slice(1)}`; Object.defineProperty(object, backupName, descriptor); } const {enumerable, writable, configurable = false} = descriptor || {}; if (descriptor && !configurable) { console.error('Failed to set polyfill. ' + name + ' is not configurable.'); return; } defineLazyObjectProperty(object, name, { get: getValue, enumerable: enumerable !== false, writable: writable !== false, }); } export function polyfillGlobal<T>(name: string, getValue: () => T): void { polyfillObjectProperty(global, name, getValue); }