yeet
This commit is contained in:
155
node_modules/react-native/Libraries/ReactNative/AppContainer.js
generated
vendored
Normal file
155
node_modules/react-native/Libraries/ReactNative/AppContainer.js
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const EmitterSubscription = require('../vendor/emitter/EmitterSubscription');
|
||||
const PropTypes = require('prop-types');
|
||||
const RCTDeviceEventEmitter = require('../EventEmitter/RCTDeviceEventEmitter');
|
||||
const React = require('react');
|
||||
const RootTagContext = require('./RootTagContext');
|
||||
const StyleSheet = require('../StyleSheet/StyleSheet');
|
||||
const View = require('../Components/View/View');
|
||||
|
||||
type Context = {rootTag: number, ...};
|
||||
|
||||
type Props = $ReadOnly<{|
|
||||
children?: React.Node,
|
||||
fabric?: boolean,
|
||||
rootTag: number,
|
||||
showArchitectureIndicator?: boolean,
|
||||
WrapperComponent?: ?React.ComponentType<any>,
|
||||
internal_excludeLogBox?: ?boolean,
|
||||
|}>;
|
||||
|
||||
type State = {|
|
||||
inspector: ?React.Node,
|
||||
mainKey: number,
|
||||
hasError: boolean,
|
||||
|};
|
||||
|
||||
class AppContainer extends React.Component<Props, State> {
|
||||
state: State = {
|
||||
inspector: null,
|
||||
mainKey: 1,
|
||||
hasError: false,
|
||||
};
|
||||
_mainRef: ?React.ElementRef<typeof View>;
|
||||
_subscription: ?EmitterSubscription = null;
|
||||
|
||||
static getDerivedStateFromError: any = undefined;
|
||||
|
||||
static childContextTypes:
|
||||
| any
|
||||
| {|rootTag: React$PropType$Primitive<number>|} = {
|
||||
rootTag: PropTypes.number,
|
||||
};
|
||||
|
||||
getChildContext(): Context {
|
||||
return {
|
||||
rootTag: this.props.rootTag,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount(): void {
|
||||
if (__DEV__) {
|
||||
if (!global.__RCTProfileIsProfiling) {
|
||||
this._subscription = RCTDeviceEventEmitter.addListener(
|
||||
'toggleElementInspector',
|
||||
() => {
|
||||
const Inspector = require('../Inspector/Inspector');
|
||||
const inspector = this.state.inspector ? null : (
|
||||
<Inspector
|
||||
inspectedView={this._mainRef}
|
||||
onRequestRerenderApp={updateInspectedView => {
|
||||
this.setState(
|
||||
s => ({mainKey: s.mainKey + 1}),
|
||||
() => updateInspectedView(this._mainRef),
|
||||
);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
this.setState({inspector});
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount(): void {
|
||||
if (this._subscription != null) {
|
||||
this._subscription.remove();
|
||||
}
|
||||
}
|
||||
|
||||
render(): React.Node {
|
||||
let logBox = null;
|
||||
if (__DEV__) {
|
||||
if (
|
||||
!global.__RCTProfileIsProfiling &&
|
||||
!this.props.internal_excludeLogBox
|
||||
) {
|
||||
const LogBoxNotificationContainer = require('../LogBox/LogBoxNotificationContainer')
|
||||
.default;
|
||||
logBox = <LogBoxNotificationContainer />;
|
||||
}
|
||||
}
|
||||
|
||||
let innerView = (
|
||||
<View
|
||||
collapsable={!this.state.inspector}
|
||||
key={this.state.mainKey}
|
||||
pointerEvents="box-none"
|
||||
style={styles.appContainer}
|
||||
ref={ref => {
|
||||
this._mainRef = ref;
|
||||
}}>
|
||||
{this.props.children}
|
||||
</View>
|
||||
);
|
||||
|
||||
const Wrapper = this.props.WrapperComponent;
|
||||
if (Wrapper != null) {
|
||||
innerView = (
|
||||
<Wrapper
|
||||
fabric={this.props.fabric === true}
|
||||
showArchitectureIndicator={
|
||||
this.props.showArchitectureIndicator === true
|
||||
}>
|
||||
{innerView}
|
||||
</Wrapper>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<RootTagContext.Provider value={this.props.rootTag}>
|
||||
<View style={styles.appContainer} pointerEvents="box-none">
|
||||
{!this.state.hasError && innerView}
|
||||
{this.state.inspector}
|
||||
{logBox}
|
||||
</View>
|
||||
</RootTagContext.Provider>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
appContainer: {
|
||||
flex: 1,
|
||||
},
|
||||
});
|
||||
|
||||
if (__DEV__) {
|
||||
if (!global.__RCTProfileIsProfiling) {
|
||||
const LogBox = require('../LogBox/LogBox');
|
||||
LogBox.install();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AppContainer;
|
311
node_modules/react-native/Libraries/ReactNative/AppRegistry.js
generated
vendored
Normal file
311
node_modules/react-native/Libraries/ReactNative/AppRegistry.js
generated
vendored
Normal file
@ -0,0 +1,311 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const BatchedBridge = require('../BatchedBridge/BatchedBridge');
|
||||
const BugReporting = require('../BugReporting/BugReporting');
|
||||
const ReactNative = require('../Renderer/shims/ReactNative');
|
||||
const SceneTracker = require('../Utilities/SceneTracker');
|
||||
|
||||
const infoLog = require('../Utilities/infoLog');
|
||||
const invariant = require('invariant');
|
||||
const renderApplication = require('./renderApplication');
|
||||
const createPerformanceLogger = require('../Utilities/createPerformanceLogger');
|
||||
import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
|
||||
|
||||
import NativeHeadlessJsTaskSupport from './NativeHeadlessJsTaskSupport';
|
||||
import HeadlessJsTaskError from './HeadlessJsTaskError';
|
||||
|
||||
type Task = (taskData: any) => Promise<void>;
|
||||
export type TaskProvider = () => Task;
|
||||
type TaskCanceller = () => void;
|
||||
type TaskCancelProvider = () => TaskCanceller;
|
||||
|
||||
export type ComponentProvider = () => React$ComponentType<any>;
|
||||
export type ComponentProviderInstrumentationHook = (
|
||||
component: ComponentProvider,
|
||||
scopedPerformanceLogger: IPerformanceLogger,
|
||||
) => React$ComponentType<any>;
|
||||
export type AppConfig = {
|
||||
appKey: string,
|
||||
component?: ComponentProvider,
|
||||
run?: Function,
|
||||
section?: boolean,
|
||||
...
|
||||
};
|
||||
export type Runnable = {
|
||||
component?: ComponentProvider,
|
||||
run: Function,
|
||||
...
|
||||
};
|
||||
export type Runnables = {[appKey: string]: Runnable, ...};
|
||||
export type Registry = {
|
||||
sections: Array<string>,
|
||||
runnables: Runnables,
|
||||
...
|
||||
};
|
||||
export type WrapperComponentProvider = any => React$ComponentType<*>;
|
||||
|
||||
const runnables: Runnables = {};
|
||||
let runCount = 1;
|
||||
const sections: Runnables = {};
|
||||
const taskProviders: Map<string, TaskProvider> = new Map();
|
||||
const taskCancelProviders: Map<string, TaskCancelProvider> = new Map();
|
||||
let componentProviderInstrumentationHook: ComponentProviderInstrumentationHook = (
|
||||
component: ComponentProvider,
|
||||
) => component();
|
||||
|
||||
let wrapperComponentProvider: ?WrapperComponentProvider;
|
||||
let showArchitectureIndicator = false;
|
||||
|
||||
/**
|
||||
* `AppRegistry` is the JavaScript entry point to running all React Native apps.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html
|
||||
*/
|
||||
const AppRegistry = {
|
||||
setWrapperComponentProvider(provider: WrapperComponentProvider) {
|
||||
wrapperComponentProvider = provider;
|
||||
},
|
||||
|
||||
enableArchitectureIndicator(enabled: boolean): void {
|
||||
showArchitectureIndicator = enabled;
|
||||
},
|
||||
|
||||
registerConfig(config: Array<AppConfig>): void {
|
||||
config.forEach(appConfig => {
|
||||
if (appConfig.run) {
|
||||
AppRegistry.registerRunnable(appConfig.appKey, appConfig.run);
|
||||
} else {
|
||||
invariant(
|
||||
appConfig.component != null,
|
||||
'AppRegistry.registerConfig(...): Every config is expected to set ' +
|
||||
'either `run` or `component`, but `%s` has neither.',
|
||||
appConfig.appKey,
|
||||
);
|
||||
AppRegistry.registerComponent(
|
||||
appConfig.appKey,
|
||||
appConfig.component,
|
||||
appConfig.section,
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Registers an app's root component.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#registercomponent
|
||||
*/
|
||||
registerComponent(
|
||||
appKey: string,
|
||||
componentProvider: ComponentProvider,
|
||||
section?: boolean,
|
||||
): string {
|
||||
let scopedPerformanceLogger = createPerformanceLogger();
|
||||
runnables[appKey] = {
|
||||
componentProvider,
|
||||
run: appParameters => {
|
||||
renderApplication(
|
||||
componentProviderInstrumentationHook(
|
||||
componentProvider,
|
||||
scopedPerformanceLogger,
|
||||
),
|
||||
appParameters.initialProps,
|
||||
appParameters.rootTag,
|
||||
wrapperComponentProvider && wrapperComponentProvider(appParameters),
|
||||
appParameters.fabric,
|
||||
showArchitectureIndicator,
|
||||
scopedPerformanceLogger,
|
||||
appKey === 'LogBox',
|
||||
);
|
||||
},
|
||||
};
|
||||
if (section) {
|
||||
sections[appKey] = runnables[appKey];
|
||||
}
|
||||
return appKey;
|
||||
},
|
||||
|
||||
registerRunnable(appKey: string, run: Function): string {
|
||||
runnables[appKey] = {run};
|
||||
return appKey;
|
||||
},
|
||||
|
||||
registerSection(appKey: string, component: ComponentProvider): void {
|
||||
AppRegistry.registerComponent(appKey, component, true);
|
||||
},
|
||||
|
||||
getAppKeys(): Array<string> {
|
||||
return Object.keys(runnables);
|
||||
},
|
||||
|
||||
getSectionKeys(): Array<string> {
|
||||
return Object.keys(sections);
|
||||
},
|
||||
|
||||
getSections(): Runnables {
|
||||
return {
|
||||
...sections,
|
||||
};
|
||||
},
|
||||
|
||||
getRunnable(appKey: string): ?Runnable {
|
||||
return runnables[appKey];
|
||||
},
|
||||
|
||||
getRegistry(): Registry {
|
||||
return {
|
||||
sections: AppRegistry.getSectionKeys(),
|
||||
runnables: {...runnables},
|
||||
};
|
||||
},
|
||||
|
||||
setComponentProviderInstrumentationHook(
|
||||
hook: ComponentProviderInstrumentationHook,
|
||||
) {
|
||||
componentProviderInstrumentationHook = hook;
|
||||
},
|
||||
|
||||
/**
|
||||
* Loads the JavaScript bundle and runs the app.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#runapplication
|
||||
*/
|
||||
runApplication(appKey: string, appParameters: any): void {
|
||||
if (appKey !== 'LogBox') {
|
||||
const msg =
|
||||
'Running "' + appKey + '" with ' + JSON.stringify(appParameters);
|
||||
infoLog(msg);
|
||||
BugReporting.addSource(
|
||||
'AppRegistry.runApplication' + runCount++,
|
||||
() => msg,
|
||||
);
|
||||
}
|
||||
invariant(
|
||||
runnables[appKey] && runnables[appKey].run,
|
||||
`"${appKey}" has not been registered. This can happen if:\n` +
|
||||
'* Metro (the local dev server) is run from the wrong folder. ' +
|
||||
'Check if Metro is running, stop it and restart it in the current project.\n' +
|
||||
"* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called.",
|
||||
);
|
||||
|
||||
SceneTracker.setActiveScene({name: appKey});
|
||||
runnables[appKey].run(appParameters);
|
||||
},
|
||||
|
||||
/**
|
||||
* Stops an application when a view should be destroyed.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#unmountapplicationcomponentatroottag
|
||||
*/
|
||||
unmountApplicationComponentAtRootTag(rootTag: number): void {
|
||||
ReactNative.unmountComponentAtNodeAndRemoveContainer(rootTag);
|
||||
},
|
||||
|
||||
/**
|
||||
* Register a headless task. A headless task is a bit of code that runs without a UI.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#registerheadlesstask
|
||||
*/
|
||||
registerHeadlessTask(taskKey: string, taskProvider: TaskProvider): void {
|
||||
this.registerCancellableHeadlessTask(taskKey, taskProvider, () => () => {
|
||||
/* Cancel is no-op */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Register a cancellable headless task. A headless task is a bit of code that runs without a UI.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#registercancellableheadlesstask
|
||||
*/
|
||||
registerCancellableHeadlessTask(
|
||||
taskKey: string,
|
||||
taskProvider: TaskProvider,
|
||||
taskCancelProvider: TaskCancelProvider,
|
||||
): void {
|
||||
if (taskProviders.has(taskKey)) {
|
||||
console.warn(
|
||||
`registerHeadlessTask or registerCancellableHeadlessTask called multiple times for same key '${taskKey}'`,
|
||||
);
|
||||
}
|
||||
taskProviders.set(taskKey, taskProvider);
|
||||
taskCancelProviders.set(taskKey, taskCancelProvider);
|
||||
},
|
||||
|
||||
/**
|
||||
* Only called from native code. Starts a headless task.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#startheadlesstask
|
||||
*/
|
||||
startHeadlessTask(taskId: number, taskKey: string, data: any): void {
|
||||
const taskProvider = taskProviders.get(taskKey);
|
||||
if (!taskProvider) {
|
||||
console.warn(`No task registered for key ${taskKey}`);
|
||||
if (NativeHeadlessJsTaskSupport) {
|
||||
NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);
|
||||
}
|
||||
return;
|
||||
}
|
||||
taskProvider()(data)
|
||||
.then(() => {
|
||||
if (NativeHeadlessJsTaskSupport) {
|
||||
NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);
|
||||
}
|
||||
})
|
||||
.catch(reason => {
|
||||
console.error(reason);
|
||||
|
||||
if (
|
||||
NativeHeadlessJsTaskSupport &&
|
||||
reason instanceof HeadlessJsTaskError
|
||||
) {
|
||||
NativeHeadlessJsTaskSupport.notifyTaskRetry(taskId).then(
|
||||
retryPosted => {
|
||||
if (!retryPosted) {
|
||||
NativeHeadlessJsTaskSupport.notifyTaskFinished(taskId);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Only called from native code. Cancels a headless task.
|
||||
*
|
||||
* See https://reactnative.dev/docs/appregistry.html#cancelheadlesstask
|
||||
*/
|
||||
cancelHeadlessTask(taskId: number, taskKey: string): void {
|
||||
const taskCancelProvider = taskCancelProviders.get(taskKey);
|
||||
if (!taskCancelProvider) {
|
||||
throw new Error(`No task canceller registered for key '${taskKey}'`);
|
||||
}
|
||||
taskCancelProvider()();
|
||||
},
|
||||
};
|
||||
|
||||
BatchedBridge.registerCallableModule('AppRegistry', AppRegistry);
|
||||
|
||||
if (__DEV__) {
|
||||
const LogBoxInspector = require('../LogBox/LogBoxInspectorContainer').default;
|
||||
AppRegistry.registerComponent('LogBox', () => LogBoxInspector);
|
||||
} else {
|
||||
AppRegistry.registerComponent(
|
||||
'LogBox',
|
||||
() =>
|
||||
function NoOp() {
|
||||
return null;
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = AppRegistry;
|
123
node_modules/react-native/Libraries/ReactNative/DummyUIManager.js
generated
vendored
Normal file
123
node_modules/react-native/Libraries/ReactNative/DummyUIManager.js
generated
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
getViewManagerConfig: (viewManagerName: string): mixed => {
|
||||
console.warn(
|
||||
'Attempting to get config for view manager: ' + viewManagerName,
|
||||
);
|
||||
if (viewManagerName === 'RCTVirtualText') {
|
||||
return {};
|
||||
}
|
||||
return null;
|
||||
},
|
||||
getConstants: (): {...} => ({}),
|
||||
getConstantsForViewManager: (viewManagerName: string) => {},
|
||||
getDefaultEventTypes: (): Array<$FlowFixMe> => [],
|
||||
playTouchSound: () => {},
|
||||
lazilyLoadView: (name: string) => {},
|
||||
createView: (
|
||||
reactTag: ?number,
|
||||
viewName: string,
|
||||
rootTag: number,
|
||||
props: Object,
|
||||
) => {},
|
||||
updateView: (reactTag: number, viewName: string, props: Object) => {},
|
||||
focus: (reactTag: ?number) => {},
|
||||
blur: (reactTag: ?number) => {},
|
||||
findSubviewIn: (
|
||||
reactTag: ?number,
|
||||
point: Array<number>,
|
||||
callback: (
|
||||
nativeViewTag: number,
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => {},
|
||||
dispatchViewManagerCommand: (
|
||||
reactTag: ?number,
|
||||
commandID: number,
|
||||
commandArgs: ?Array<string | number | boolean>,
|
||||
) => {},
|
||||
measure: (
|
||||
reactTag: ?number,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
pageX: number,
|
||||
pageY: number,
|
||||
) => void,
|
||||
) => {},
|
||||
measureInWindow: (
|
||||
reactTag: ?number,
|
||||
callback: (x: number, y: number, width: number, height: number) => void,
|
||||
) => {},
|
||||
viewIsDescendantOf: (
|
||||
reactTag: ?number,
|
||||
ancestorReactTag: ?number,
|
||||
callback: (result: Array<boolean>) => void,
|
||||
) => {},
|
||||
measureLayout: (
|
||||
reactTag: ?number,
|
||||
ancestorReactTag: ?number,
|
||||
errorCallback: (error: Object) => void,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => {},
|
||||
measureLayoutRelativeToParent: (
|
||||
reactTag: ?number,
|
||||
errorCallback: (error: Object) => void,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => {},
|
||||
setJSResponder: (reactTag: ?number, blockNativeResponder: boolean) => {},
|
||||
clearJSResponder: () => {},
|
||||
configureNextLayoutAnimation: (
|
||||
config: Object,
|
||||
callback: () => void,
|
||||
errorCallback: (error: Object) => void,
|
||||
) => {},
|
||||
removeSubviewsFromContainerWithID: (containerID: number) => {},
|
||||
replaceExistingNonRootView: (reactTag: ?number, newReactTag: ?number) => {},
|
||||
setChildren: (containerTag: ?number, reactTags: Array<number>) => {},
|
||||
manageChildren: (
|
||||
containerTag: ?number,
|
||||
moveFromIndices: Array<number>,
|
||||
moveToIndices: Array<number>,
|
||||
addChildReactTags: Array<number>,
|
||||
addAtIndices: Array<number>,
|
||||
removeAtIndices: Array<number>,
|
||||
) => {},
|
||||
|
||||
// Android only
|
||||
setLayoutAnimationEnabledExperimental: (enabled: boolean) => {},
|
||||
sendAccessibilityEvent: (reactTag: ?number, eventType: number) => {},
|
||||
showPopupMenu: (
|
||||
reactTag: ?number,
|
||||
items: Array<string>,
|
||||
error: (error: Object) => void,
|
||||
success: (event: string, selected?: number) => void,
|
||||
) => {},
|
||||
dismissPopupMenu: () => {},
|
||||
};
|
56
node_modules/react-native/Libraries/ReactNative/FabricUIManager.js
generated
vendored
Normal file
56
node_modules/react-native/Libraries/ReactNative/FabricUIManager.js
generated
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {
|
||||
MeasureOnSuccessCallback,
|
||||
MeasureInWindowOnSuccessCallback,
|
||||
MeasureLayoutOnSuccessCallback,
|
||||
} from '../Renderer/shims/ReactNativeTypes';
|
||||
|
||||
// TODO: type these properly.
|
||||
type Node = {...};
|
||||
type NodeSet = Array<Node>;
|
||||
type NodeProps = {...};
|
||||
type InstanceHandle = {...};
|
||||
type Spec = {|
|
||||
+createNode: (
|
||||
reactTag: number,
|
||||
viewName: string,
|
||||
rootTag: number,
|
||||
props: NodeProps,
|
||||
instanceHandle: InstanceHandle,
|
||||
) => Node,
|
||||
+cloneNode: (node: Node) => Node,
|
||||
+cloneNodeWithNewChildren: (node: Node) => Node,
|
||||
+cloneNodeWithNewProps: (node: Node, newProps: NodeProps) => Node,
|
||||
+cloneNodeWithNewChildrenAndProps: (node: Node, newProps: NodeProps) => Node,
|
||||
+createChildSet: (rootTag: number) => NodeSet,
|
||||
+appendChild: (parentNode: Node, child: Node) => Node,
|
||||
+appendChildToSet: (childSet: NodeSet, child: Node) => void,
|
||||
+completeRoot: (rootTag: number, childSet: NodeSet) => void,
|
||||
+setNativeProps: (node: Node, nativeProps: NodeProps) => void,
|
||||
+measure: (node: Node, callback: MeasureOnSuccessCallback) => void,
|
||||
+measureInWindow: (
|
||||
node: Node,
|
||||
callback: MeasureInWindowOnSuccessCallback,
|
||||
) => void,
|
||||
+measureLayout: (
|
||||
node: Node,
|
||||
relativeNode: Node,
|
||||
onFail: () => void,
|
||||
onSuccess: MeasureLayoutOnSuccessCallback,
|
||||
) => void,
|
||||
|};
|
||||
|
||||
const FabricUIManager: ?Spec = global.nativeFabricUIManager;
|
||||
|
||||
module.exports = FabricUIManager;
|
13
node_modules/react-native/Libraries/ReactNative/HeadlessJsTaskError.js
generated
vendored
Normal file
13
node_modules/react-native/Libraries/ReactNative/HeadlessJsTaskError.js
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
export default class HeadlessJsTaskError extends Error {}
|
56
node_modules/react-native/Libraries/ReactNative/I18nManager.js
generated
vendored
Normal file
56
node_modules/react-native/Libraries/ReactNative/I18nManager.js
generated
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import NativeI18nManager from './NativeI18nManager';
|
||||
|
||||
const i18nConstants: {|
|
||||
doLeftAndRightSwapInRTL: boolean,
|
||||
isRTL: boolean,
|
||||
|} = NativeI18nManager
|
||||
? NativeI18nManager.getConstants()
|
||||
: {
|
||||
isRTL: false,
|
||||
doLeftAndRightSwapInRTL: true,
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getConstants: (): {|doLeftAndRightSwapInRTL: boolean, isRTL: boolean|} => {
|
||||
return i18nConstants;
|
||||
},
|
||||
|
||||
allowRTL: (shouldAllow: boolean) => {
|
||||
if (!NativeI18nManager) {
|
||||
return;
|
||||
}
|
||||
|
||||
NativeI18nManager.allowRTL(shouldAllow);
|
||||
},
|
||||
|
||||
forceRTL: (shouldForce: boolean) => {
|
||||
if (!NativeI18nManager) {
|
||||
return;
|
||||
}
|
||||
|
||||
NativeI18nManager.forceRTL(shouldForce);
|
||||
},
|
||||
|
||||
swapLeftAndRightInRTL: (flipStyles: boolean) => {
|
||||
if (!NativeI18nManager) {
|
||||
return;
|
||||
}
|
||||
|
||||
NativeI18nManager.swapLeftAndRightInRTL(flipStyles);
|
||||
},
|
||||
|
||||
isRTL: i18nConstants.isRTL,
|
||||
doLeftAndRightSwapInRTL: i18nConstants.doLeftAndRightSwapInRTL,
|
||||
};
|
21
node_modules/react-native/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js
generated
vendored
Normal file
21
node_modules/react-native/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../TurboModule/RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+notifyTaskFinished: (taskId: number) => void;
|
||||
+notifyTaskRetry: (taskId: number) => Promise<boolean>;
|
||||
}
|
||||
|
||||
export default (TurboModuleRegistry.get<Spec>('HeadlessJsTaskSupport'): ?Spec);
|
26
node_modules/react-native/Libraries/ReactNative/NativeI18nManager.js
generated
vendored
Normal file
26
node_modules/react-native/Libraries/ReactNative/NativeI18nManager.js
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../TurboModule/RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getConstants: () => {|
|
||||
isRTL: boolean,
|
||||
doLeftAndRightSwapInRTL: boolean,
|
||||
|};
|
||||
allowRTL: (allowRTL: boolean) => void;
|
||||
forceRTL: (forceRTL: boolean) => void;
|
||||
swapLeftAndRightInRTL: (flipStyles: boolean) => void;
|
||||
}
|
||||
|
||||
export default (TurboModuleRegistry.get<Spec>('I18nManager'): ?Spec);
|
122
node_modules/react-native/Libraries/ReactNative/NativeUIManager.js
generated
vendored
Normal file
122
node_modules/react-native/Libraries/ReactNative/NativeUIManager.js
generated
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../TurboModule/RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getConstants: () => Object;
|
||||
+getConstantsForViewManager: (viewManagerName: string) => Object;
|
||||
+getDefaultEventTypes: () => Array<string>;
|
||||
+playTouchSound: () => void;
|
||||
+lazilyLoadView: (name: string) => Object; // revisit return
|
||||
+createView: (
|
||||
reactTag: ?number,
|
||||
viewName: string,
|
||||
rootTag: number,
|
||||
props: Object,
|
||||
) => void;
|
||||
+updateView: (reactTag: number, viewName: string, props: Object) => void;
|
||||
+focus: (reactTag: ?number) => void;
|
||||
+blur: (reactTag: ?number) => void;
|
||||
+findSubviewIn: (
|
||||
reactTag: ?number,
|
||||
point: Array<number>,
|
||||
callback: (
|
||||
nativeViewTag: number,
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => void;
|
||||
+dispatchViewManagerCommand: (
|
||||
reactTag: ?number,
|
||||
commandID: number,
|
||||
commandArgs: ?Array<any>,
|
||||
) => void;
|
||||
+measure: (
|
||||
reactTag: ?number,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
pageX: number,
|
||||
pageY: number,
|
||||
) => void,
|
||||
) => void;
|
||||
+measureInWindow: (
|
||||
reactTag: ?number,
|
||||
callback: (x: number, y: number, width: number, height: number) => void,
|
||||
) => void;
|
||||
+viewIsDescendantOf: (
|
||||
reactTag: ?number,
|
||||
ancestorReactTag: ?number,
|
||||
callback: (result: Array<boolean>) => void,
|
||||
) => void;
|
||||
+measureLayout: (
|
||||
reactTag: ?number,
|
||||
ancestorReactTag: ?number,
|
||||
errorCallback: (error: Object) => void,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => void;
|
||||
+measureLayoutRelativeToParent: (
|
||||
reactTag: ?number,
|
||||
errorCallback: (error: Object) => void,
|
||||
callback: (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
) => void,
|
||||
) => void;
|
||||
+setJSResponder: (reactTag: ?number, blockNativeResponder: boolean) => void;
|
||||
+clearJSResponder: () => void;
|
||||
+configureNextLayoutAnimation: (
|
||||
config: Object,
|
||||
callback: () => void, // check what is returned here
|
||||
errorCallback: (error: Object) => void,
|
||||
) => void;
|
||||
+removeSubviewsFromContainerWithID: (containerID: number) => void;
|
||||
+replaceExistingNonRootView: (
|
||||
reactTag: ?number,
|
||||
newReactTag: ?number,
|
||||
) => void;
|
||||
+setChildren: (containerTag: ?number, reactTags: Array<number>) => void;
|
||||
+manageChildren: (
|
||||
containerTag: ?number,
|
||||
moveFromIndices: Array<number>,
|
||||
moveToIndices: Array<number>,
|
||||
addChildReactTags: Array<number>,
|
||||
addAtIndices: Array<number>,
|
||||
removeAtIndices: Array<number>,
|
||||
) => void;
|
||||
|
||||
// Android only
|
||||
+setLayoutAnimationEnabledExperimental: (enabled: boolean) => void;
|
||||
+sendAccessibilityEvent: (reactTag: ?number, eventType: number) => void;
|
||||
+showPopupMenu: (
|
||||
reactTag: ?number,
|
||||
items: Array<string>,
|
||||
error: (error: Object) => void,
|
||||
success: (event: string, selected?: number) => void,
|
||||
) => void;
|
||||
+dismissPopupMenu: () => void;
|
||||
}
|
||||
|
||||
export default (TurboModuleRegistry.getEnforcing<Spec>('UIManager'): Spec);
|
164
node_modules/react-native/Libraries/ReactNative/PaperUIManager.js
generated
vendored
Normal file
164
node_modules/react-native/Libraries/ReactNative/PaperUIManager.js
generated
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const NativeModules = require('../BatchedBridge/NativeModules');
|
||||
const Platform = require('../Utilities/Platform');
|
||||
const UIManagerProperties = require('./UIManagerProperties');
|
||||
|
||||
const defineLazyObjectProperty = require('../Utilities/defineLazyObjectProperty');
|
||||
|
||||
import NativeUIManager from './NativeUIManager';
|
||||
|
||||
const viewManagerConfigs = {};
|
||||
|
||||
const triedLoadingConfig = new Set();
|
||||
|
||||
let NativeUIManagerConstants = {};
|
||||
let isNativeUIManagerConstantsSet = false;
|
||||
function getConstants(): Object {
|
||||
if (!isNativeUIManagerConstantsSet) {
|
||||
NativeUIManagerConstants = NativeUIManager.getConstants();
|
||||
isNativeUIManagerConstantsSet = true;
|
||||
}
|
||||
return NativeUIManagerConstants;
|
||||
}
|
||||
|
||||
const UIManagerJS = {
|
||||
/* $FlowFixMe(>=0.111.0 site=react_native_fb) This comment suppresses an
|
||||
* error found when Flow v0.111 was deployed. To see the error, delete this
|
||||
* comment and run Flow. */
|
||||
...NativeUIManager,
|
||||
getConstants(): Object {
|
||||
return getConstants();
|
||||
},
|
||||
getViewManagerConfig: function(viewManagerName: string): any {
|
||||
if (
|
||||
viewManagerConfigs[viewManagerName] === undefined &&
|
||||
NativeUIManager.getConstantsForViewManager
|
||||
) {
|
||||
try {
|
||||
viewManagerConfigs[
|
||||
viewManagerName
|
||||
] = NativeUIManager.getConstantsForViewManager(viewManagerName);
|
||||
} catch (e) {
|
||||
viewManagerConfigs[viewManagerName] = null;
|
||||
}
|
||||
}
|
||||
|
||||
const config = viewManagerConfigs[viewManagerName];
|
||||
if (config) {
|
||||
return config;
|
||||
}
|
||||
|
||||
// If we're in the Chrome Debugger, let's not even try calling the sync
|
||||
// method.
|
||||
if (!global.nativeCallSyncHook) {
|
||||
return config;
|
||||
}
|
||||
|
||||
if (
|
||||
NativeUIManager.lazilyLoadView &&
|
||||
!triedLoadingConfig.has(viewManagerName)
|
||||
) {
|
||||
const result = NativeUIManager.lazilyLoadView(viewManagerName);
|
||||
triedLoadingConfig.add(viewManagerName);
|
||||
if (result.viewConfig) {
|
||||
getConstants()[viewManagerName] = result.viewConfig;
|
||||
lazifyViewManagerConfig(viewManagerName);
|
||||
}
|
||||
}
|
||||
|
||||
return viewManagerConfigs[viewManagerName];
|
||||
},
|
||||
};
|
||||
|
||||
// TODO (T45220498): Remove this.
|
||||
// 3rd party libs may be calling `NativeModules.UIManager.getViewManagerConfig()`
|
||||
// instead of `UIManager.getViewManagerConfig()` off UIManager.js.
|
||||
// This is a workaround for now.
|
||||
// $FlowFixMe
|
||||
NativeUIManager.getViewManagerConfig = UIManagerJS.getViewManagerConfig;
|
||||
|
||||
function lazifyViewManagerConfig(viewName) {
|
||||
const viewConfig = getConstants()[viewName];
|
||||
viewManagerConfigs[viewName] = viewConfig;
|
||||
if (viewConfig.Manager) {
|
||||
defineLazyObjectProperty(viewConfig, 'Constants', {
|
||||
get: () => {
|
||||
const viewManager = NativeModules[viewConfig.Manager];
|
||||
const constants = {};
|
||||
viewManager &&
|
||||
Object.keys(viewManager).forEach(key => {
|
||||
const value = viewManager[key];
|
||||
if (typeof value !== 'function') {
|
||||
constants[key] = value;
|
||||
}
|
||||
});
|
||||
return constants;
|
||||
},
|
||||
});
|
||||
defineLazyObjectProperty(viewConfig, 'Commands', {
|
||||
get: () => {
|
||||
const viewManager = NativeModules[viewConfig.Manager];
|
||||
const commands = {};
|
||||
let index = 0;
|
||||
viewManager &&
|
||||
Object.keys(viewManager).forEach(key => {
|
||||
const value = viewManager[key];
|
||||
if (typeof value === 'function') {
|
||||
commands[key] = index++;
|
||||
}
|
||||
});
|
||||
return commands;
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the ViewManager constants and commands into UIManager. This is
|
||||
* only needed for iOS, which puts the constants in the ViewManager
|
||||
* namespace instead of UIManager, unlike Android.
|
||||
*/
|
||||
if (Platform.OS === 'ios') {
|
||||
Object.keys(getConstants()).forEach(viewName => {
|
||||
lazifyViewManagerConfig(viewName);
|
||||
});
|
||||
} else if (getConstants().ViewManagerNames) {
|
||||
NativeUIManager.getConstants().ViewManagerNames.forEach(viewManagerName => {
|
||||
defineLazyObjectProperty(NativeUIManager, viewManagerName, {
|
||||
get: () => NativeUIManager.getConstantsForViewManager(viewManagerName),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (!global.nativeCallSyncHook) {
|
||||
Object.keys(getConstants()).forEach(viewManagerName => {
|
||||
if (!UIManagerProperties.includes(viewManagerName)) {
|
||||
if (!viewManagerConfigs[viewManagerName]) {
|
||||
viewManagerConfigs[viewManagerName] = getConstants()[viewManagerName];
|
||||
}
|
||||
defineLazyObjectProperty(NativeUIManager, viewManagerName, {
|
||||
get: () => {
|
||||
console.warn(
|
||||
`Accessing view manager configs directly off UIManager via UIManager['${viewManagerName}'] ` +
|
||||
`is no longer supported. Use UIManager.getViewManagerConfig('${viewManagerName}') instead.`,
|
||||
);
|
||||
|
||||
return UIManagerJS.getViewManagerConfig(viewManagerName);
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = UIManagerJS;
|
17
node_modules/react-native/Libraries/ReactNative/ReactFabricInternals.js
generated
vendored
Normal file
17
node_modules/react-native/Libraries/ReactNative/ReactFabricInternals.js
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const createReactNativeComponentClass = require('../Renderer/shims/createReactNativeComponentClass');
|
||||
|
||||
module.exports = {
|
||||
createReactNativeComponentClass,
|
||||
};
|
15
node_modules/react-native/Libraries/ReactNative/RootTagContext.js
generated
vendored
Normal file
15
node_modules/react-native/Libraries/ReactNative/RootTagContext.js
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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 React = require('react');
|
||||
|
||||
module.exports = (React.createContext<number>(0): React$Context<number>);
|
39
node_modules/react-native/Libraries/ReactNative/UIManager.js
generated
vendored
Normal file
39
node_modules/react-native/Libraries/ReactNative/UIManager.js
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {Spec} from './NativeUIManager';
|
||||
|
||||
interface UIManagerJSInterface extends Spec {
|
||||
+getViewManagerConfig: (viewManagerName: string) => Object;
|
||||
+createView: (
|
||||
reactTag: ?number,
|
||||
viewName: string,
|
||||
rootTag: number,
|
||||
props: Object,
|
||||
) => void;
|
||||
+updateView: (reactTag: number, viewName: string, props: Object) => void;
|
||||
+manageChildren: (
|
||||
containerTag: ?number,
|
||||
moveFromIndices: Array<number>,
|
||||
moveToIndices: Array<number>,
|
||||
addChildReactTags: Array<number>,
|
||||
addAtIndices: Array<number>,
|
||||
removeAtIndices: Array<number>,
|
||||
) => void;
|
||||
}
|
||||
|
||||
const UIManager: UIManagerJSInterface =
|
||||
global.RN$Bridgeless === true
|
||||
? require('./DummyUIManager') // No UIManager in bridgeless mode
|
||||
: require('./PaperUIManager');
|
||||
|
||||
module.exports = UIManager;
|
66
node_modules/react-native/Libraries/ReactNative/UIManagerProperties.js
generated
vendored
Normal file
66
node_modules/react-native/Libraries/ReactNative/UIManagerProperties.js
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its 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-local
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* The list of non-ViewManager related UIManager properties.
|
||||
*
|
||||
* In an effort to improve startup performance by lazily loading view managers,
|
||||
* the interface to access view managers will change from
|
||||
* UIManager['viewManagerName'] to UIManager.getViewManagerConfig('viewManagerName').
|
||||
* By using a function call instead of a property access, the UIManager will
|
||||
* be able to initialize and load the required view manager from native
|
||||
* synchronously. All of React Native's core components have been updated to
|
||||
* use getViewManagerConfig(). For the next few releases, any usage of
|
||||
* UIManager['viewManagerName'] will result in a warning. Because React Native
|
||||
* does not support Proxy objects, a view manager access is implied if any of
|
||||
* UIManager's properties that are not one of the properties below is being
|
||||
* accessed. Once UIManager property accesses for view managers has been fully
|
||||
* deprecated, this file will also be removed.
|
||||
*/
|
||||
module.exports = [
|
||||
'clearJSResponder',
|
||||
'configureNextLayoutAnimation',
|
||||
'createView',
|
||||
'dismissPopupMenu',
|
||||
'dispatchViewManagerCommand',
|
||||
'findSubviewIn',
|
||||
'getConstantsForViewManager',
|
||||
'getDefaultEventTypes',
|
||||
'manageChildren',
|
||||
'measure',
|
||||
'measureInWindow',
|
||||
'measureLayout',
|
||||
'measureLayoutRelativeToParent',
|
||||
'playTouchSound',
|
||||
'removeRootView',
|
||||
'removeSubviewsFromContainerWithID',
|
||||
'replaceExistingNonRootView',
|
||||
'sendAccessibilityEvent',
|
||||
'setChildren',
|
||||
'setJSResponder',
|
||||
'setLayoutAnimationEnabledExperimental',
|
||||
'showPopupMenu',
|
||||
'updateView',
|
||||
'viewIsDescendantOf',
|
||||
'PopupMenu',
|
||||
'LazyViewManagersEnabled',
|
||||
'ViewManagerNames',
|
||||
'StyleConstants',
|
||||
'AccessibilityEventTypes',
|
||||
'UIView',
|
||||
'getViewManagerConfig',
|
||||
'blur',
|
||||
'focus',
|
||||
'genericBubblingEventTypes',
|
||||
'genericDirectEventTypes',
|
||||
'lazilyLoadView',
|
||||
];
|
186
node_modules/react-native/Libraries/ReactNative/getNativeComponentAttributes.js
generated
vendored
Normal file
186
node_modules/react-native/Libraries/ReactNative/getNativeComponentAttributes.js
generated
vendored
Normal file
@ -0,0 +1,186 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const ReactNativeStyleAttributes = require('../Components/View/ReactNativeStyleAttributes');
|
||||
const UIManager = require('./UIManager');
|
||||
|
||||
const insetsDiffer = require('../Utilities/differ/insetsDiffer');
|
||||
const invariant = require('invariant');
|
||||
const matricesDiffer = require('../Utilities/differ/matricesDiffer');
|
||||
const pointsDiffer = require('../Utilities/differ/pointsDiffer');
|
||||
const processColor = require('../StyleSheet/processColor');
|
||||
const processColorArray = require('../StyleSheet/processColorArray');
|
||||
const resolveAssetSource = require('../Image/resolveAssetSource');
|
||||
const sizesDiffer = require('../Utilities/differ/sizesDiffer');
|
||||
const warning = require('fbjs/lib/warning');
|
||||
|
||||
function getNativeComponentAttributes(uiViewClassName: string): any {
|
||||
const viewConfig = UIManager.getViewManagerConfig(uiViewClassName);
|
||||
|
||||
invariant(
|
||||
viewConfig != null && viewConfig.NativeProps != null,
|
||||
'requireNativeComponent: "%s" was not found in the UIManager.',
|
||||
uiViewClassName,
|
||||
);
|
||||
|
||||
// TODO: This seems like a whole lot of runtime initialization for every
|
||||
// native component that can be either avoided or simplified.
|
||||
let {baseModuleName, bubblingEventTypes, directEventTypes} = viewConfig;
|
||||
let nativeProps = viewConfig.NativeProps;
|
||||
while (baseModuleName) {
|
||||
const baseModule = UIManager.getViewManagerConfig(baseModuleName);
|
||||
if (!baseModule) {
|
||||
warning(false, 'Base module "%s" does not exist', baseModuleName);
|
||||
baseModuleName = null;
|
||||
} else {
|
||||
bubblingEventTypes = {
|
||||
...baseModule.bubblingEventTypes,
|
||||
...bubblingEventTypes,
|
||||
};
|
||||
directEventTypes = {
|
||||
...baseModule.directEventTypes,
|
||||
...directEventTypes,
|
||||
};
|
||||
nativeProps = {
|
||||
...baseModule.NativeProps,
|
||||
...nativeProps,
|
||||
};
|
||||
baseModuleName = baseModule.baseModuleName;
|
||||
}
|
||||
}
|
||||
|
||||
const validAttributes = {};
|
||||
|
||||
for (const key in nativeProps) {
|
||||
const typeName = nativeProps[key];
|
||||
const diff = getDifferForType(typeName);
|
||||
const process = getProcessorForType(typeName);
|
||||
|
||||
validAttributes[key] =
|
||||
diff == null && process == null ? true : {diff, process};
|
||||
}
|
||||
|
||||
// Unfortunately, the current setup declares style properties as top-level
|
||||
// props. This makes it so we allow style properties in the `style` prop.
|
||||
// TODO: Move style properties into a `style` prop and disallow them as
|
||||
// top-level props on the native side.
|
||||
validAttributes.style = ReactNativeStyleAttributes;
|
||||
|
||||
Object.assign(viewConfig, {
|
||||
uiViewClassName,
|
||||
validAttributes,
|
||||
bubblingEventTypes,
|
||||
directEventTypes,
|
||||
});
|
||||
|
||||
if (!hasAttachedDefaultEventTypes) {
|
||||
attachDefaultEventTypes(viewConfig);
|
||||
hasAttachedDefaultEventTypes = true;
|
||||
}
|
||||
|
||||
return viewConfig;
|
||||
}
|
||||
|
||||
// TODO: Figure out how this makes sense. We're using a global boolean to only
|
||||
// initialize this on the first eagerly initialized native component.
|
||||
let hasAttachedDefaultEventTypes = false;
|
||||
function attachDefaultEventTypes(viewConfig: any) {
|
||||
// This is supported on UIManager platforms (ex: Android),
|
||||
// as lazy view managers are not implemented for all platforms.
|
||||
// See [UIManager] for details on constants and implementations.
|
||||
const constants = UIManager.getConstants();
|
||||
if (constants.ViewManagerNames || constants.LazyViewManagersEnabled) {
|
||||
// Lazy view managers enabled.
|
||||
viewConfig = merge(viewConfig, UIManager.getDefaultEventTypes());
|
||||
} else {
|
||||
viewConfig.bubblingEventTypes = merge(
|
||||
viewConfig.bubblingEventTypes,
|
||||
constants.genericBubblingEventTypes,
|
||||
);
|
||||
viewConfig.directEventTypes = merge(
|
||||
viewConfig.directEventTypes,
|
||||
constants.genericDirectEventTypes,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Figure out how to avoid all this runtime initialization cost.
|
||||
function merge(destination: ?Object, source: ?Object): ?Object {
|
||||
if (!source) {
|
||||
return destination;
|
||||
}
|
||||
if (!destination) {
|
||||
return source;
|
||||
}
|
||||
|
||||
for (const key in source) {
|
||||
if (!source.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let sourceValue = source[key];
|
||||
if (destination.hasOwnProperty(key)) {
|
||||
const destinationValue = destination[key];
|
||||
if (
|
||||
typeof sourceValue === 'object' &&
|
||||
typeof destinationValue === 'object'
|
||||
) {
|
||||
sourceValue = merge(destinationValue, sourceValue);
|
||||
}
|
||||
}
|
||||
destination[key] = sourceValue;
|
||||
}
|
||||
return destination;
|
||||
}
|
||||
|
||||
function getDifferForType(
|
||||
typeName: string,
|
||||
): ?(prevProp: any, nextProp: any) => boolean {
|
||||
switch (typeName) {
|
||||
// iOS Types
|
||||
case 'CATransform3D':
|
||||
return matricesDiffer;
|
||||
case 'CGPoint':
|
||||
return pointsDiffer;
|
||||
case 'CGSize':
|
||||
return sizesDiffer;
|
||||
case 'UIEdgeInsets':
|
||||
return insetsDiffer;
|
||||
// Android Types
|
||||
// (not yet implemented)
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function getProcessorForType(typeName: string): ?(nextProp: any) => any {
|
||||
switch (typeName) {
|
||||
// iOS Types
|
||||
case 'CGColor':
|
||||
case 'UIColor':
|
||||
return processColor;
|
||||
case 'CGColorArray':
|
||||
case 'UIColorArray':
|
||||
return processColorArray;
|
||||
case 'CGImage':
|
||||
case 'UIImage':
|
||||
case 'RCTImageSource':
|
||||
return resolveAssetSource;
|
||||
// Android Types
|
||||
case 'Color':
|
||||
return processColor;
|
||||
case 'ColorArray':
|
||||
return processColorArray;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports = getNativeComponentAttributes;
|
58
node_modules/react-native/Libraries/ReactNative/queryLayoutByID.js
generated
vendored
Normal file
58
node_modules/react-native/Libraries/ReactNative/queryLayoutByID.js
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const UIManager = require('./UIManager');
|
||||
|
||||
type OnSuccessCallback = (
|
||||
left: number,
|
||||
top: number,
|
||||
width: number,
|
||||
height: number,
|
||||
pageX: number,
|
||||
pageY: number,
|
||||
) => void;
|
||||
|
||||
// I don't know what type error is...
|
||||
type OnErrorCallback = (error: any) => void;
|
||||
|
||||
/**
|
||||
* Queries the layout of a view. The layout does not reflect the element as
|
||||
* seen by the user, rather it reflects the position within the layout system,
|
||||
* before any transforms are applied.
|
||||
*
|
||||
* The only other requirement is that the `pageX, pageY` values be in the same
|
||||
* coordinate system that events' `pageX/Y` are reported. That means that for
|
||||
* the web, `pageXOffset/pageYOffset` should be added to to
|
||||
* getBoundingClientRect to make consistent with touches.
|
||||
*
|
||||
* var pageXOffset = window.pageXOffset;
|
||||
* var pageYOffset = window.pageYOffset;
|
||||
*
|
||||
* This is an IOS specific implementation.
|
||||
*
|
||||
* @param {number} tag ID of the platform specific node to be measured.
|
||||
* @param {function} onError `func(error)`
|
||||
* @param {function} onSuccess `func(left, top, width, height, pageX, pageY)`
|
||||
*/
|
||||
const queryLayoutByID = function(
|
||||
tag: ?number,
|
||||
onError: OnErrorCallback,
|
||||
onSuccess: OnSuccessCallback,
|
||||
): void {
|
||||
if (tag == null) {
|
||||
return;
|
||||
}
|
||||
// Native bridge doesn't *yet* surface errors.
|
||||
UIManager.measure(tag, onSuccess);
|
||||
};
|
||||
|
||||
module.exports = queryLayoutByID;
|
59
node_modules/react-native/Libraries/ReactNative/renderApplication.js
generated
vendored
Normal file
59
node_modules/react-native/Libraries/ReactNative/renderApplication.js
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const AppContainer = require('./AppContainer');
|
||||
import GlobalPerformanceLogger from '../Utilities/GlobalPerformanceLogger';
|
||||
import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
|
||||
import PerformanceLoggerContext from '../Utilities/PerformanceLoggerContext';
|
||||
const React = require('react');
|
||||
|
||||
const invariant = require('invariant');
|
||||
|
||||
// require BackHandler so it sets the default handler that exits the app if no listeners respond
|
||||
require('../Utilities/BackHandler');
|
||||
|
||||
function renderApplication<Props: Object>(
|
||||
RootComponent: React.ComponentType<Props>,
|
||||
initialProps: Props,
|
||||
rootTag: any,
|
||||
WrapperComponent?: ?React.ComponentType<*>,
|
||||
fabric?: boolean,
|
||||
showArchitectureIndicator?: boolean,
|
||||
scopedPerformanceLogger?: IPerformanceLogger,
|
||||
isLogBox?: boolean,
|
||||
) {
|
||||
invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);
|
||||
|
||||
const renderable = (
|
||||
<PerformanceLoggerContext.Provider
|
||||
value={scopedPerformanceLogger ?? GlobalPerformanceLogger}>
|
||||
<AppContainer
|
||||
rootTag={rootTag}
|
||||
fabric={fabric}
|
||||
showArchitectureIndicator={showArchitectureIndicator}
|
||||
WrapperComponent={WrapperComponent}
|
||||
internal_excludeLogBox={isLogBox}>
|
||||
<RootComponent {...initialProps} rootTag={rootTag} />
|
||||
</AppContainer>
|
||||
</PerformanceLoggerContext.Provider>
|
||||
);
|
||||
|
||||
GlobalPerformanceLogger.startTimespan('renderApplication_React_render');
|
||||
if (fabric) {
|
||||
require('../Renderer/shims/ReactFabric').render(renderable, rootTag);
|
||||
} else {
|
||||
require('../Renderer/shims/ReactNative').render(renderable, rootTag);
|
||||
}
|
||||
GlobalPerformanceLogger.stopTimespan('renderApplication_React_render');
|
||||
}
|
||||
|
||||
module.exports = renderApplication;
|
32
node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js
generated
vendored
Normal file
32
node_modules/react-native/Libraries/ReactNative/requireNativeComponent.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const createReactNativeComponentClass = require('../Renderer/shims/createReactNativeComponentClass');
|
||||
const getNativeComponentAttributes = require('./getNativeComponentAttributes');
|
||||
|
||||
import type {HostComponent} from '../Renderer/shims/ReactNativeTypes';
|
||||
|
||||
/**
|
||||
* Creates values that can be used like React components which represent native
|
||||
* view managers. You should create JavaScript modules that wrap these values so
|
||||
* that the results are memoized. Example:
|
||||
*
|
||||
* const View = requireNativeComponent('RCTView');
|
||||
*
|
||||
*/
|
||||
|
||||
const requireNativeComponent = <T>(uiViewClassName: string): HostComponent<T> =>
|
||||
((createReactNativeComponentClass(uiViewClassName, () =>
|
||||
getNativeComponentAttributes(uiViewClassName),
|
||||
): any): HostComponent<T>);
|
||||
|
||||
module.exports = requireNativeComponent;
|
Reference in New Issue
Block a user