Reviewed By: panagosg7

Differential Revision: D16657770

fbshipit-source-id: 4e260842c838a35317515044c54ccf55a083da33
This commit is contained in:
Logan Daniels 2019-08-09 10:06:53 -07:00 коммит произвёл Facebook Github Bot
Родитель 9127fb51fc
Коммит 91f139b941
251 изменённых файлов: 1486 добавлений и 980 удалений

Просмотреть файл

@ -36,7 +36,7 @@ class AppEventsTest extends React.Component<{}, State> {
this.setState({sent: event});
}
receiveEvent = (event: any) => {
receiveEvent: (event: any) => void = (event: any) => {
if (deepDiffer(event.data, TEST_PAYLOAD)) {
throw new Error('Received wrong event: ' + JSON.stringify(event));
}
@ -46,7 +46,7 @@ class AppEventsTest extends React.Component<{}, State> {
});
};
render() {
render(): React.Node {
return (
<View style={styles.container}>
<Text>{JSON.stringify(this.state, null, ' ')}</Text>

Просмотреть файл

@ -172,7 +172,7 @@ function testOptimizedMultiGet() {
}
class AsyncStorageTest extends React.Component<{}, $FlowFixMeState> {
state = {
state: any | $TEMPORARY$object<{|done: boolean, messages: string|}> = {
messages: 'Initializing...',
done: false,
};
@ -189,7 +189,7 @@ class AsyncStorageTest extends React.Component<{}, $FlowFixMeState> {
AsyncStorage.clear(testSetAndGet);
}
render() {
render(): React.Node {
return (
<View style={styles.container}>
<Text>

Просмотреть файл

@ -36,9 +36,9 @@ type State = {
};
class ImageCachePolicyTest extends React.Component<Props, $FlowFixMeState> {
state = {};
state: $FlowFixMe | $TEMPORARY$object<{||}> = {};
shouldComponentUpdate(nextProps: Props, nextState: State) {
shouldComponentUpdate(nextProps: Props, nextState: State): boolean {
const results: Array<?boolean> = TESTS.map(x => nextState[x]);
if (!results.includes(undefined)) {
@ -56,7 +56,7 @@ class ImageCachePolicyTest extends React.Component<Props, $FlowFixMeState> {
this.setState({[name]: pass});
}
render() {
render(): React.Node {
return (
<View style={styles.container}>
<Text>Hello</Text>

Просмотреть файл

@ -22,11 +22,11 @@ class ImageSnapshotTest extends React.Component<{}> {
}
}
done = (success: boolean) => {
done: (success: boolean) => void = (success: boolean) => {
TestModule.markTestPassed(success);
};
render() {
render(): React.Node {
return (
<Image
source={require('./blue_square.png')}

Просмотреть файл

@ -10,9 +10,10 @@
'use strict';
const requestAnimationFrame = require('fbjs/lib/requestAnimationFrame');
const React = require('react');
const ReactNative = require('react-native');
const requestAnimationFrame = require('fbjs/lib/requestAnimationFrame');
const {Text, View, StyleSheet} = ReactNative;
const {TestModule} = ReactNative.NativeModules;
@ -26,7 +27,7 @@ type State = {|
|};
class IntegrationTestHarnessTest extends React.Component<Props, State> {
state = {
state: State = {
done: false,
};
@ -38,7 +39,7 @@ class IntegrationTestHarnessTest extends React.Component<Props, State> {
}
}
runTest = () => {
runTest: () => void = () => {
if (this.props.shouldThrow) {
throw new Error('Throwing error because shouldThrow');
}
@ -52,7 +53,7 @@ class IntegrationTestHarnessTest extends React.Component<Props, State> {
});
};
render() {
render(): React.Node {
return (
<View style={styles.container}>
<Text>

Просмотреть файл

@ -58,7 +58,7 @@ class LayoutEventsTest extends React.Component<Props, State> {
this.setState({viewStyle: {margin: 60}});
}
addWrapText = () => {
addWrapText: () => void = () => {
debug('addWrapText invoked');
this.setState(
{extraText: ' And a bunch more text to wrap around a few lines.'},
@ -66,14 +66,14 @@ class LayoutEventsTest extends React.Component<Props, State> {
);
};
changeContainer = () => {
changeContainer: () => void = () => {
debug('changeContainer invoked');
this.setState({containerStyle: {width: 280}}, () =>
this.checkLayout(TestModule.markTestCompleted),
);
};
checkLayout = (next?: ?() => void) => {
checkLayout: (next?: ?() => void) => void = (next?: ?() => void) => {
const view = this._view;
const txt = this._txt;
const img = this._img;
@ -117,22 +117,22 @@ class LayoutEventsTest extends React.Component<Props, State> {
}
}
onViewLayout = (e: LayoutEvent) => {
onViewLayout: (e: LayoutEvent) => void = (e: LayoutEvent) => {
debug('received view layout event\n', e.nativeEvent);
this.setState({viewLayout: e.nativeEvent.layout}, this.checkLayout);
};
onTextLayout = (e: LayoutEvent) => {
onTextLayout: (e: LayoutEvent) => void = (e: LayoutEvent) => {
debug('received text layout event\n', e.nativeEvent);
this.setState({textLayout: e.nativeEvent.layout}, this.checkLayout);
};
onImageLayout = (e: LayoutEvent) => {
onImageLayout: (e: LayoutEvent) => void = (e: LayoutEvent) => {
debug('received image layout event\n', e.nativeEvent);
this.setState({imageLayout: e.nativeEvent.layout}, this.checkLayout);
};
render() {
render(): React.Node {
const viewStyle = [styles.view, this.state.viewStyle];
const textLayout = this.state.textLayout || {width: '?', height: '?'};
const imageLayout = this.state.imageLayout || {x: '?', y: '?'};

Просмотреть файл

@ -16,10 +16,10 @@ const {View} = ReactNative;
const {TestModule} = ReactNative.NativeModules;
class PromiseTest extends React.Component<{}> {
shouldResolve = false;
shouldReject = false;
shouldSucceedAsync = false;
shouldThrowAsync = false;
shouldResolve: boolean = false;
shouldReject: boolean = false;
shouldSucceedAsync: boolean = false;
shouldThrowAsync: boolean = false;
componentDidMount() {
Promise.all([
@ -37,19 +37,19 @@ class PromiseTest extends React.Component<{}> {
);
}
testShouldResolve = () => {
testShouldResolve: () => any = () => {
return TestModule.shouldResolve()
.then(() => (this.shouldResolve = true))
.catch(() => (this.shouldResolve = false));
};
testShouldReject = () => {
testShouldReject: () => any = () => {
return TestModule.shouldReject()
.then(() => (this.shouldReject = false))
.catch(() => (this.shouldReject = true));
};
testShouldSucceedAsync = async (): Promise<any> => {
testShouldSucceedAsync: () => Promise<any> = async (): Promise<any> => {
try {
await TestModule.shouldResolve();
this.shouldSucceedAsync = true;
@ -58,7 +58,7 @@ class PromiseTest extends React.Component<{}> {
}
};
testShouldThrowAsync = async (): Promise<any> => {
testShouldThrowAsync: () => Promise<any> = async (): Promise<any> => {
try {
await TestModule.shouldReject();
this.shouldThrowAsync = false;

Просмотреть файл

@ -10,9 +10,9 @@
'use strict';
const RCTNativeAppEventEmitter = require('react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter');
const React = require('react');
const ReactNative = require('react-native');
const RCTNativeAppEventEmitter = require('react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter');
const {View} = ReactNative;
@ -35,7 +35,7 @@ class ReactContentSizeUpdateTest extends React.Component<Props, State> {
_timeoutID: ?TimeoutID = null;
_subscription: ?EmitterSubscription = null;
state = {
state: State = {
height: reactViewHeight,
width: reactViewWidth,
};
@ -70,7 +70,9 @@ class ReactContentSizeUpdateTest extends React.Component<Props, State> {
});
}
rootViewDidChangeIntrinsicSize = (intrinsicSize: State) => {
rootViewDidChangeIntrinsicSize: (intrinsicSize: State) => void = (
intrinsicSize: State,
) => {
if (
intrinsicSize.height === newReactViewHeight &&
intrinsicSize.width === newReactViewWidth
@ -79,7 +81,7 @@ class ReactContentSizeUpdateTest extends React.Component<Props, State> {
}
};
render() {
render(): React.Node {
return (
<View style={{height: this.state.height, width: this.state.width}} />
);

Просмотреть файл

@ -12,6 +12,7 @@
const React = require('react');
const ReactNative = require('react-native');
const requestAnimationFrame = require('fbjs/lib/requestAnimationFrame');
const {StyleSheet, View} = ReactNative;
@ -25,11 +26,11 @@ class SimpleSnapshotTest extends React.Component<{}> {
requestAnimationFrame(() => TestModule.verifySnapshot(this.done));
}
done = (success: boolean) => {
done: (success: boolean) => void = (success: boolean) => {
TestModule.markTestPassed(success);
};
render() {
render(): React.Node {
return (
<View style={styles.container}>
<View style={styles.box1} />

Просмотреть файл

@ -10,9 +10,9 @@
'use strict';
const RCTNativeAppEventEmitter = require('react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter');
const React = require('react');
const ReactNative = require('react-native');
const RCTNativeAppEventEmitter = require('react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter');
const {View} = ReactNative;
const {TestModule} = ReactNative.NativeModules;
@ -46,15 +46,15 @@ class SizeFlexibilityUpdateTest extends React.Component<Props> {
}
}
markPassed = () => {
markPassed: () => void = () => {
TestModule.markTestPassed(true);
finalState = true;
};
rootViewDidChangeIntrinsicSize = (intrinsicSize: {
width: number,
rootViewDidChangeIntrinsicSize: (intrinsicSize: {
height: number,
}) => {
width: number,
}) => void = (intrinsicSize: {width: number, height: number}) => {
if (finalState) {
// If a test reaches its final state, it is not expected to do anything more
TestModule.markTestPassed(false);
@ -99,7 +99,7 @@ class SizeFlexibilityUpdateTest extends React.Component<Props> {
}
};
render() {
render(): React.Node {
return <View style={{height: reactViewHeight, width: reactViewWidth}} />;
}
}

Просмотреть файл

@ -33,7 +33,7 @@ class TimersTest extends React.Component<Props, State> {
_immediateIDs: Set<ImmediateID> = new Set();
_animationFrameIDs: Set<AnimationFrameID> = new Set();
state = {
state: State = {
count: 0,
done: false,
};
@ -228,7 +228,7 @@ class TimersTest extends React.Component<Props, State> {
}
}
render() {
render(): React.Node {
return (
<View style={styles.container}>
<Text>

Просмотреть файл

@ -113,7 +113,7 @@ class WebSocketTest extends React.Component<{}, State> {
this.testConnect();
}
testConnect = () => {
testConnect: () => void = () => {
this._connect();
this._waitFor(this._socketIsConnected, 5, connectSucceeded => {
if (!connectSucceeded) {
@ -124,7 +124,7 @@ class WebSocketTest extends React.Component<{}, State> {
});
};
testSendAndReceive = () => {
testSendAndReceive: () => void = () => {
this._sendTestMessage();
this._waitFor(this._receivedTestExpectedResponse, 5, messageReceived => {
if (!messageReceived) {
@ -135,7 +135,7 @@ class WebSocketTest extends React.Component<{}, State> {
});
};
testDisconnect = () => {
testDisconnect: () => void = () => {
this._disconnect();
this._waitFor(this._socketIsDisconnected, 5, disconnectSucceeded => {
TestModule.markTestPassed(disconnectSucceeded);

Просмотреть файл

@ -47,4 +47,4 @@ export interface Spec extends TurboModule {
) => void;
}
export default TurboModuleRegistry.get<Spec>('ActionSheetManager');
export default (TurboModuleRegistry.get<Spec>('ActionSheetManager'): ?Spec);

Просмотреть файл

@ -31,4 +31,4 @@ export interface Spec extends TurboModule {
) => void;
}
export default TurboModuleRegistry.get<Spec>('AlertManager');
export default (TurboModuleRegistry.get<Spec>('AlertManager'): ?Spec);

Просмотреть файл

@ -14,6 +14,7 @@ const NativeAnimatedHelper = require('./NativeAnimatedHelper');
const ReactNative = require('../../Renderer/shims/ReactNative');
const invariant = require('invariant');
const {shouldUseNativeDriver} = require('./NativeAnimatedHelper');
export type Mapping = {[key: string]: Mapping} | AnimatedValue;
@ -26,7 +27,7 @@ function attachNativeEvent(
viewRef: any,
eventName: string,
argMapping: Array<?Mapping>,
) {
): $TEMPORARY$object<{|detach: () => void|}> {
// Find animated values in `argMapping` and create an array representing their
// key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].
const eventMappings = [];
@ -130,7 +131,7 @@ class AnimatedEvent {
this._attachedEvent && this._attachedEvent.detach();
}
__getHandler() {
__getHandler(): any | ((...args: any) => void) {
if (this.__isNative) {
return this._callListeners;
}

Просмотреть файл

@ -14,7 +14,7 @@ const AnimatedImplementation = require('./AnimatedImplementation');
module.exports = {
...AnimatedImplementation,
div: AnimatedImplementation.createAnimatedComponent('div'),
span: AnimatedImplementation.createAnimatedComponent('span'),
img: AnimatedImplementation.createAnimatedComponent('img'),
div: (AnimatedImplementation.createAnimatedComponent('div'): $FlowFixMe),
span: (AnimatedImplementation.createAnimatedComponent('span'): $FlowFixMe),
img: (AnimatedImplementation.createAnimatedComponent('img'): $FlowFixMe),
};

Просмотреть файл

@ -61,14 +61,14 @@ class Easing {
/**
* A stepping function, returns 1 for any positive value of `n`.
*/
static step0(n: number) {
static step0(n: number): number {
return n > 0 ? 1 : 0;
}
/**
* A stepping function, returns 1 if `n` is greater than or equal to 1.
*/
static step1(n: number) {
static step1(n: number): number {
return n >= 1 ? 1 : 0;
}
@ -78,7 +78,7 @@ class Easing {
*
* http://cubic-bezier.com/#0,0,1,1
*/
static linear(t: number) {
static linear(t: number): number {
return t;
}
@ -101,7 +101,7 @@ class Easing {
*
* http://easings.net/#easeInQuad
*/
static quad(t: number) {
static quad(t: number): number {
return t * t;
}
@ -111,7 +111,7 @@ class Easing {
*
* http://easings.net/#easeInCubic
*/
static cubic(t: number) {
static cubic(t: number): number {
return t * t * t;
}
@ -121,7 +121,7 @@ class Easing {
* n = 4: http://easings.net/#easeInQuart
* n = 5: http://easings.net/#easeInQuint
*/
static poly(n: number) {
static poly(n: number): (t: number) => number {
return (t: number) => Math.pow(t, n);
}
@ -130,7 +130,7 @@ class Easing {
*
* http://easings.net/#easeInSine
*/
static sin(t: number) {
static sin(t: number): number {
return 1 - Math.cos((t * Math.PI) / 2);
}
@ -139,7 +139,7 @@ class Easing {
*
* http://easings.net/#easeInCirc
*/
static circle(t: number) {
static circle(t: number): number {
return 1 - Math.sqrt(1 - t * t);
}
@ -148,7 +148,7 @@ class Easing {
*
* http://easings.net/#easeInExpo
*/
static exp(t: number) {
static exp(t: number): number {
return Math.pow(2, 10 * (t - 1));
}

Просмотреть файл

@ -10,17 +10,16 @@
'use strict';
import NativeEventEmitter from '../../EventEmitter/NativeEventEmitter';
import type {EventConfig} from './AnimatedEvent';
import NativeAnimatedModule from './NativeAnimatedModule';
import type {
EventMapping,
AnimatedNodeConfig,
AnimatingNodeConfig,
} from './NativeAnimatedModule';
import NativeAnimatedModule from './NativeAnimatedModule';
import invariant from 'invariant';
import type {AnimationConfig, EndCallback} from './animations/Animation';
import type {InterpolationConfigType} from './nodes/AnimatedInterpolation';
import type {EventConfig} from './AnimatedEvent';
import invariant from 'invariant';
let __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */
let __nativeAnimationIdCount = 1; /* used for started animations */
@ -312,7 +311,7 @@ module.exports = {
shouldUseNativeDriver,
transformDataType,
// $FlowExpectedError - unsafe getter lint suppresion
get nativeEventEmitter() {
get nativeEventEmitter(): NativeEventEmitter {
if (!nativeEventEmitter) {
nativeEventEmitter = new NativeEventEmitter(NativeAnimatedModule);
}

Просмотреть файл

@ -67,4 +67,4 @@ export interface Spec extends TurboModule {
+removeListeners: (count: number) => void;
}
export default TurboModuleRegistry.get<Spec>('NativeAnimatedModule');
export default (TurboModuleRegistry.get<Spec>('NativeAnimatedModule'): ?Spec);

Просмотреть файл

@ -13,8 +13,8 @@ const Animation = require('./Animation');
const {shouldUseNativeDriver} = require('../NativeAnimatedHelper');
import type {AnimationConfig, EndCallback} from './Animation';
import type AnimatedValue from '../nodes/AnimatedValue';
import type {AnimationConfig, EndCallback} from './Animation';
export type DecayAnimationConfig = AnimationConfig & {
velocity: number | {x: number, y: number},
@ -45,7 +45,12 @@ class DecayAnimation extends Animation {
this.__iterations = config.iterations ?? 1;
}
__getNativeAnimationConfig() {
__getNativeAnimationConfig(): $TEMPORARY$object<{|
deceleration: number,
iterations: number,
type: $TEMPORARY$string<'decay'>,
velocity: number,
|}> {
return {
type: 'decay',
deceleration: this._deceleration,

Просмотреть файл

@ -15,6 +15,7 @@ const Animation = require('./Animation');
const SpringConfig = require('../SpringConfig');
const invariant = require('invariant');
const {shouldUseNativeDriver} = require('../NativeAnimatedHelper');
import type {AnimationConfig, EndCallback} from './Animation';
@ -137,7 +138,18 @@ class SpringAnimation extends Animation {
invariant(this._mass > 0, 'Mass value must be greater than 0');
}
__getNativeAnimationConfig() {
__getNativeAnimationConfig(): $TEMPORARY$object<{|
damping: number,
initialVelocity: number,
iterations: number,
mass: number,
overshootClamping: boolean,
restDisplacementThreshold: number,
restSpeedThreshold: number,
stiffness: number,
toValue: any,
type: $TEMPORARY$string<'spring'>,
|}> {
return {
type: 'spring',
overshootClamping: this._overshootClamping,

Просмотреть файл

@ -84,7 +84,7 @@ module.exports = function bezier(
mY1: number,
mX2: number,
mY2: number,
) {
): (x: number) => number {
if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {
throw new Error('bezier x values must be in [0, 1] range');
}

Просмотреть файл

@ -14,6 +14,6 @@ const FlatList = require('../../../Lists/FlatList');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(FlatList, {
module.exports = (createAnimatedComponent(FlatList, {
scrollEventThrottle: 0.0001,
});
}): $FlowFixMe);

Просмотреть файл

@ -14,4 +14,4 @@ const Image = require('../../../Image/Image');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(Image);
module.exports = (createAnimatedComponent(Image): $FlowFixMe);

Просмотреть файл

@ -14,6 +14,6 @@ const ScrollView = require('../../../Components/ScrollView/ScrollView');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(ScrollView, {
module.exports = (createAnimatedComponent(ScrollView, {
scrollEventThrottle: 0.0001,
});
}): $FlowFixMe);

Просмотреть файл

@ -14,6 +14,6 @@ const SectionList = require('../../../Lists/SectionList');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(SectionList, {
module.exports = (createAnimatedComponent(SectionList, {
scrollEventThrottle: 0.0001,
});
}): $FlowFixMe);

Просмотреть файл

@ -14,4 +14,4 @@ const Text = require('../../../Text/Text');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(Text);
module.exports = (createAnimatedComponent(Text): $FlowFixMe);

Просмотреть файл

@ -14,4 +14,4 @@ const View = require('../../../Components/View/View');
const createAnimatedComponent = require('../createAnimatedComponent');
module.exports = createAnimatedComponent(View);
module.exports = (createAnimatedComponent(View): $FlowFixMe);

Просмотреть файл

@ -27,4 +27,4 @@ export interface Spec extends TurboModule {
+removeListeners: (count: number) => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('AppState');
export default (TurboModuleRegistry.getEnforcing<Spec>('AppState'): Spec);

Просмотреть файл

@ -12,7 +12,7 @@
const MessageQueue = require('./MessageQueue');
const BatchedBridge = new MessageQueue();
const BatchedBridge: MessageQueue = new MessageQueue();
// Wire up the batched bridge on the global object so that we can call into it.
// Ideally, this would be the inverse relationship. I.e. the native environment

Просмотреть файл

@ -101,7 +101,11 @@ class MessageQueue {
}
}
callFunctionReturnFlushedQueue(module: string, method: string, args: any[]) {
callFunctionReturnFlushedQueue(
module: string,
method: string,
args: any[],
): null | [Array<number>, Array<number>, Array<any>, number] {
this.__guard(() => {
this.__callFunction(module, method, args);
});
@ -113,7 +117,7 @@ class MessageQueue {
module: string,
method: string,
args: any[],
) {
): $TEMPORARY$array<?[Array<number>, Array<number>, Array<any>, number]> {
let result;
this.__guard(() => {
result = this.__callFunction(module, method, args);
@ -122,7 +126,10 @@ class MessageQueue {
return [result, this.flushedQueue()];
}
invokeCallbackAndReturnFlushedQueue(cbID: number, args: any[]) {
invokeCallbackAndReturnFlushedQueue(
cbID: number,
args: any[],
): null | [Array<number>, Array<number>, Array<any>, number] {
this.__guard(() => {
this.__invokeCallback(cbID, args);
});
@ -130,7 +137,7 @@ class MessageQueue {
return this.flushedQueue();
}
flushedQueue() {
flushedQueue(): null | [Array<number>, Array<number>, Array<any>, number] {
this.__guard(() => {
this.__callImmediates();
});
@ -140,7 +147,7 @@ class MessageQueue {
return queue[0].length ? queue : null;
}
getEventLoopRunningTime() {
getEventLoopRunningTime(): number {
return Date.now() - this._eventLoopStartTime;
}
@ -160,7 +167,7 @@ class MessageQueue {
};
}
getCallableModule(name: string) {
getCallableModule(name: string): any | null {
const getValue = this._lazyCallableModules[name];
return getValue ? getValue() : null;
}
@ -171,7 +178,7 @@ class MessageQueue {
params: any[],
onFail: ?Function,
onSucc: ?Function,
) {
): any {
if (__DEV__) {
invariant(
global.nativeCallSyncHook,
@ -383,7 +390,7 @@ class MessageQueue {
// This makes stacktraces to be placed at MessageQueue rather than at where they were launched
// The parameter DebuggerInternal.shouldPauseOnThrow is used to check before catching all exceptions and
// can be configured by the VM or any Inspector
__shouldPauseOnThrow() {
__shouldPauseOnThrow(): boolean {
return (
// $FlowFixMe
typeof DebuggerInternal !== 'undefined' &&

Просмотреть файл

@ -12,10 +12,10 @@
const Blob = require('./Blob');
const BlobRegistry = require('./BlobRegistry');
import NativeBlobModule from './NativeBlobModule';
import invariant from 'invariant';
import type {BlobData, BlobOptions, BlobCollector} from './BlobTypes';
import NativeBlobModule from './NativeBlobModule';
import invariant from 'invariant';
/*eslint-disable no-bitwise */
/*eslint-disable eqeqeq */
@ -54,7 +54,7 @@ class BlobManager {
/**
* If the native blob module is available.
*/
static isAvailable = !!NativeBlobModule;
static isAvailable: boolean = !!NativeBlobModule;
/**
* Create blob from existing array of blobs.

Просмотреть файл

@ -27,7 +27,7 @@ const unregister = (id: string) => {
}
};
const has = (id: string) => {
const has = (id: string): number | boolean => {
return registry[id] && registry[id] > 0;
};

Просмотреть файл

@ -10,8 +10,9 @@
'use strict';
const EventTarget = require('event-target-shim');
const Blob = require('./Blob');
const EventTarget = require('event-target-shim');
import NativeFileReaderModule from './NativeFileReaderModule';
type ReadyState =
@ -34,14 +35,14 @@ const EMPTY = 0;
const LOADING = 1;
const DONE = 2;
class FileReader extends EventTarget(...READER_EVENTS) {
static EMPTY = EMPTY;
static LOADING = LOADING;
static DONE = DONE;
class FileReader extends (EventTarget(...READER_EVENTS): any) {
static EMPTY: number = EMPTY;
static LOADING: number = LOADING;
static DONE: number = DONE;
EMPTY = EMPTY;
LOADING = LOADING;
DONE = DONE;
EMPTY: number = EMPTY;
LOADING: number = LOADING;
DONE: number = DONE;
_readyState: ReadyState;
_error: ?Error;

Просмотреть файл

@ -23,4 +23,4 @@ export interface Spec extends TurboModule {
+release: (blobId: string) => void;
}
export default TurboModuleRegistry.get<Spec>('BlobModule');
export default (TurboModuleRegistry.get<Spec>('BlobModule'): ?Spec);

Просмотреть файл

@ -18,4 +18,6 @@ export interface Spec extends TurboModule {
+readAsText: (data: Object, encoding: string) => Promise<string>;
}
export default TurboModuleRegistry.getEnforcing<Spec>('FileReaderModule');
export default (TurboModuleRegistry.getEnforcing<Spec>(
'FileReaderModule',
): Spec);

Просмотреть файл

@ -8,10 +8,10 @@
* @format
*/
const FileReaderModule = {
async readAsText() {
async readAsText(): Promise<string> {
return '';
},
async readAsDataURL() {
async readAsDataURL(): Promise<string> {
return 'data:text/plain;base64,NDI=';
},
};

Просмотреть файл

@ -23,7 +23,7 @@ const MAX_STRING_LENGTH = 50;
* it best to get the content but ultimately relies on implementation details
* of React and will fail in future versions.
*/
function dumpReactTree() {
function dumpReactTree(): string {
try {
return getReactTree();
} catch (e) {

Просмотреть файл

@ -10,11 +10,11 @@
'use strict';
import NativeAccessibilityManager from './NativeAccessibilityManager';
const Promise = require('../../Promise');
const RCTDeviceEventEmitter = require('../../EventEmitter/RCTDeviceEventEmitter');
import NativeAccessibilityManager from './NativeAccessibilityManager';
const CHANGE_EVENT_NAME = {
announcementFinished: 'announcementFinished',
boldTextChanged: 'boldTextChanged',
@ -164,7 +164,7 @@ const AccessibilityInfo = {
*
* Same as `isScreenReaderEnabled`
*/
get fetch() {
get fetch(): $FlowFixMe {
return this.isScreenReaderEnabled;
},

Просмотреть файл

@ -24,4 +24,4 @@ export interface Spec extends TurboModule {
+announceForAccessibility: (announcement: string) => void;
}
export default TurboModuleRegistry.get<Spec>('AccessibilityInfo');
export default (TurboModuleRegistry.get<Spec>('AccessibilityInfo'): ?Spec);

Просмотреть файл

@ -42,4 +42,4 @@ export interface Spec extends TurboModule {
+announceForAccessibility: (announcement: string) => void;
}
export default TurboModuleRegistry.get<Spec>('AccessibilityManager');
export default (TurboModuleRegistry.get<Spec>('AccessibilityManager'): ?Spec);

Просмотреть файл

@ -18,4 +18,6 @@ export interface Spec extends TurboModule {
+removeListeners: (count: number) => void;
}
export default TurboModuleRegistry.get<Spec>('TVNavigationEventEmitter');
export default (TurboModuleRegistry.get<Spec>(
'TVNavigationEventEmitter',
): ?Spec);

Просмотреть файл

@ -19,4 +19,4 @@ export interface Spec extends TurboModule {
+setString: (content: string) => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('Clipboard');
export default (TurboModuleRegistry.getEnforcing<Spec>('Clipboard'): Spec);

Просмотреть файл

@ -13,16 +13,15 @@
'use strict';
const RCTDatePickerNativeComponent = require('./RCTDatePickerNativeComponent');
const React = require('react');
const StyleSheet = require('../../StyleSheet/StyleSheet');
const View = require('../View/View');
const invariant = require('invariant');
import type {ViewProps} from '../View/ViewPropTypes';
import type {SyntheticEvent} from '../../Types/CoreEventTypes';
const RCTDatePickerNativeComponent = require('./RCTDatePickerNativeComponent');
import type {ViewProps} from '../View/ViewPropTypes';
type Event = SyntheticEvent<
$ReadOnly<{|
@ -113,7 +112,9 @@ type Props = $ReadOnly<{|
* source of truth.
*/
class DatePickerIOS extends React.Component<Props> {
static DefaultProps = {
static DefaultProps: $TEMPORARY$object<{|
mode: $TEMPORARY$string<'datetime'>,
|}> = {
mode: 'datetime',
};
@ -137,7 +138,7 @@ class DatePickerIOS extends React.Component<Props> {
this.props.onChange && this.props.onChange(event);
};
render() {
render(): React.Node {
const props = this.props;
invariant(
props.date || props.initialDate,

Просмотреть файл

@ -17,4 +17,6 @@ export interface Spec extends TurboModule {
+open: (options: Object) => Promise<Object>;
}
export default TurboModuleRegistry.getEnforcing<Spec>('DatePickerAndroid');
export default (TurboModuleRegistry.getEnforcing<Spec>(
'DatePickerAndroid',
): Spec);

Просмотреть файл

@ -10,17 +10,17 @@
'use strict';
import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
import * as React from 'react';
import type {ViewProps} from 'react-native/Libraries/Components/View/ViewPropTypes';
import type {ColorValue} from 'react-native/Libraries/StyleSheet/StyleSheetTypes';
import type {
WithDefault,
DirectEventHandler,
Int32,
Float,
} from 'react-native/Libraries/Types/CodegenTypes';
import type {ColorValue} from 'react-native/Libraries/StyleSheet/StyleSheetTypes';
import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
import * as React from 'react';
type DrawerStateEvent = $ReadOnly<{|
drawerState: Int32,
@ -113,7 +113,7 @@ type NativeProps = $ReadOnly<{|
statusBarBackgroundColor?: ?ColorValue,
|}>;
export const Commands = codegenNativeCommands<NativeCommands>({
export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
supportedCommands: ['openDrawer', 'closeDrawer'],
});

Просмотреть файл

@ -11,9 +11,10 @@
'use strict';
const LayoutAnimation = require('../../LayoutAnimation/LayoutAnimation');
const invariant = require('invariant');
const NativeEventEmitter = require('../../EventEmitter/NativeEventEmitter');
const dismissKeyboard = require('../../Utilities/dismissKeyboard');
const invariant = require('invariant');
import NativeKeyboardObserver from './NativeKeyboardObserver';
const KeyboardEventEmitter = new NativeEventEmitter(NativeKeyboardObserver);
@ -108,7 +109,21 @@ type KeyboardEventListener = (e: KeyboardEvent) => void;
*```
*/
let Keyboard = {
let Keyboard:
| NativeEventEmitter
| $TEMPORARY$object<{|
addListener: (
eventName: KeyboardEventName,
callback: KeyboardEventListener,
) => $FlowFixMe,
dismiss: () => $FlowFixMe,
removeAllListeners: (eventName: KeyboardEventName) => $FlowFixMe,
removeListener: (
eventName: KeyboardEventName,
callback: KeyboardEventListener,
) => $FlowFixMe,
scheduleLayoutAnimation: (event: KeyboardEvent) => $FlowFixMe,
|}> = {
/**
* The `addListener` function connects a JavaScript function to an identified native
* keyboard notification event.

Просмотреть файл

@ -17,8 +17,8 @@ const React = require('react');
const StyleSheet = require('../../StyleSheet/StyleSheet');
const View = require('../View/View');
import type EmitterSubscription from '../../vendor/emitter/EmitterSubscription';
import type {ViewStyleProp} from '../../StyleSheet/StyleSheet';
import type EmitterSubscription from '../../vendor/emitter/EmitterSubscription';
import type {
ViewProps,
ViewLayout,
@ -61,7 +61,10 @@ type State = {|
* adjusting its height, position, or bottom padding.
*/
class KeyboardAvoidingView extends React.Component<Props, State> {
static defaultProps = {
static defaultProps: $TEMPORARY$object<{|
enabled: boolean,
keyboardVerticalOffset: number,
|}> = {
enabled: true,
keyboardVerticalOffset: 0,
};

Просмотреть файл

@ -18,4 +18,4 @@ export interface Spec extends TurboModule {
+removeListeners: (count: number) => void;
}
export default TurboModuleRegistry.get<Spec>('KeyboardObserver');
export default (TurboModuleRegistry.get<Spec>('KeyboardObserver'): ?Spec);

Просмотреть файл

@ -11,9 +11,9 @@
const React = require('react');
const StyleSheet = require('../../StyleSheet/StyleSheet');
const View = require('../View/View');
import RCTMaskedViewNativeComponent from './RCTMaskedViewNativeComponent';
import type {ViewProps} from '../View/ViewPropTypes';
import RCTMaskedViewNativeComponent from './RCTMaskedViewNativeComponent';
type Props = $ReadOnly<{|
...ViewProps,
@ -65,7 +65,7 @@ type Props = $ReadOnly<{|
class MaskedViewIOS extends React.Component<Props> {
_hasWarnedInvalidRenderMask = false;
render() {
render(): React.Node {
const {maskElement, children, ...otherViewProps} = this.props;
if (!React.isValidElement(maskElement)) {

Просмотреть файл

@ -121,20 +121,22 @@ class Picker extends React.Component<PickerProps> {
/**
* On Android, display the options in a dialog.
*/
static MODE_DIALOG = MODE_DIALOG;
static MODE_DIALOG: $TEMPORARY$string<'dialog'> = MODE_DIALOG;
/**
* On Android, display the options in a dropdown (this is the default).
*/
static MODE_DROPDOWN = MODE_DROPDOWN;
static MODE_DROPDOWN: $TEMPORARY$string<'dropdown'> = MODE_DROPDOWN;
static Item = PickerItem;
static Item: typeof PickerItem = PickerItem;
static defaultProps = {
static defaultProps: $TEMPORARY$object<{|
mode: $TEMPORARY$string<'dialog'>,
|}> = {
mode: MODE_DIALOG,
};
render() {
render(): React.Node {
if (Platform.OS === 'ios') {
/* $FlowFixMe(>=0.81.0 site=react_native_ios_fb) This suppression was
* added when renaming suppression sites. */

Просмотреть файл

@ -13,17 +13,18 @@
'use strict';
const RCTPickerNativeComponent = require('./RCTPickerNativeComponent');
const React = require('react');
const ReactNative = require('../../Renderer/shims/ReactNative');
const StyleSheet = require('../../StyleSheet/StyleSheet');
const View = require('../View/View');
const processColor = require('../../StyleSheet/processColor');
const RCTPickerNativeComponent = require('./RCTPickerNativeComponent');
import type {SyntheticEvent} from '../../Types/CoreEventTypes';
import type {ColorValue} from '../../StyleSheet/StyleSheetTypes';
import type {ViewProps} from '../View/ViewPropTypes';
const processColor = require('../../StyleSheet/processColor');
import type {TextStyleProp} from '../../StyleSheet/StyleSheet';
import type {ColorValue} from '../../StyleSheet/StyleSheetTypes';
import type {SyntheticEvent} from '../../Types/CoreEventTypes';
import type {ViewProps} from '../View/ViewPropTypes';
type PickerIOSChangeEvent = SyntheticEvent<
$ReadOnly<{|
@ -74,19 +75,19 @@ type ItemProps = $ReadOnly<{|
color?: ?ColorValue,
|}>;
const PickerIOSItem = (props: ItemProps) => {
const PickerIOSItem = (props: ItemProps): null => {
return null;
};
class PickerIOS extends React.Component<Props, State> {
_picker: ?React.ElementRef<RCTPickerIOSType> = null;
state = {
state: State = {
selectedIndex: 0,
items: [],
};
static Item = PickerIOSItem;
static Item: (props: ItemProps) => null = PickerIOSItem;
static getDerivedStateFromProps(props: Props): State {
let selectedIndex = 0;
@ -106,7 +107,7 @@ class PickerIOS extends React.Component<Props, State> {
return {selectedIndex, items};
}
render() {
render(): React.Node {
return (
<View style={this.props.style}>
<RCTPickerNativeComponent

Просмотреть файл

@ -21,7 +21,7 @@ class RefreshControlMock extends React.Component<{}> {
componentDidMount() {
RefreshControlMock.latestRef = this;
}
render() {
render(): React.Element<string> {
return <RCTRefreshControl />;
}
}

Просмотреть файл

@ -12,15 +12,15 @@ const Platform = require('../../Utilities/Platform');
const React = require('react');
const View = require('../View/View');
import type {ViewProps} from '../View/ViewPropTypes';
import type {NativeComponent} from '../../Renderer/shims/ReactNative';
import type {ViewProps} from '../View/ViewPropTypes';
type Props = $ReadOnly<{|
...ViewProps,
emulateUnlessSupported?: boolean,
|}>;
let exported;
let exported: Class<React$Component<Props>> | Class<NativeComponent<Props>>;
/**
* Renders nested content and automatically applies paddings reflect the portion

Просмотреть файл

@ -27,20 +27,19 @@ const requireNativeComponent = require('../../ReactNative/requireNativeComponent
const resolveAssetSource = require('../../Image/resolveAssetSource');
const splitLayoutProps = require('../../StyleSheet/splitLayoutProps');
import type {NativeMethodsMixinType} from '../../Renderer/shims/ReactNativeTypes';
import type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';
import type {PointProp} from '../../StyleSheet/PointPropType';
import type {ViewStyleProp} from '../../StyleSheet/StyleSheet';
import type {ColorValue} from '../../StyleSheet/StyleSheetTypes';
import type {
PressEvent,
ScrollEvent,
LayoutEvent,
} from '../../Types/CoreEventTypes';
import type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';
import type {NativeMethodsMixinType} from '../../Renderer/shims/ReactNativeTypes';
import type {ViewStyleProp} from '../../StyleSheet/StyleSheet';
import type {ViewProps} from '../View/ViewPropTypes';
import type {PointProp} from '../../StyleSheet/PointPropType';
import type {Props as ScrollViewStickyHeaderProps} from './ScrollViewStickyHeader';
import type {ColorValue} from '../../StyleSheet/StyleSheetTypes';
import type {State as ScrollResponderState} from '../ScrollResponder';
import type {ViewProps} from '../View/ViewPropTypes';
import type {Props as ScrollViewStickyHeaderProps} from './ScrollViewStickyHeader';
let AndroidScrollView;
let AndroidHorizontalScrollContentView;
@ -628,7 +627,7 @@ const standardVerticalContext: ContextType = Object.freeze({horizontal: false});
* supports out of the box.
*/
class ScrollView extends React.Component<Props, State> {
static Context = Context;
static Context: React$Context<ContextType> = Context;
/**
* Part 1: Removing ScrollResponder.Mixin:
*
@ -688,7 +687,7 @@ class ScrollView extends React.Component<Props, State> {
_stickyHeaderRefs: Map<string, StickyHeaderComponentType> = new Map();
_headerLayoutYs: Map<string, number> = new Map();
state = {
state: State = {
layoutHeight: null,
...ScrollResponder.Mixin.scrollResponderMixinGetInitialState(),
};
@ -941,7 +940,7 @@ class ScrollView extends React.Component<Props, State> {
this._innerViewRef = ref;
};
render() {
render(): React.Node | React.Element<string> {
let ScrollViewClass;
let ScrollContentContainerViewClass;
if (Platform.OS === 'android') {

Просмотреть файл

@ -38,7 +38,7 @@ type State = {
};
class ScrollViewStickyHeader extends React.Component<Props, State> {
state = {
state: State = {
measured: false,
layoutY: 0,
layoutHeight: 0,
@ -63,7 +63,7 @@ class ScrollViewStickyHeader extends React.Component<Props, State> {
}
};
render() {
render(): React.Node {
const {inverted, scrollViewHeight} = this.props;
const {measured, layoutHeight, layoutY, nextHeaderLayoutY} = this.state;
const inputRange: Array<number> = [-1, 0];

Просмотреть файл

@ -19,10 +19,10 @@ const requireNativeComponent = require('../../../ReactNative/requireNativeCompon
const RCTScrollView = requireNativeComponent('RCTScrollView');
const ScrollViewComponent = jest.genMockFromModule('../ScrollView');
const ScrollViewComponent: $FlowFixMe = jest.genMockFromModule('../ScrollView');
class ScrollViewMock extends ScrollViewComponent {
render() {
render(): React.Element<string> {
return (
<RCTScrollView {...this.props}>
{this.props.refreshControl}

Просмотреть файл

@ -20,4 +20,4 @@ export interface Spec extends TurboModule {
+playTouchSound: () => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('SoundManager');
export default (TurboModuleRegistry.getEnforcing<Spec>('SoundManager'): Spec);

Просмотреть файл

@ -43,7 +43,7 @@ class StaticContainer extends React.Component<Props> {
return !!nextProps.shouldUpdate;
}
render() {
render(): null | React$Node {
const child = this.props.children;
return child === null || child === false
? null

Просмотреть файл

@ -45,4 +45,6 @@ export interface Spec extends TurboModule {
+setHidden: (hidden: boolean, withAnimation?: ?string) => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('StatusBarManager');
export default (TurboModuleRegistry.getEnforcing<Spec>(
'StatusBarManager',
): Spec);

Просмотреть файл

@ -10,10 +10,11 @@
'use strict';
const React = require('react');
const Platform = require('../../Utilities/Platform');
const React = require('react');
const processColor = require('../../StyleSheet/processColor');
import NativeStatusBarManager from './NativeStatusBarManager';
/**
@ -245,7 +246,7 @@ class StatusBar extends React.Component<Props> {
*
* @platform android
*/
static currentHeight = NativeStatusBarManager.getConstants().HEIGHT;
static currentHeight: number = NativeStatusBarManager.getConstants().HEIGHT;
// Provide an imperative API as static functions of the component.
// See the corresponding prop for more detail.
@ -339,7 +340,7 @@ class StatusBar extends React.Component<Props> {
*
* @param props Object containing the StatusBar props to use in the stack entry.
*/
static pushStackEntry(props: any) {
static pushStackEntry(props: any): any {
const entry = createStackEntry(props);
StatusBar._propsStack.push(entry);
StatusBar._updatePropsStack();
@ -365,7 +366,7 @@ class StatusBar extends React.Component<Props> {
* @param entry Entry returned from `pushStackEntry` to replace.
* @param props Object containing the StatusBar props to use in the replacement stack entry.
*/
static replaceStackEntry(entry: any, props: any) {
static replaceStackEntry(entry: any, props: any): any {
const newEntry = createStackEntry(props);
const index = StatusBar._propsStack.indexOf(entry);
if (index !== -1) {
@ -375,7 +376,10 @@ class StatusBar extends React.Component<Props> {
return newEntry;
}
static defaultProps = {
static defaultProps: $TEMPORARY$object<{|
animated: boolean,
showHideTransition: $TEMPORARY$string<'fade'>,
|}> = {
animated: false,
showHideTransition: 'fade',
};

Просмотреть файл

@ -11,6 +11,7 @@
'use strict';
const NativeEventEmitter = require('../../EventEmitter/NativeEventEmitter');
import NativeStatusBarManager from './NativeStatusBarManager';
/**
@ -18,4 +19,4 @@ import NativeStatusBarManager from './NativeStatusBarManager';
*/
class StatusBarIOS extends NativeEventEmitter {}
module.exports = new StatusBarIOS(NativeStatusBarManager);
module.exports = (new StatusBarIOS(NativeStatusBarManager): StatusBarIOS);

Просмотреть файл

@ -10,15 +10,15 @@
'use strict';
import SwitchNativeComponent from './SwitchNativeComponent';
const AndroidSwitchNativeComponent = require('./AndroidSwitchNativeComponent');
const Platform = require('../../Utilities/Platform');
const React = require('react');
const StyleSheet = require('../../StyleSheet/StyleSheet');
import type {SyntheticEvent} from '../../Types/CoreEventTypes';
import type {ColorValue} from '../../StyleSheet/StyleSheetTypes';
import type {SyntheticEvent} from '../../Types/CoreEventTypes';
import type {ViewProps} from '../View/ViewPropTypes';
import SwitchNativeComponent from './SwitchNativeComponent';
type SwitchChangeEvent = SyntheticEvent<
$ReadOnly<{|
@ -93,7 +93,7 @@ class Switch extends React.Component<Props> {
typeof SwitchNativeComponent | typeof AndroidSwitchNativeComponent,
>;
render() {
render(): React.Node {
const {
disabled,
ios_backgroundColor,

Просмотреть файл

@ -12,7 +12,7 @@
import {requireNativeComponent} from 'react-native';
const AndroidTextInputNativeComponent = requireNativeComponent(
const AndroidTextInputNativeComponent: string = requireNativeComponent(
'AndroidTextInput',
);

Просмотреть файл

@ -79,7 +79,7 @@ function unregisterInput(textFieldID: number) {
inputs.delete(textFieldID);
}
function isTextInput(textFieldID: number) {
function isTextInput(textFieldID: number): boolean {
return inputs.has(textFieldID);
}

Просмотреть файл

@ -30,4 +30,4 @@ export interface Spec extends TurboModule {
+open: (options: TimePickerOptions) => Promise<TimePickerResult>;
}
export default TurboModuleRegistry.get<Spec>('TimePickerAndroid');
export default (TurboModuleRegistry.get<Spec>('TimePickerAndroid'): ?Spec);

Просмотреть файл

@ -36,4 +36,4 @@ export interface Spec extends TurboModule {
) => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('ToastAndroid');
export default (TurboModuleRegistry.getEnforcing<Spec>('ToastAndroid'): Spec);

Просмотреть файл

@ -23,8 +23,8 @@ const View = require('../View/View');
const keyMirror = require('fbjs/lib/keyMirror');
const normalizeColor = require('../../Color/normalizeColor');
import type {PressEvent} from '../../Types/CoreEventTypes';
import type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';
import type {PressEvent} from '../../Types/CoreEventTypes';
const extractSingleTouch = nativeEvent => {
const touches = nativeEvent.touches;
@ -409,7 +409,9 @@ const TouchableMixin = {
* @return {object} State object to be placed inside of
* `this.state.touchable`.
*/
touchableGetInitialState: function() {
touchableGetInitialState: function(): $TEMPORARY$object<{|
touchable: $TEMPORARY$object<{|responderID: null, touchState: void|}>,
|}> {
return {
touchable: {touchState: undefined, responderID: null},
};
@ -419,21 +421,21 @@ const TouchableMixin = {
/**
* Must return true if embedded in a native platform scroll view.
*/
touchableHandleResponderTerminationRequest: function() {
touchableHandleResponderTerminationRequest: function(): any {
return !this.props.rejectResponderTermination;
},
/**
* Must return true to start the process of `Touchable`.
*/
touchableHandleStartShouldSetResponder: function() {
touchableHandleStartShouldSetResponder: function(): any {
return !this.props.disabled;
},
/**
* Return true to cancel press on long press.
*/
touchableLongPressCancelsPress: function() {
touchableLongPressCancelsPress: function(): boolean {
return true;
},
@ -784,7 +786,7 @@ const TouchableMixin = {
this.longPressDelayTimeout = null;
},
_isHighlight: function(state: State) {
_isHighlight: function(state: State): boolean {
return (
state === States.RESPONDER_ACTIVE_PRESS_IN ||
state === States.RESPONDER_ACTIVE_LONG_PRESS_IN
@ -805,7 +807,7 @@ const TouchableMixin = {
aY: number,
bX: number,
bY: number,
) {
): number {
const deltaX = aX - bX;
const deltaY = aY - bY;
return Math.sqrt(deltaX * deltaX + deltaY * deltaY);
@ -907,7 +909,7 @@ const TouchableMixin = {
}
},
withoutDefaultFocusAndBlur: {},
withoutDefaultFocusAndBlur: ({}: $TEMPORARY$object<{||}>),
};
/**
@ -935,7 +937,7 @@ const Touchable = {
}: {
color: string | number,
hitSlop: EdgeInsetsProp,
}) => {
}): null | React.Node => {
if (!Touchable.TOUCH_TARGET_DEBUG) {
return null;
}

Просмотреть файл

@ -23,7 +23,7 @@ class UnimplementedView extends React.Component<$FlowFixMeProps> {
// See ensureComponentIsNative.js for more info
}
render() {
render(): React.Node {
// Workaround require cycle from requireNativeComponent
const View = require('../View/View');
return (

Просмотреть файл

@ -15,8 +15,8 @@ const ReactNativeViewConfig = {
uiViewClassName: 'RCTView',
baseModuleName: null,
Manager: 'ViewManager',
Commands: {},
Constants: {},
Commands: ({}: $TEMPORARY$object<{||}>),
Constants: ({}: $TEMPORARY$object<{||}>),
bubblingEventTypes: {
...ReactNativeViewViewConfigAndroid.bubblingEventTypes,
topBlur: {

Просмотреть файл

@ -10,10 +10,11 @@
'use strict';
const ReactNative = require('../../Renderer/shims/ReactNative');
const Platform = require('../../Utilities/Platform');
const registerGeneratedViewConfig = require('../../Utilities/registerGeneratedViewConfig');
const ReactNative = require('../../Renderer/shims/ReactNative');
const ReactNativeViewViewConfigAndroid = require('./ReactNativeViewViewConfigAndroid');
const registerGeneratedViewConfig = require('../../Utilities/registerGeneratedViewConfig');
const requireNativeComponent = require('../../ReactNative/requireNativeComponent');
import type {ViewProps} from './ViewPropTypes';
@ -23,7 +24,30 @@ export type ViewNativeComponentType = Class<
>;
let NativeViewComponent;
let viewConfig;
let viewConfig:
| $TEMPORARY$object<{||}>
| $TEMPORARY$object<{|
bubblingEventTypes?: $ReadOnly<{
[eventName: string]: $ReadOnly<{|
phasedRegistrationNames: $ReadOnly<{|
bubbled: string,
captured: string,
|}>,
|}>,
}>,
directEventTypes?: $ReadOnly<{
[eventName: string]: $ReadOnly<{|registrationName: string|}>,
}>,
uiViewClassName: string,
validAttributes?: {
[propName: string]:
| true
| $ReadOnly<{|
diff?: <T>(arg1: any, arg2: any) => boolean,
process?: (arg1: any) => any,
|}>,
},
|}>;
// Only use the JS view config in DEV
if (__DEV__) {

Просмотреть файл

@ -13,7 +13,7 @@
import type {ExtendedError} from './Devtools/parseErrorStack';
class SyntheticError extends Error {
name = '';
name: string = '';
}
/**

Просмотреть файл

@ -25,4 +25,4 @@ export interface Spec extends TurboModule {
) => void;
}
export default TurboModuleRegistry.getEnforcing<Spec>('SegmentFetcher');
export default (TurboModuleRegistry.getEnforcing<Spec>('SegmentFetcher'): Spec);

Просмотреть файл

@ -9,15 +9,14 @@
*/
'use strict';
const BatchedBridge = require('../../BatchedBridge/BatchedBridge');
const Platform = require('../../Utilities/Platform');
const Systrace = require('../../Performance/Systrace');
const invariant = require('invariant');
const BatchedBridge = require('../../BatchedBridge/BatchedBridge');
import NativeTiming from './NativeTiming';
import type {ExtendedError} from '../Devtools/parseErrorStack';
import NativeTiming from './NativeTiming';
let _performanceNow = null;
function performanceNow() {
@ -498,7 +497,22 @@ function setSendIdleEvents(sendIdleEvents: boolean): void {
NativeTiming.setSendIdleEvents(sendIdleEvents);
}
let ExportedJSTimers;
let ExportedJSTimers: $TEMPORARY$object<{|
callIdleCallbacks: (frameTime: number) => any | void,
callImmediates: () => void,
callTimers: (timersToCall: Array<number>) => any | void,
cancelAnimationFrame: (timerID: number) => void,
cancelIdleCallback: (timerID: number) => void,
clearImmediate: (timerID: number) => void,
clearInterval: (timerID: number) => void,
clearTimeout: (timerID: number) => void,
emitTimeDriftWarning: (warningMessage: string) => any | void,
requestAnimationFrame: (func: any) => any | number,
requestIdleCallback: (func: any, options: ?any) => any | number,
setImmediate: (func: any, ...args: any) => number,
setInterval: (func: any, duration: number, ...args: any) => number,
setTimeout: (func: any, duration: number, ...args: any) => number,
|}>;
if (!NativeTiming) {
console.warn("Timing native module is not available, can't set timers.");
// $FlowFixMe: we can assume timers are generally available

Просмотреть файл

@ -24,4 +24,4 @@ export interface Spec extends TurboModule {
+setSendIdleEvents: (sendIdleEvents: boolean) => void;
}
export default TurboModuleRegistry.get<Spec>('Timing');
export default (TurboModuleRegistry.get<Spec>('Timing'): ?Spec);

Просмотреть файл

@ -12,7 +12,12 @@
const PropTypes = require('prop-types');
const DeprecatedEdgeInsetsPropType = PropTypes.shape({
const DeprecatedEdgeInsetsPropType: React$PropType$Primitive<{
bottom?: number,
left?: number,
right?: number,
top?: number,
}> = PropTypes.shape({
top: PropTypes.number,
left: PropTypes.number,
bottom: PropTypes.number,

Просмотреть файл

@ -17,9 +17,11 @@ const DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');
const PropTypes = require('prop-types');
module.exports = {
style: DeprecatedStyleSheetPropType(DeprecatedImageStylePropTypes),
style: (DeprecatedStyleSheetPropType(
DeprecatedImageStylePropTypes,
): ReactPropsCheckType),
source: DeprecatedImageSourcePropType,
defaultSource: PropTypes.oneOfType([
defaultSource: (PropTypes.oneOfType([
PropTypes.shape({
uri: PropTypes.string,
width: PropTypes.number,
@ -27,7 +29,9 @@ module.exports = {
scale: PropTypes.number,
}),
PropTypes.number,
]),
]): React$PropType$Primitive<
{height?: number, scale?: number, uri?: string, width?: number} | number,
>),
accessible: PropTypes.bool,
@ -37,15 +41,21 @@ module.exports = {
capInsets: DeprecatedEdgeInsetsPropType,
resizeMethod: PropTypes.oneOf(['auto', 'resize', 'scale']),
resizeMethod: (PropTypes.oneOf([
'auto',
'resize',
'scale',
]): React$PropType$Primitive<'auto' | 'resize' | 'scale'>),
resizeMode: PropTypes.oneOf([
resizeMode: (PropTypes.oneOf([
'cover',
'contain',
'stretch',
'repeat',
'center',
]),
]): React$PropType$Primitive<
'cover' | 'contain' | 'stretch' | 'repeat' | 'center',
>),
testID: PropTypes.string,

Просмотреть файл

@ -11,27 +11,35 @@
const DeprecatedColorPropType = require('./DeprecatedColorPropType');
const DeprecatedLayoutPropTypes = require('./DeprecatedLayoutPropTypes');
const ReactPropTypes = require('prop-types');
const DeprecatedShadowPropTypesIOS = require('./DeprecatedShadowPropTypesIOS');
const DeprecatedTransformPropTypes = require('./DeprecatedTransformPropTypes');
const ReactPropTypes = require('prop-types');
const ImageStylePropTypes = {
...DeprecatedLayoutPropTypes,
...DeprecatedShadowPropTypesIOS,
...DeprecatedTransformPropTypes,
resizeMode: ReactPropTypes.oneOf([
resizeMode: (ReactPropTypes.oneOf([
'center',
'contain',
'cover',
'repeat',
'stretch',
]),
backfaceVisibility: ReactPropTypes.oneOf(['visible', 'hidden']),
]): React$PropType$Primitive<
'center' | 'contain' | 'cover' | 'repeat' | 'stretch',
>),
backfaceVisibility: (ReactPropTypes.oneOf([
'visible',
'hidden',
]): React$PropType$Primitive<'visible' | 'hidden'>),
backgroundColor: DeprecatedColorPropType,
borderColor: DeprecatedColorPropType,
borderWidth: ReactPropTypes.number,
borderRadius: ReactPropTypes.number,
overflow: ReactPropTypes.oneOf(['visible', 'hidden']),
overflow: (ReactPropTypes.oneOf([
'visible',
'hidden',
]): React$PropType$Primitive<'visible' | 'hidden'>),
/**
* Changes the color of all the non-transparent pixels to the tintColor.

Просмотреть файл

@ -13,121 +13,129 @@
const ReactPropTypes = require('prop-types');
const LayoutPropTypes = {
display: ReactPropTypes.oneOf(['none', 'flex']),
width: ReactPropTypes.oneOfType([
display: (ReactPropTypes.oneOf(['none', 'flex']): React$PropType$Primitive<
'none' | 'flex',
>),
width: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
height: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
height: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
start: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
start: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
end: ReactPropTypes.oneOfType([ReactPropTypes.number, ReactPropTypes.string]),
top: ReactPropTypes.oneOfType([ReactPropTypes.number, ReactPropTypes.string]),
left: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
end: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
right: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
top: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
bottom: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
left: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
minWidth: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
right: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
maxWidth: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
bottom: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
minHeight: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
minWidth: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
maxHeight: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
maxWidth: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
margin: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
minHeight: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginVertical: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
maxHeight: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginHorizontal: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
margin: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginTop: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginVertical: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginBottom: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginHorizontal: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginLeft: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginTop: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginRight: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginBottom: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginStart: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginLeft: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
marginEnd: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginRight: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
padding: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginStart: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingVertical: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
marginEnd: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingHorizontal: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
padding: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingTop: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingVertical: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingBottom: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingHorizontal: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingLeft: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingTop: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingRight: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingBottom: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingStart: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingLeft: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
paddingEnd: ReactPropTypes.oneOfType([
]): React$PropType$Primitive<number | string>),
paddingRight: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
]): React$PropType$Primitive<number | string>),
paddingStart: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]): React$PropType$Primitive<number | string>),
paddingEnd: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]): React$PropType$Primitive<number | string>),
borderWidth: ReactPropTypes.number,
borderTopWidth: ReactPropTypes.number,
borderStartWidth: ReactPropTypes.number,
@ -135,56 +143,91 @@ const LayoutPropTypes = {
borderRightWidth: ReactPropTypes.number,
borderBottomWidth: ReactPropTypes.number,
borderLeftWidth: ReactPropTypes.number,
position: ReactPropTypes.oneOf(['absolute', 'relative']),
flexDirection: ReactPropTypes.oneOf([
position: (ReactPropTypes.oneOf([
'absolute',
'relative',
]): React$PropType$Primitive<'absolute' | 'relative'>),
flexDirection: (ReactPropTypes.oneOf([
'row',
'row-reverse',
'column',
'column-reverse',
]),
flexWrap: ReactPropTypes.oneOf(['wrap', 'nowrap', 'wrap-reverse']),
justifyContent: ReactPropTypes.oneOf([
]): React$PropType$Primitive<
'row' | 'row-reverse' | 'column' | 'column-reverse',
>),
flexWrap: (ReactPropTypes.oneOf([
'wrap',
'nowrap',
'wrap-reverse',
]): React$PropType$Primitive<'wrap' | 'nowrap' | 'wrap-reverse'>),
justifyContent: (ReactPropTypes.oneOf([
'flex-start',
'flex-end',
'center',
'space-between',
'space-around',
'space-evenly',
]),
alignItems: ReactPropTypes.oneOf([
]): React$PropType$Primitive<
| 'flex-start'
| 'flex-end'
| 'center'
| 'space-between'
| 'space-around'
| 'space-evenly',
>),
alignItems: (ReactPropTypes.oneOf([
'flex-start',
'flex-end',
'center',
'stretch',
'baseline',
]),
alignSelf: ReactPropTypes.oneOf([
]): React$PropType$Primitive<
'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline',
>),
alignSelf: (ReactPropTypes.oneOf([
'auto',
'flex-start',
'flex-end',
'center',
'stretch',
'baseline',
]),
alignContent: ReactPropTypes.oneOf([
]): React$PropType$Primitive<
'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline',
>),
alignContent: (ReactPropTypes.oneOf([
'flex-start',
'flex-end',
'center',
'stretch',
'space-between',
'space-around',
]),
overflow: ReactPropTypes.oneOf(['visible', 'hidden', 'scroll']),
]): React$PropType$Primitive<
| 'flex-start'
| 'flex-end'
| 'center'
| 'stretch'
| 'space-between'
| 'space-around',
>),
overflow: (ReactPropTypes.oneOf([
'visible',
'hidden',
'scroll',
]): React$PropType$Primitive<'visible' | 'hidden' | 'scroll'>),
flex: ReactPropTypes.number,
flexGrow: ReactPropTypes.number,
flexShrink: ReactPropTypes.number,
flexBasis: ReactPropTypes.oneOfType([
flexBasis: (ReactPropTypes.oneOfType([
ReactPropTypes.number,
ReactPropTypes.string,
]),
]): React$PropType$Primitive<number | string>),
aspectRatio: ReactPropTypes.number,
zIndex: ReactPropTypes.number,
direction: ReactPropTypes.oneOf(['inherit', 'ltr', 'rtl']),
direction: (ReactPropTypes.oneOf([
'inherit',
'ltr',
'rtl',
]): React$PropType$Primitive<'inherit' | 'ltr' | 'rtl'>),
};
module.exports = LayoutPropTypes;

Просмотреть файл

@ -12,7 +12,10 @@
const PropTypes = require('prop-types');
const PointPropType = PropTypes.shape({
const PointPropType: React$PropType$Primitive<{
x?: number,
y?: number,
}> = PropTypes.shape({
x: PropTypes.number,
y: PropTypes.number,
});

Просмотреть файл

@ -14,10 +14,10 @@ const ReactPropTypes = require('prop-types');
const DeprecatedShadowPropTypesIOS = {
shadowColor: DeprecatedColorPropType,
shadowOffset: ReactPropTypes.shape({
shadowOffset: (ReactPropTypes.shape({
width: ReactPropTypes.number,
height: ReactPropTypes.number,
}),
}): React$PropType$Primitive<{height?: number, width?: number}>),
shadowOpacity: ReactPropTypes.number,
shadowRadius: ReactPropTypes.number,
};

Просмотреть файл

@ -16,12 +16,23 @@ const DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');
const PropTypes = require('prop-types');
const TextStylePropTypes = require('../Text/TextStylePropTypes');
const stylePropType = DeprecatedStyleSheetPropType(TextStylePropTypes);
const stylePropType: ReactPropsCheckType = DeprecatedStyleSheetPropType(
TextStylePropTypes,
);
module.exports = {
ellipsizeMode: PropTypes.oneOf(['head', 'middle', 'tail', 'clip']),
ellipsizeMode: (PropTypes.oneOf([
'head',
'middle',
'tail',
'clip',
]): React$PropType$Primitive<'head' | 'middle' | 'tail' | 'clip'>),
numberOfLines: PropTypes.number,
textBreakStrategy: PropTypes.oneOf(['simple', 'highQuality', 'balanced']),
textBreakStrategy: (PropTypes.oneOf([
'simple',
'highQuality',
'balanced',
]): React$PropType$Primitive<'simple' | 'highQuality' | 'balanced'>),
onLayout: PropTypes.func,
onPress: PropTypes.func,
onLongPress: PropTypes.func,

Просмотреть файл

@ -41,7 +41,7 @@ const DecomposedMatrixPropType = function(
};
const DeprecatedTransformPropTypes = {
transform: ReactPropTypes.arrayOf(
transform: (ReactPropTypes.arrayOf(
ReactPropTypes.oneOfType([
ReactPropTypes.shape({perspective: ReactPropTypes.number}),
ReactPropTypes.shape({rotate: ReactPropTypes.string}),
@ -56,29 +56,44 @@ const DeprecatedTransformPropTypes = {
ReactPropTypes.shape({skewX: ReactPropTypes.string}),
ReactPropTypes.shape({skewY: ReactPropTypes.string}),
]),
),
): React$PropType$Primitive<
Array<
| {perspective?: number}
| {rotate?: string}
| {rotateX?: string}
| {rotateY?: string}
| {rotateZ?: string}
| {scale?: number}
| {scaleX?: number}
| {scaleY?: number}
| {translateX?: number}
| {translateY?: number}
| {skewX?: string}
| {skewY?: string},
>,
>),
transformMatrix: TransformMatrixPropType,
decomposedMatrix: DecomposedMatrixPropType,
scaleX: deprecatedPropType(
scaleX: (deprecatedPropType(
ReactPropTypes.number,
'Use the transform prop instead.',
),
scaleY: deprecatedPropType(
): ReactPropsCheckType),
scaleY: (deprecatedPropType(
ReactPropTypes.number,
'Use the transform prop instead.',
),
rotation: deprecatedPropType(
): ReactPropsCheckType),
rotation: (deprecatedPropType(
ReactPropTypes.number,
'Use the transform prop instead.',
),
translateX: deprecatedPropType(
): ReactPropsCheckType),
translateX: (deprecatedPropType(
ReactPropTypes.number,
'Use the transform prop instead.',
),
translateY: deprecatedPropType(
): ReactPropsCheckType),
translateY: (deprecatedPropType(
ReactPropTypes.number,
'Use the transform prop instead.',
),
): ReactPropsCheckType),
};
module.exports = DeprecatedTransformPropTypes;

Просмотреть файл

@ -11,17 +11,17 @@
'use strict';
const DeprecatedEdgeInsetsPropType = require('./DeprecatedEdgeInsetsPropType');
const PlatformViewPropTypes = require('../Components/View/PlatformViewPropTypes');
const PropTypes = require('prop-types');
const DeprecatedStyleSheetPropType = require('./DeprecatedStyleSheetPropType');
const DeprecatedViewStylePropTypes = require('./DeprecatedViewStylePropTypes');
const PlatformViewPropTypes = require('../Components/View/PlatformViewPropTypes');
const PropTypes = require('prop-types');
const {
DeprecatedAccessibilityRoles,
DeprecatedAccessibilityStates,
} = require('./DeprecatedViewAccessibility');
const stylePropType = DeprecatedStyleSheetPropType(
const stylePropType: ReactPropsCheckType = DeprecatedStyleSheetPropType(
DeprecatedViewStylePropTypes,
);
@ -58,7 +58,9 @@ module.exports = {
*
* @platform ios
*/
accessibilityActions: PropTypes.arrayOf(PropTypes.string),
accessibilityActions: (PropTypes.arrayOf(
PropTypes.string,
): React$PropType$Primitive<Array<string>>),
/**
* Prevents view from being inverted if set to true and color inversion is turned on.
@ -70,14 +72,55 @@ module.exports = {
/**
* Indicates to accessibility services to treat UI component like a specific role.
*/
accessibilityRole: PropTypes.oneOf(DeprecatedAccessibilityRoles),
accessibilityRole: (PropTypes.oneOf(
DeprecatedAccessibilityRoles,
): React$PropType$Primitive<
| 'none'
| 'button'
| 'link'
| 'search'
| 'image'
| 'keyboardkey'
| 'text'
| 'adjustable'
| 'imagebutton'
| 'header'
| 'summary'
| 'alert'
| 'checkbox'
| 'combobox'
| 'menu'
| 'menubar'
| 'menuitem'
| 'progressbar'
| 'radio'
| 'radiogroup'
| 'scrollbar'
| 'spinbutton'
| 'switch'
| 'tab'
| 'tablist'
| 'timer'
| 'toolbar',
>),
/**
* Indicates to accessibility services that UI Component is in a specific State.
*/
accessibilityStates: PropTypes.arrayOf(
accessibilityStates: (PropTypes.arrayOf(
PropTypes.oneOf(DeprecatedAccessibilityStates),
),
): React$PropType$Primitive<
Array<
| 'selected'
| 'disabled'
| 'checked'
| 'unchecked'
| 'busy'
| 'expanded'
| 'collapsed'
| 'hasPopup',
>,
>),
accessibilityState: PropTypes.object,
/**
* Indicates to accessibility services whether the user should be notified
@ -87,7 +130,11 @@ module.exports = {
*
* See http://facebook.github.io/react-native/docs/view.html#accessibilityliveregion
*/
accessibilityLiveRegion: PropTypes.oneOf(['none', 'polite', 'assertive']),
accessibilityLiveRegion: (PropTypes.oneOf([
'none',
'polite',
'assertive',
]): React$PropType$Primitive<'none' | 'polite' | 'assertive'>),
/**
* Controls how view is important for accessibility which is if it
@ -98,12 +145,12 @@ module.exports = {
*
* See http://facebook.github.io/react-native/docs/view.html#importantforaccessibility
*/
importantForAccessibility: PropTypes.oneOf([
importantForAccessibility: (PropTypes.oneOf([
'auto',
'yes',
'no',
'no-hide-descendants',
]),
]): React$PropType$Primitive<'auto' | 'yes' | 'no' | 'no-hide-descendants'>),
/**
* A value indicating whether VoiceOver should ignore the elements
@ -314,7 +361,12 @@ module.exports = {
*
* See http://facebook.github.io/react-native/docs/view.html#pointerevents
*/
pointerEvents: PropTypes.oneOf(['box-none', 'none', 'box-only', 'auto']),
pointerEvents: (PropTypes.oneOf([
'box-none',
'none',
'box-only',
'auto',
]): React$PropType$Primitive<'box-none' | 'none' | 'box-only' | 'auto'>),
/**
* See http://facebook.github.io/react-native/docs/style.html

Просмотреть файл

@ -12,9 +12,9 @@
const DeprecatedColorPropType = require('./DeprecatedColorPropType');
const DeprecatedLayoutPropTypes = require('./DeprecatedLayoutPropTypes');
const ReactPropTypes = require('prop-types');
const DeprecatedShadowPropTypesIOS = require('./DeprecatedShadowPropTypesIOS');
const DeprecatedTransformPropTypes = require('./DeprecatedTransformPropTypes');
const ReactPropTypes = require('prop-types');
/**
* Warning: Some of these properties may not be supported in all releases.
@ -23,7 +23,10 @@ const DeprecatedViewStylePropTypes = {
...DeprecatedLayoutPropTypes,
...DeprecatedShadowPropTypesIOS,
...DeprecatedTransformPropTypes,
backfaceVisibility: ReactPropTypes.oneOf(['visible', 'hidden']),
backfaceVisibility: (ReactPropTypes.oneOf([
'visible',
'hidden',
]): React$PropType$Primitive<'visible' | 'hidden'>),
backgroundColor: DeprecatedColorPropType,
borderColor: DeprecatedColorPropType,
borderTopColor: DeprecatedColorPropType,
@ -41,7 +44,11 @@ const DeprecatedViewStylePropTypes = {
borderBottomRightRadius: ReactPropTypes.number,
borderBottomStartRadius: ReactPropTypes.number,
borderBottomEndRadius: ReactPropTypes.number,
borderStyle: ReactPropTypes.oneOf(['solid', 'dotted', 'dashed']),
borderStyle: (ReactPropTypes.oneOf([
'solid',
'dotted',
'dashed',
]): React$PropType$Primitive<'solid' | 'dotted' | 'dashed'>),
borderWidth: ReactPropTypes.number,
borderTopWidth: ReactPropTypes.number,
borderRightWidth: ReactPropTypes.number,

Просмотреть файл

@ -81,4 +81,4 @@ class RCTDeviceEventEmitter extends EventEmitter {
}
}
module.exports = new RCTDeviceEventEmitter();
module.exports = (new RCTDeviceEventEmitter(): RCTDeviceEventEmitter);

Просмотреть файл

@ -11,9 +11,8 @@
'use strict';
const InteractionManager = require('../Interaction/InteractionManager');
const React = require('react');
const PropTypes = require('prop-types');
const React = require('react');
const infoLog = require('../Utilities/infoLog');
@ -104,11 +103,16 @@ class Incremental extends React.Component<Props, State> {
_mounted: boolean;
_rendered: boolean;
static defaultProps = {
static defaultProps: $TEMPORARY$object<{|name: string|}> = {
name: '',
};
static contextTypes = {
static contextTypes:
| any
| $TEMPORARY$object<{|
incrementalGroup: React$PropType$Primitive<any>,
incrementalGroupEnabled: React$PropType$Primitive<boolean>,
|}> = {
incrementalGroup: PropTypes.object,
incrementalGroupEnabled: PropTypes.bool,
};

Просмотреть файл

@ -93,8 +93,9 @@ function Block(props: Object) {
const Row = (props: Object) => <View style={styles.row} {...props} />;
class IncrementalExample extends React.Component<mixed, {stats: ?Object}> {
static title = '<Incremental*>';
static description = 'Enables incremental rendering of complex components.';
static title: string = '<Incremental*>';
static description: string =
'Enables incremental rendering of complex components.';
start: number;
constructor(props: mixed, context: mixed) {
super(props, context);

Просмотреть файл

@ -15,9 +15,9 @@ const PropTypes = require('prop-types');
const React = require('react');
const View = require('../Components/View/View');
import type {Context} from './Incremental';
import type {ViewStyleProp} from '../StyleSheet/StyleSheet';
import type {LayoutEvent} from '../Types/CoreEventTypes';
import type {Context} from './Incremental';
/**
* WARNING: EXPERIMENTAL. Breaking changes will probably happen a lot and will
@ -44,7 +44,12 @@ class IncrementalPresenter extends React.Component<Props> {
context: Context;
_isDone: boolean;
static contextTypes = {
static contextTypes:
| any
| $TEMPORARY$object<{|
incrementalGroup: React$PropType$Primitive<any>,
incrementalGroupEnabled: React$PropType$Primitive<boolean>,
|}> = {
incrementalGroup: PropTypes.object,
incrementalGroupEnabled: PropTypes.bool,
};
@ -67,7 +72,7 @@ class IncrementalPresenter extends React.Component<Props> {
}
this.props.onDone && this.props.onDone();
}
render() {
render(): React.Node {
let style: ViewStyleProp;
if (
this.props.disabled !== true &&

Просмотреть файл

@ -170,7 +170,15 @@ class WindowedListView extends React.Component<Props, State> {
_scrollRef: ?ScrollView;
_viewabilityHelper: ViewabilityHelper;
static defaultProps = {
static defaultProps: $TEMPORARY$object<{|
disableIncrementalRendering: boolean,
initialNumToRender: number,
maxNumToRender: number,
numToRenderAhead: number,
recomputeRowsBatchingPeriod: number,
renderScrollComponent: (props: any) => React.Node,
viewablePercentThreshold: number,
|}> = {
initialNumToRender: 10,
maxNumToRender: 30,
numToRenderAhead: 10,

Просмотреть файл

@ -21,4 +21,4 @@ export interface Spec extends TurboModule {
+captureComplete: (path: string, error: ?string) => void;
}
export default TurboModuleRegistry.get<Spec>('HeapCapture');
export default (TurboModuleRegistry.get<Spec>('HeapCapture'): ?Spec);

Просмотреть файл

@ -47,7 +47,7 @@ function getSizeWithHeaders(
headers: {[string]: string},
success: (width: number, height: number) => void,
failure?: (error: any) => void,
) {
): any {
return ImageViewManager.getSizeWithHeaders({uri, headers})
.then(function(sizes) {
success(sizes.width, sizes.height);
@ -60,7 +60,7 @@ function getSizeWithHeaders(
);
}
function prefetch(url: string) {
function prefetch(url: string): any {
return ImageViewManager.prefetchImage(url);
}

Просмотреть файл

@ -56,7 +56,7 @@ class ImageBackground extends React.Component<$FlowFixMeProps> {
this._viewRef = ref;
};
render() {
render(): React.Node {
const {children, style, imageStyle, imageRef, ...props} = this.props;
return (

Просмотреть файл

@ -14,11 +14,11 @@ import NativeImagePickerIOS from './NativeImagePickerIOS';
import invariant from 'invariant';
const ImagePickerIOS = {
canRecordVideos: function(callback: (result: boolean) => void) {
canRecordVideos: function(callback: (result: boolean) => void): void {
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
return NativeImagePickerIOS.canRecordVideos(callback);
},
canUseCamera: function(callback: (result: boolean) => void) {
canUseCamera: function(callback: (result: boolean) => void): void {
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
return NativeImagePickerIOS.canUseCamera(callback);
},
@ -29,7 +29,7 @@ const ImagePickerIOS = {
|}>,
successCallback: (imageURL: string, height: number, width: number) => void,
cancelCallback: () => void,
) {
): void {
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
var newConfig = {
@ -58,7 +58,7 @@ const ImagePickerIOS = {
|}>,
successCallback: (imageURL: string, height: number, width: number) => void,
cancelCallback: () => void,
) {
): void {
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
var newConfig = {

Просмотреть файл

@ -12,6 +12,6 @@
const requireNativeComponent = require('../ReactNative/requireNativeComponent');
const ImageViewNativeComponent = requireNativeComponent('RCTImageView');
const ImageViewNativeComponent: string = requireNativeComponent('RCTImageView');
module.exports = ImageViewNativeComponent;

Просмотреть файл

@ -35,4 +35,4 @@ export interface Spec extends TurboModule {
) => void;
}
export default TurboModuleRegistry.get<Spec>('ImagePickerIOS');
export default (TurboModuleRegistry.get<Spec>('ImagePickerIOS'): ?Spec);

Просмотреть файл

@ -15,7 +15,7 @@
const AssetRegistry = require('./AssetRegistry');
module.exports = AssetRegistry.registerAsset({
module.exports = (AssetRegistry.registerAsset({
__packager_asset: true,
fileSystemLocation: '/full/path/to/directory',
httpServerLocation: '/assets/full/path/to/directory',
@ -25,4 +25,4 @@ module.exports = AssetRegistry.registerAsset({
hash: 'nonsense',
name: 'icon',
type: 'png',
});
}): number);

Просмотреть файл

@ -12,6 +12,6 @@
const requireNativeComponent = require('../ReactNative/requireNativeComponent');
const TextInlineImage = requireNativeComponent('RCTTextInlineImage');
const TextInlineImage: string = requireNativeComponent('RCTTextInlineImage');
module.exports = TextInlineImage;

Просмотреть файл

@ -44,7 +44,10 @@ const drawableFileTypes = new Set([
'xml',
]);
function getAndroidResourceFolderName(asset: PackagerAsset, scale: number) {
function getAndroidResourceFolderName(
asset: PackagerAsset,
scale: number,
): string | $TEMPORARY$string<'raw'> {
if (!drawableFileTypes.has(asset.type)) {
return 'raw';
}
@ -63,7 +66,7 @@ function getAndroidResourceFolderName(asset: PackagerAsset, scale: number) {
return androidFolder;
}
function getAndroidResourceIdentifier(asset: PackagerAsset) {
function getAndroidResourceIdentifier(asset: PackagerAsset): string {
var folderPath = getBasePath(asset);
return (folderPath + '/' + asset.name)
.toLowerCase()
@ -72,7 +75,7 @@ function getAndroidResourceIdentifier(asset: PackagerAsset) {
.replace(/^assets_/, ''); // Remove "assets_" prefix
}
function getBasePath(asset: PackagerAsset) {
function getBasePath(asset: PackagerAsset): string {
var basePath = asset.httpServerLocation;
if (basePath[0] === '/') {
basePath = basePath.substr(1);

Просмотреть файл

@ -14,7 +14,7 @@ const React = require('react');
const View = require('../Components/View/View');
class BorderBox extends React.Component<$FlowFixMeProps> {
render() {
render(): $FlowFixMe | React.Node {
const box = this.props.box;
if (!box) {
return this.props.children;

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше