Skip to content

Commit

Permalink
Migrate files in Libraries/EventEmitter and Libraries/Image to use ex…
Browse files Browse the repository at this point in the history
…port syntax (#49020)

Summary:
Pull Request resolved: #49020

## Motivation
Modernising the RN codebase to allow for modern Flow tooling to process it.

## This diff
- Migrates the `Libraries/EventEmitter/*.js` and `Libraries/Image/*.js` files to use the `export` syntax.
- Updates deep-imports of these files to use `.default`
- Updates the current iteration of API snapshots (intended).

Changelog:
[General][Breaking] - Deep imports to modules inside `Libraries/EventEmitter` and `Libraries/Image/*.js` with `require` syntax need to be appended with '.default'.

Reviewed By: huntie

Differential Revision: D68780876

fbshipit-source-id: bd8e702aba33878e38df6d9c89bec27e7c8df0ac
  • Loading branch information
iwoplaza authored and facebook-github-bot committed Jan 30, 2025
1 parent 82cc465 commit 8783196
Show file tree
Hide file tree
Showing 24 changed files with 56 additions and 40 deletions.
5 changes: 3 additions & 2 deletions packages/react-native/Libraries/Core/setUpBatchedBridge.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ registerModule(
'RCTDeviceEventEmitter',
() => require('../EventEmitter/RCTDeviceEventEmitter').default,
);
registerModule('RCTNativeAppEventEmitter', () =>
require('../EventEmitter/RCTNativeAppEventEmitter'),
registerModule(
'RCTNativeAppEventEmitter',
() => require('../EventEmitter/RCTNativeAppEventEmitter').default,
);
registerModule('GlobalPerformanceLogger', () =>
require('../Utilities/GlobalPerformanceLogger'),
Expand Down
3 changes: 2 additions & 1 deletion packages/react-native/Libraries/Core/setUpReactDevTools.js
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,8 @@ if (__DEV__) {
);

// 3. Fallback to attempting to connect WS-based RDT frontend
const RCTNativeAppEventEmitter = require('../EventEmitter/RCTNativeAppEventEmitter');
const RCTNativeAppEventEmitter =
require('../EventEmitter/RCTNativeAppEventEmitter').default;
RCTNativeAppEventEmitter.addListener(
'RCTDevMenuShown',
connectToWSBasedReactDevToolsFrontend,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ const RCTEventEmitter = {
},
};

module.exports = RCTEventEmitter;
export default RCTEventEmitter;
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ import RCTDeviceEventEmitter from './RCTDeviceEventEmitter';
* adding all event listeners directly to RCTNativeAppEventEmitter.
*/
const RCTNativeAppEventEmitter = RCTDeviceEventEmitter;
module.exports = RCTNativeAppEventEmitter;
export default RCTNativeAppEventEmitter;
4 changes: 3 additions & 1 deletion packages/react-native/Libraries/Image/AssetRegistry.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@

import type {PackagerAsset} from '@react-native/assets-registry/registry';

module.exports = require('@react-native/assets-registry/registry') as {
const AssetRegistry = require('@react-native/assets-registry/registry') as {
registerAsset: (asset: PackagerAsset) => number,
getAssetByID: (assetId: number) => PackagerAsset,
};

module.exports = AssetRegistry;
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,4 @@ class AssetSourceResolver {
pickScale;
}

module.exports = AssetSourceResolver;
export default AssetSourceResolver;
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/Image/Image.android.js
Original file line number Diff line number Diff line change
Expand Up @@ -319,4 +319,4 @@ const styles = StyleSheet.create({
},
});

module.exports = Image;
export default Image;
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/Image/Image.ios.js
Original file line number Diff line number Diff line change
Expand Up @@ -249,4 +249,4 @@ const styles = StyleSheet.create({
},
});

module.exports = Image;
export default Image;
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/Image/Image.js.flow
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@

import type {Image} from './ImageTypes.flow';

declare module.exports: Image;
declare export default Image;
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/Image/ImageBackground.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,4 @@ class ImageBackground extends React.Component<ImageBackgroundProps> {
}
}

module.exports = ImageBackground;
export default ImageBackground;
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
validAttributes: {
blurRadius: true,
defaultSource: {
process: require('./resolveAssetSource'),
process: require('./resolveAssetSource').default,
},
internal_analyticTag: true,
resizeMethod: true,
Expand Down Expand Up @@ -146,7 +146,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
diff: require('../Utilities/differ/insetsDiffer'),
},
defaultSource: {
process: require('./resolveAssetSource'),
process: require('./resolveAssetSource').default,
},
internal_analyticTag: true,
resizeMode: true,
Expand Down
4 changes: 3 additions & 1 deletion packages/react-native/Libraries/Image/RelativeImageStub.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

const AssetRegistry = require('@react-native/assets-registry/registry');

module.exports = (AssetRegistry.registerAsset({
const RelativeImageStub = (AssetRegistry.registerAsset({
__packager_asset: true,
fileSystemLocation: '/full/path/to/directory',
httpServerLocation: '/assets/full/path/to/directory',
Expand All @@ -26,3 +26,5 @@ module.exports = (AssetRegistry.registerAsset({
name: 'icon',
type: 'png',
}): number);

module.exports = RelativeImageStub;
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import NativeImageLoaderIOS from '../NativeImageLoaderIOS';
import {act, create} from 'react-test-renderer';

const render = require('../../../jest/renderer');
const Image = require('../Image');
const Image = require('../Image').default;
const ImageInjection = require('../ImageInjection');
const React = require('react');

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
'use strict';

const render = require('../../../jest/renderer');
const ImageBackground = require('../ImageBackground');
const ImageBackground = require('../ImageBackground').default;
const React = require('react');

describe('ImageBackground', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jest.disableAutomock();

const {create} = require('../../../jest/renderer');
const View = require('../../Components/View/View').default;
const Image = require('../Image');
const Image = require('../Image').default;
const React = require('react');

it('renders assets based on relative path', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ describe('resolveAssetSource', () => {
jest.resetModules();

AssetRegistry = require('@react-native/assets-registry/registry');
resolveAssetSource = require('../resolveAssetSource');
resolveAssetSource = require('../resolveAssetSource').default;
NativeSourceCode =
require('../../NativeModules/specs/NativeSourceCode').default;
Platform = require('../../Utilities/Platform');
Expand Down Expand Up @@ -434,7 +434,7 @@ describe('resolveAssetSource', () => {
});

describe('resolveAssetSource.pickScale', () => {
const resolveAssetSource = require('../resolveAssetSource');
const resolveAssetSource = require('../resolveAssetSource').default;

it('picks matching scale', () => {
expect(resolveAssetSource.pickScale([1], 2)).toBe(1);
Expand Down
2 changes: 1 addition & 1 deletion packages/react-native/Libraries/Image/nativeImageSource.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,4 @@ function nativeImageSource(spec: NativeImageSourceSpec): ImageURISource {
};
}

module.exports = nativeImageSource;
export default nativeImageSource;
6 changes: 4 additions & 2 deletions packages/react-native/Libraries/Image/resolveAssetSource.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
// Utilities for resolving an asset into a `source` for e.g. `Image`

import type {ResolvedAssetSource} from './AssetSourceResolver';
import typeof AssetSourceResolverT from './AssetSourceResolver';
import type {ImageSource} from './ImageSource';

import SourceCode from '../NativeModules/specs/NativeSourceCode';

const AssetSourceResolver = require('./AssetSourceResolver');
const AssetSourceResolver: AssetSourceResolverT =
require('./AssetSourceResolver').default;
const {pickScale} = require('./AssetUtils');
const AssetRegistry = require('@react-native/assets-registry/registry');

Expand Down Expand Up @@ -140,4 +142,4 @@ function resolveAssetSource(source: ?ImageSource): ?ResolvedAssetSource {
resolveAssetSource.pickScale = pickScale;
resolveAssetSource.setCustomSourceTransformer = setCustomSourceTransformer;
resolveAssetSource.addCustomSourceTransformer = addCustomSourceTransformer;
module.exports = resolveAssetSource;
export default resolveAssetSource;
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import processBoxShadow from '../StyleSheet/processBoxShadow';

const ReactNativeStyleAttributes =
require('../Components/View/ReactNativeStyleAttributes').default;
const resolveAssetSource = require('../Image/resolveAssetSource');
const resolveAssetSource = require('../Image/resolveAssetSource').default;
const processBackgroundImage =
require('../StyleSheet/processBackgroundImage').default;
const processColor = require('../StyleSheet/processColor').default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ module.exports = {
return require('../Utilities/Platform');
},
get RCTEventEmitter(): RCTEventEmitter {
return require('../EventEmitter/RCTEventEmitter');
return require('../EventEmitter/RCTEventEmitter').default;
},
get ReactNativeViewConfigRegistry(): ReactNativeViewConfigRegistry {
return require('../Renderer/shims/ReactNativeViewConfigRegistry');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4710,13 +4710,13 @@ declare export default IEventEmitter<RCTDeviceEventDefinitions>;

exports[`public API should not change unintentionally Libraries/EventEmitter/RCTEventEmitter.js 1`] = `
"declare const RCTEventEmitter: { register(eventEmitter: any): void };
declare module.exports: RCTEventEmitter;
declare export default typeof RCTEventEmitter;
"
`;

exports[`public API should not change unintentionally Libraries/EventEmitter/RCTNativeAppEventEmitter.js 1`] = `
"declare const RCTNativeAppEventEmitter: typeof RCTDeviceEventEmitter;
declare module.exports: RCTNativeAppEventEmitter;
declare export default typeof RCTNativeAppEventEmitter;
"
`;

Expand Down Expand Up @@ -4799,10 +4799,11 @@ declare export default typeof EventPolyfill;
`;

exports[`public API should not change unintentionally Libraries/Image/AssetRegistry.js 1`] = `
"declare module.exports: {
"declare const AssetRegistry: {
registerAsset: (asset: PackagerAsset) => number,
getAssetByID: (assetId: number) => PackagerAsset,
};
declare module.exports: AssetRegistry;
"
`;

Expand Down Expand Up @@ -4835,7 +4836,7 @@ declare class AssetSourceResolver {
fromSource(source: string): ResolvedAssetSource;
static pickScale: (scales: Array<number>, deviceScale?: number) => number;
}
declare module.exports: AssetSourceResolver;
declare export default typeof AssetSourceResolver;
"
`;

Expand All @@ -4850,7 +4851,7 @@ declare export function getUrlCacheBreaker(): string;
`;

exports[`public API should not change unintentionally Libraries/Image/Image.js.flow 1`] = `
"declare module.exports: Image;
"declare export default Image;
"
`;

Expand All @@ -4868,7 +4869,7 @@ exports[`public API should not change unintentionally Libraries/Image/ImageBackg
_captureRef: $FlowFixMe;
render(): React.Node;
}
declare module.exports: ImageBackground;
declare export default typeof ImageBackground;
"
`;

Expand Down Expand Up @@ -5144,7 +5145,8 @@ declare export default typeof NativeImageStoreIOS;
`;

exports[`public API should not change unintentionally Libraries/Image/RelativeImageStub.js 1`] = `
"declare module.exports: number;
"declare const RelativeImageStub: number;
declare module.exports: RelativeImageStub;
"
`;

Expand All @@ -5171,13 +5173,13 @@ exports[`public API should not change unintentionally Libraries/Image/nativeImag
width: number,
}>;
declare function nativeImageSource(spec: NativeImageSourceSpec): ImageURISource;
declare module.exports: nativeImageSource;
declare export default typeof nativeImageSource;
"
`;

exports[`public API should not change unintentionally Libraries/Image/resolveAssetSource.js 1`] = `
"declare function resolveAssetSource(source: ?ImageSource): ?ResolvedAssetSource;
declare module.exports: resolveAssetSource;
declare export default typeof resolveAssetSource;
"
`;

Expand Down
6 changes: 3 additions & 3 deletions packages/react-native/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,10 @@ module.exports = {
return require('./Libraries/Lists/FlatList').default;
},
get Image(): Image {
return require('./Libraries/Image/Image');
return require('./Libraries/Image/Image').default;
},
get ImageBackground(): ImageBackground {
return require('./Libraries/Image/ImageBackground');
return require('./Libraries/Image/ImageBackground').default;
},
get InputAccessoryView(): InputAccessoryView {
return require('./Libraries/Components/TextInput/InputAccessoryView')
Expand Down Expand Up @@ -367,7 +367,7 @@ module.exports = {
.DynamicColorIOS;
},
get NativeAppEventEmitter(): RCTNativeAppEventEmitter {
return require('./Libraries/EventEmitter/RCTNativeAppEventEmitter');
return require('./Libraries/EventEmitter/RCTNativeAppEventEmitter').default;
},
get NativeModules(): NativeModules {
return require('./Libraries/BatchedBridge/NativeModules').default;
Expand Down
11 changes: 8 additions & 3 deletions packages/react-native/jest/setup.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,14 @@ jest
},
},
}))
.mock('../Libraries/Image/Image', () =>
mockComponent('../Libraries/Image/Image'),
)
.mock('../Libraries/Image/Image', () => ({
__esModule: true,
default: mockComponent(
'../Libraries/Image/Image',
/* instanceMethods */ null,
/* isESModule */ true,
),
}))
.mock('../Libraries/Text/Text', () => ({
__esModule: true,
default: mockComponent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@

const React = require('react');
const ReactNative = require('react-native');
const nativeImageSource = require('react-native/Libraries/Image/nativeImageSource');
const nativeImageSource =
require('react-native/Libraries/Image/nativeImageSource').default;
const {Image, StyleSheet, Text, View} = ReactNative;

type Props = $ReadOnly<{}>;
Expand Down

0 comments on commit 8783196

Please sign in to comment.