Skip to content

Commit d32fdda

Browse files
huntiefacebook-github-bot
authored andcommitted
Expose react-private-interface subpath (#57495)
Summary: See [**RFC0894: Removing deep imports from react-native**](react-native-community/discussions-and-proposals#894) Exposes a `'react-native/react-private-interface'` subpath export on the main package, to replace `Libraries/ReactPrivate/ReactNativePrivateInterface.js`. **Impact: Internal** This is a private contract between `react` and `react-native`. - `ReactNativePrivateInterface` is deprecated and we'll migrate React call sites in a future version before cleanup. **Naming** Translate directly to `react-private-interface` ("private interface for React"). There's alternatives here but the explicitness and continuity is helpful, I believe. Changelog: [Internal] Reviewed By: robhogan Differential Revision: D111231527
1 parent 918fb15 commit d32fdda

6 files changed

Lines changed: 206 additions & 147 deletions

File tree

.flowconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ experimental.multi_platform.extensions=.android
5656
munge_underscores=true
5757

5858
module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/packages/react-native/index.js'
59+
module.name_mapper='^react-native/react-private-interface$' -> '<PROJECT_ROOT>/packages/react-native/src/react-private-interface.js'
5960
module.name_mapper='^react-native/setup-env$' -> '<PROJECT_ROOT>/packages/react-native/src/setup-env.js'
6061
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/packages/react-native/\1'
6162
module.name_mapper='^@react-native/dev-middleware$' -> '<PROJECT_ROOT>/packages/dev-middleware'

packages/react-native/Libraries/ReactPrivate/ReactNativePrivateInterface.js

Lines changed: 5 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -8,124 +8,13 @@
88
* @format
99
*/
1010

11-
import typeof dispatchNativeEvent from '../../src/private/renderer/events/dispatchNativeEvent';
12-
import typeof CustomEvent from '../../src/private/webapis/dom/events/CustomEvent';
13-
import typeof BatchedBridge from '../BatchedBridge/BatchedBridge';
14-
import typeof legacySendAccessibilityEvent from '../Components/AccessibilityInfo/legacySendAccessibilityEvent';
15-
import typeof TextInputState from '../Components/TextInput/TextInputState';
16-
import typeof ExceptionsManager from '../Core/ExceptionsManager';
17-
import typeof RawEventEmitter from '../Core/RawEventEmitter';
18-
import typeof ReactFiberErrorDialog from '../Core/ReactFiberErrorDialog';
19-
import typeof RCTEventEmitter from '../EventEmitter/RCTEventEmitter';
20-
import typeof {
21-
createPublicInstance,
22-
createPublicRootInstance,
23-
createPublicTextInstance,
24-
getInternalInstanceHandleFromPublicInstance,
25-
getNativeTagFromPublicInstance,
26-
getNodeFromPublicInstance,
27-
} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
28-
import typeof {
29-
create as createAttributePayload,
30-
diff as diffAttributePayloads,
31-
} from '../ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload';
32-
import typeof UIManager from '../ReactNative/UIManager';
33-
import typeof * as ReactNativeViewConfigRegistry from '../Renderer/shims/ReactNativeViewConfigRegistry';
34-
import typeof flattenStyle from '../StyleSheet/flattenStyle';
35-
import type {DangerouslyImpreciseStyleProp} from '../StyleSheet/StyleSheet';
36-
import typeof deepFreezeAndThrowOnMutationInDev from '../Utilities/deepFreezeAndThrowOnMutationInDev';
37-
import typeof deepDiffer from '../Utilities/differ/deepDiffer';
38-
import typeof Platform from '../Utilities/Platform';
11+
import typeof {createPublicTextInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
3912

4013
export type {PublicRootInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
4114
export type PublicTextInstance = ReturnType<createPublicTextInstance>;
4215

43-
// flowlint unsafe-getters-setters:off
16+
/**
17+
* @deprecated Since 0.88. Use 'react-native/react-private-interface' instead.
18+
*/
4419
// eslint-disable-next-line @react-native/monorepo/no-commonjs-exports
45-
module.exports = {
46-
get BatchedBridge(): BatchedBridge {
47-
return require('../BatchedBridge/BatchedBridge').default;
48-
},
49-
get ExceptionsManager(): ExceptionsManager {
50-
return require('../Core/ExceptionsManager').default;
51-
},
52-
get Platform(): Platform {
53-
return require('../Utilities/Platform').default;
54-
},
55-
get RCTEventEmitter(): RCTEventEmitter {
56-
return require('../EventEmitter/RCTEventEmitter').default;
57-
},
58-
get ReactNativeViewConfigRegistry(): ReactNativeViewConfigRegistry {
59-
return require('../Renderer/shims/ReactNativeViewConfigRegistry');
60-
},
61-
get TextInputState(): TextInputState {
62-
return require('../Components/TextInput/TextInputState').default;
63-
},
64-
get UIManager(): UIManager {
65-
return require('../ReactNative/UIManager').default;
66-
},
67-
// TODO: Remove when React has migrated to `createAttributePayload` and `diffAttributePayloads`
68-
get deepDiffer(): deepDiffer {
69-
return require('../Utilities/differ/deepDiffer').default;
70-
},
71-
get deepFreezeAndThrowOnMutationInDev(): deepFreezeAndThrowOnMutationInDev<
72-
{...} | Array<unknown>,
73-
> {
74-
return require('../Utilities/deepFreezeAndThrowOnMutationInDev').default;
75-
},
76-
// TODO: Remove when React has migrated to `createAttributePayload` and `diffAttributePayloads`
77-
get flattenStyle(): flattenStyle<DangerouslyImpreciseStyleProp> {
78-
// $FlowFixMe[underconstrained-implicit-instantiation]
79-
// $FlowFixMe[incompatible-type]
80-
return require('../StyleSheet/flattenStyle').default;
81-
},
82-
get ReactFiberErrorDialog(): ReactFiberErrorDialog {
83-
return require('../Core/ReactFiberErrorDialog').default;
84-
},
85-
get legacySendAccessibilityEvent(): legacySendAccessibilityEvent {
86-
return require('../Components/AccessibilityInfo/legacySendAccessibilityEvent')
87-
.default;
88-
},
89-
get RawEventEmitter(): RawEventEmitter {
90-
return require('../Core/RawEventEmitter').default;
91-
},
92-
get CustomEvent(): CustomEvent {
93-
return require('../../src/private/webapis/dom/events/CustomEvent').default;
94-
},
95-
get createAttributePayload(): createAttributePayload {
96-
return require('../ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload')
97-
.create;
98-
},
99-
get diffAttributePayloads(): diffAttributePayloads {
100-
return require('../ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload')
101-
.diff;
102-
},
103-
get createPublicRootInstance(): createPublicRootInstance {
104-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
105-
.createPublicRootInstance;
106-
},
107-
get createPublicInstance(): createPublicInstance {
108-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
109-
.createPublicInstance;
110-
},
111-
get createPublicTextInstance(): createPublicTextInstance {
112-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
113-
.createPublicTextInstance;
114-
},
115-
get getNativeTagFromPublicInstance(): getNativeTagFromPublicInstance {
116-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
117-
.getNativeTagFromPublicInstance;
118-
},
119-
get getNodeFromPublicInstance(): getNodeFromPublicInstance {
120-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
121-
.getNodeFromPublicInstance;
122-
},
123-
get getInternalInstanceHandleFromPublicInstance(): getInternalInstanceHandleFromPublicInstance {
124-
return require('../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
125-
.getInternalInstanceHandleFromPublicInstance;
126-
},
127-
get dispatchNativeEvent(): dispatchNativeEvent {
128-
return require('../../src/private/renderer/events/dispatchNativeEvent')
129-
.default;
130-
},
131-
};
20+
module.exports = require('../../src/react-private-interface');

packages/react-native/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,7 @@
88
* @format
99
*/
1010

11-
import typeof {createPublicTextInstance as createPublicTextInstanceT} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
12-
13-
export type {PublicRootInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
14-
export type PublicTextInstance = ReturnType<createPublicTextInstanceT>;
15-
16-
export {default as BatchedBridge} from '../BatchedBridge/BatchedBridge';
17-
export {default as ExceptionsManager} from '../Core/ExceptionsManager';
18-
export {default as Platform} from '../Utilities/Platform';
19-
export {default as RCTEventEmitter} from '../EventEmitter/RCTEventEmitter';
20-
export * as ReactNativeViewConfigRegistry from '../Renderer/shims/ReactNativeViewConfigRegistry';
21-
export {default as TextInputState} from '../Components/TextInput/TextInputState';
22-
export {default as UIManager} from '../ReactNative/UIManager';
23-
export {default as deepDiffer} from '../Utilities/differ/deepDiffer';
24-
export {default as deepFreezeAndThrowOnMutationInDev} from '../Utilities/deepFreezeAndThrowOnMutationInDev';
25-
export {default as flattenStyle} from '../StyleSheet/flattenStyle';
26-
export {default as ReactFiberErrorDialog} from '../Core/ReactFiberErrorDialog';
27-
export {default as legacySendAccessibilityEvent} from '../Components/AccessibilityInfo/legacySendAccessibilityEvent';
28-
export {default as RawEventEmitter} from '../Core/RawEventEmitter';
29-
export {default as CustomEvent} from '../../src/private/webapis/dom/events/CustomEvent';
30-
export {
31-
create as createAttributePayload,
32-
diff as diffAttributePayloads,
33-
} from '../ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload';
34-
export {
35-
createPublicRootInstance,
36-
createPublicInstance,
37-
createPublicTextInstance,
38-
getNativeTagFromPublicInstance,
39-
getNodeFromPublicInstance,
40-
getInternalInstanceHandleFromPublicInstance,
41-
} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
11+
/**
12+
* @deprecated Since 0.88. Use 'react-native/react-private-interface' instead.
13+
*/
14+
export * from '../../src/react-private-interface.js.flow';

packages/react-native/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
"types": null,
4949
"default": "./src/asset-registry.js"
5050
},
51+
"./react-private-interface": {
52+
"types": null,
53+
"default": "./src/react-private-interface.js"
54+
},
5155
"./setup-env": "./src/setup-env.js",
5256
"./src/fb_internal/*": "./src/fb_internal/*",
5357
"./package.json": "./package.json"
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @flow strict-local
8+
* @format
9+
*/
10+
11+
'use strict';
12+
13+
// ----------------------------------------------------------------------------
14+
// react-native/react-private-interface
15+
//
16+
// This is a private entry point allowing React to require React Native
17+
// internals (previously, Libaries/ReactNativePrivateInterface.js).
18+
//
19+
// These APIs should ONLY be used by first party React internals and are not
20+
// part of our public API.
21+
//
22+
// IMPORTANT: Keep this file in sync with react-private-interface.js.flow.
23+
// ----------------------------------------------------------------------------
24+
25+
import typeof BatchedBridge from '../Libraries/BatchedBridge/BatchedBridge';
26+
import typeof legacySendAccessibilityEvent from '../Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent';
27+
import typeof TextInputState from '../Libraries/Components/TextInput/TextInputState';
28+
import typeof ExceptionsManager from '../Libraries/Core/ExceptionsManager';
29+
import typeof RawEventEmitter from '../Libraries/Core/RawEventEmitter';
30+
import typeof ReactFiberErrorDialog from '../Libraries/Core/ReactFiberErrorDialog';
31+
import typeof RCTEventEmitter from '../Libraries/EventEmitter/RCTEventEmitter';
32+
import typeof {
33+
createPublicInstance,
34+
createPublicRootInstance,
35+
createPublicTextInstance,
36+
getInternalInstanceHandleFromPublicInstance,
37+
getNativeTagFromPublicInstance,
38+
getNodeFromPublicInstance,
39+
} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
40+
import typeof {
41+
create as createAttributePayload,
42+
diff as diffAttributePayloads,
43+
} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload';
44+
import typeof UIManager from '../Libraries/ReactNative/UIManager';
45+
import typeof * as ReactNativeViewConfigRegistry from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry';
46+
import typeof flattenStyle from '../Libraries/StyleSheet/flattenStyle';
47+
import type {DangerouslyImpreciseStyleProp} from '../Libraries/StyleSheet/StyleSheet';
48+
import typeof deepFreezeAndThrowOnMutationInDev from '../Libraries/Utilities/deepFreezeAndThrowOnMutationInDev';
49+
import typeof deepDiffer from '../Libraries/Utilities/differ/deepDiffer';
50+
import typeof Platform from '../Libraries/Utilities/Platform';
51+
import typeof dispatchNativeEvent from './private/renderer/events/dispatchNativeEvent';
52+
import typeof CustomEvent from './private/webapis/dom/events/CustomEvent';
53+
54+
export type {PublicRootInstance} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
55+
export type PublicTextInstance = ReturnType<createPublicTextInstance>;
56+
57+
// flowlint unsafe-getters-setters:off
58+
// eslint-disable-next-line @react-native/monorepo/no-commonjs-exports
59+
module.exports = {
60+
get BatchedBridge(): BatchedBridge {
61+
return require('../Libraries/BatchedBridge/BatchedBridge').default;
62+
},
63+
get ExceptionsManager(): ExceptionsManager {
64+
return require('../Libraries/Core/ExceptionsManager').default;
65+
},
66+
get Platform(): Platform {
67+
return require('../Libraries/Utilities/Platform').default;
68+
},
69+
get RCTEventEmitter(): RCTEventEmitter {
70+
return require('../Libraries/EventEmitter/RCTEventEmitter').default;
71+
},
72+
get ReactNativeViewConfigRegistry(): ReactNativeViewConfigRegistry {
73+
return require('../Libraries/Renderer/shims/ReactNativeViewConfigRegistry');
74+
},
75+
get TextInputState(): TextInputState {
76+
return require('../Libraries/Components/TextInput/TextInputState').default;
77+
},
78+
get UIManager(): UIManager {
79+
return require('../Libraries/ReactNative/UIManager').default;
80+
},
81+
// TODO: Remove when React has migrated to `createAttributePayload` and `diffAttributePayloads`
82+
get deepDiffer(): deepDiffer {
83+
return require('../Libraries/Utilities/differ/deepDiffer').default;
84+
},
85+
get deepFreezeAndThrowOnMutationInDev(): deepFreezeAndThrowOnMutationInDev<
86+
{...} | Array<unknown>,
87+
> {
88+
return require('../Libraries/Utilities/deepFreezeAndThrowOnMutationInDev')
89+
.default;
90+
},
91+
// TODO: Remove when React has migrated to `createAttributePayload` and `diffAttributePayloads`
92+
get flattenStyle(): flattenStyle<DangerouslyImpreciseStyleProp> {
93+
// $FlowFixMe[underconstrained-implicit-instantiation]
94+
// $FlowFixMe[incompatible-type]
95+
return require('../Libraries/StyleSheet/flattenStyle').default;
96+
},
97+
get ReactFiberErrorDialog(): ReactFiberErrorDialog {
98+
return require('../Libraries/Core/ReactFiberErrorDialog').default;
99+
},
100+
get legacySendAccessibilityEvent(): legacySendAccessibilityEvent {
101+
return require('../Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent')
102+
.default;
103+
},
104+
get RawEventEmitter(): RawEventEmitter {
105+
return require('../Libraries/Core/RawEventEmitter').default;
106+
},
107+
get CustomEvent(): CustomEvent {
108+
return require('./private/webapis/dom/events/CustomEvent').default;
109+
},
110+
get createAttributePayload(): createAttributePayload {
111+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload')
112+
.create;
113+
},
114+
get diffAttributePayloads(): diffAttributePayloads {
115+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload')
116+
.diff;
117+
},
118+
get createPublicRootInstance(): createPublicRootInstance {
119+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
120+
.createPublicRootInstance;
121+
},
122+
get createPublicInstance(): createPublicInstance {
123+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
124+
.createPublicInstance;
125+
},
126+
get createPublicTextInstance(): createPublicTextInstance {
127+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
128+
.createPublicTextInstance;
129+
},
130+
get getNativeTagFromPublicInstance(): getNativeTagFromPublicInstance {
131+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
132+
.getNativeTagFromPublicInstance;
133+
},
134+
get getNodeFromPublicInstance(): getNodeFromPublicInstance {
135+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
136+
.getNodeFromPublicInstance;
137+
},
138+
get getInternalInstanceHandleFromPublicInstance(): getInternalInstanceHandleFromPublicInstance {
139+
return require('../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')
140+
.getInternalInstanceHandleFromPublicInstance;
141+
},
142+
get dispatchNativeEvent(): dispatchNativeEvent {
143+
return require('./private/renderer/events/dispatchNativeEvent').default;
144+
},
145+
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @flow strict-local
8+
* @format
9+
*/
10+
11+
// ----------------------------------------------------------------------------
12+
// Types entry point for react-native/react-private-interface
13+
//
14+
// IMPORTANT: Keep this file in sync with react-private-interface.js.
15+
// ----------------------------------------------------------------------------
16+
17+
import typeof {createPublicTextInstance as createPublicTextInstanceT} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
18+
19+
export type {PublicRootInstance} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';
20+
export type PublicTextInstance = ReturnType<createPublicTextInstanceT>;
21+
22+
export {default as BatchedBridge} from '../Libraries/BatchedBridge/BatchedBridge';
23+
export {default as ExceptionsManager} from '../Libraries/Core/ExceptionsManager';
24+
export {default as Platform} from '../Libraries/Utilities/Platform';
25+
export {default as RCTEventEmitter} from '../Libraries/EventEmitter/RCTEventEmitter';
26+
export * as ReactNativeViewConfigRegistry from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry';
27+
export {default as TextInputState} from '../Libraries/Components/TextInput/TextInputState';
28+
export {default as UIManager} from '../Libraries/ReactNative/UIManager';
29+
export {default as deepDiffer} from '../Libraries/Utilities/differ/deepDiffer';
30+
export {default as deepFreezeAndThrowOnMutationInDev} from '../Libraries/Utilities/deepFreezeAndThrowOnMutationInDev';
31+
export {default as flattenStyle} from '../Libraries/StyleSheet/flattenStyle';
32+
export {default as ReactFiberErrorDialog} from '../Libraries/Core/ReactFiberErrorDialog';
33+
export {default as legacySendAccessibilityEvent} from '../Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent';
34+
export {default as RawEventEmitter} from '../Libraries/Core/RawEventEmitter';
35+
export {default as CustomEvent} from './private/webapis/dom/events/CustomEvent';
36+
export {
37+
create as createAttributePayload,
38+
diff as diffAttributePayloads,
39+
} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload';
40+
export {
41+
createPublicRootInstance,
42+
createPublicInstance,
43+
createPublicTextInstance,
44+
getNativeTagFromPublicInstance,
45+
getNodeFromPublicInstance,
46+
getInternalInstanceHandleFromPublicInstance,
47+
} from '../Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance';

0 commit comments

Comments
 (0)