Skip to content

Commit 5e9372e

Browse files
rubennortefacebook-github-bot
authored andcommitted
Expose renderer through unstable internals (#58618)
Summary: Expose the renderer proxy as `Renderer` from `react-native/unstable-internals-do-not-use`. Generated Codegen modules can be emitted into consumer packages and need a package entry point for dispatching renderer commands without deep imports. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D120991150
1 parent 3e6b2bf commit 5e9372e

3 files changed

Lines changed: 87 additions & 0 deletions

File tree

‎packages/react-native/src/unstable-internals-do-not-use.d.ts‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
// ----------------------------------------------------------------------------
1515

1616
import type * as React from 'react';
17+
import type {ColorValue} from '../types_generated/Libraries/StyleSheet/StyleSheet';
18+
import type {ProcessedColorValue} from '../types_generated/Libraries/StyleSheet/processColor';
1719

1820
// #region AppContainer
1921

@@ -64,6 +66,17 @@ export class AssetSourceResolver {
6466
static pickScale(scales: number[], deviceScale?: number): number;
6567
}
6668

69+
// #endregion
70+
// #region ConditionallyIgnoredEventHandlers
71+
72+
/**
73+
* Marks generated event-handler view-config attributes as conditionally
74+
* ignored on platforms that do not synthesize them from native view managers.
75+
*/
76+
export function ConditionallyIgnoredEventHandlers<
77+
T extends Readonly<Record<string, true>>,
78+
>(value: T): T | undefined;
79+
6780
// #endregion
6881
// #region customDirectEventTypes
6982

@@ -212,3 +225,41 @@ interface PressabilityDebugViewProps {
212225
export const PressabilityDebugView: React.ComponentType<PressabilityDebugViewProps>;
213226

214227
// #endregion
228+
// #region Renderer
229+
230+
/** Renderer APIs used by generated Codegen modules. */
231+
export * as Renderer from '../types_generated/Libraries/ReactNative/RendererImplementation';
232+
233+
// #endregion
234+
// #region Codegen view config helpers
235+
236+
export const colorAttribute:
237+
| true
238+
| Readonly<{
239+
process: typeof import('../types_generated/Libraries/StyleSheet/processColor').default;
240+
}>;
241+
242+
export function processColorArray(
243+
colors: ReadonlyArray<ColorValue> | null | undefined,
244+
): ReadonlyArray<ProcessedColorValue> | null;
245+
246+
type Point = {
247+
x: number | null | undefined;
248+
y: number | null | undefined;
249+
};
250+
251+
export function pointsDiffer(
252+
one: Point | null | undefined,
253+
two: Point | null | undefined,
254+
): boolean;
255+
256+
type EdgeInsets = {
257+
top: number | null | undefined;
258+
left: number | null | undefined;
259+
right: number | null | undefined;
260+
bottom: number | null | undefined;
261+
};
262+
263+
export function insetsDiffer(one: EdgeInsets, two: EdgeInsets): boolean;
264+
265+
// #endregion

‎packages/react-native/src/unstable-internals-do-not-use.js‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,21 @@
4040
// and unstable-internals-do-not-use.js.flow.
4141
// ----------------------------------------------------------------------------
4242

43+
import typeof {colorAttribute} from '../Libraries/Components/View/ReactNativeStyleAttributes';
4344
import typeof getDevServer from '../Libraries/Core/Devtools/getDevServer';
4445
import typeof NativeExceptionsManager from '../Libraries/Core/NativeExceptionsManager';
4546
import typeof AssetSourceResolver from '../Libraries/Image/AssetSourceResolver';
47+
import typeof {ConditionallyIgnoredEventHandlers} from '../Libraries/NativeComponent/ViewConfigIgnore';
4648
import typeof NativeRedBox from '../Libraries/NativeModules/specs/NativeRedBox';
4749
import typeof NativeSourceCode from '../Libraries/NativeModules/specs/NativeSourceCode';
4850
import typeof {PressabilityDebugView} from '../Libraries/Pressability/PressabilityDebug';
4951
import typeof AppContainer from '../Libraries/ReactNative/AppContainer';
52+
import typeof * as Renderer from '../Libraries/ReactNative/RendererProxy';
5053
import typeof {customDirectEventTypes} from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry';
54+
import typeof processColorArray from '../Libraries/StyleSheet/processColorArray';
5155
import typeof DevLoadingView from '../Libraries/Utilities/DevLoadingView';
56+
import typeof insetsDiffer from '../Libraries/Utilities/differ/insetsDiffer';
57+
import typeof pointsDiffer from '../Libraries/Utilities/differ/pointsDiffer';
5258
import typeof HMRClient from '../Libraries/Utilities/HMRClient';
5359

5460
// flowlint unsafe-getters-setters:off
@@ -60,6 +66,12 @@ module.exports = {
6066
get AssetSourceResolver(): AssetSourceResolver {
6167
return require('../Libraries/Image/AssetSourceResolver').default;
6268
},
69+
get ConditionallyIgnoredEventHandlers(): ConditionallyIgnoredEventHandlers<{
70+
readonly [name: string]: true,
71+
}> {
72+
return require('../Libraries/NativeComponent/ViewConfigIgnore')
73+
.ConditionallyIgnoredEventHandlers;
74+
},
6375
get customDirectEventTypes(): customDirectEventTypes {
6476
return require('../Libraries/Renderer/shims/ReactNativeViewConfigRegistry')
6577
.customDirectEventTypes;
@@ -86,4 +98,22 @@ module.exports = {
8698
return require('../Libraries/Pressability/PressabilityDebug')
8799
.PressabilityDebugView;
88100
},
101+
// Generated Codegen modules can be emitted outside this package, so they
102+
// cannot use package-relative imports to access these implementations.
103+
get colorAttribute(): colorAttribute {
104+
return require('../Libraries/Components/View/ReactNativeStyleAttributes')
105+
.colorAttribute;
106+
},
107+
get insetsDiffer(): insetsDiffer {
108+
return require('../Libraries/Utilities/differ/insetsDiffer').default;
109+
},
110+
get pointsDiffer(): pointsDiffer {
111+
return require('../Libraries/Utilities/differ/pointsDiffer').default;
112+
},
113+
get processColorArray(): processColorArray {
114+
return require('../Libraries/StyleSheet/processColorArray').default;
115+
},
116+
get Renderer(): Renderer {
117+
return require('../Libraries/ReactNative/RendererProxy');
118+
},
89119
};

‎packages/react-native/src/unstable-internals-do-not-use.js.flow‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
export {default as AppContainer} from '../Libraries/ReactNative/AppContainer';
1818
export {default as AssetSourceResolver} from '../Libraries/Image/AssetSourceResolver';
19+
export {colorAttribute} from '../Libraries/Components/View/ReactNativeStyleAttributes';
20+
export {ConditionallyIgnoredEventHandlers} from '../Libraries/NativeComponent/ViewConfigIgnore';
1921
export {customDirectEventTypes} from '../Libraries/Renderer/shims/ReactNativeViewConfigRegistry';
2022
export {default as DevLoadingView} from '../Libraries/Utilities/DevLoadingView';
2123
export {default as getDevServer} from '../Libraries/Core/Devtools/getDevServer';
@@ -24,3 +26,7 @@ export {default as NativeExceptionsManager} from '../Libraries/Core/NativeExcept
2426
export {default as NativeRedBox} from '../Libraries/NativeModules/specs/NativeRedBox';
2527
export {default as NativeSourceCode} from '../Libraries/NativeModules/specs/NativeSourceCode';
2628
export {PressabilityDebugView} from '../Libraries/Pressability/PressabilityDebug';
29+
export {default as insetsDiffer} from '../Libraries/Utilities/differ/insetsDiffer';
30+
export {default as pointsDiffer} from '../Libraries/Utilities/differ/pointsDiffer';
31+
export {default as processColorArray} from '../Libraries/StyleSheet/processColorArray';
32+
export * as Renderer from '../Libraries/ReactNative/RendererProxy';

0 commit comments

Comments
 (0)