Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

👻 Flow Typing NativeModules #24875

Closed
RSNara opened this issue May 16, 2019 · 66 comments
Closed

👻 Flow Typing NativeModules #24875

RSNara opened this issue May 16, 2019 · 66 comments
Assignees
Labels
Flow Good first issue Interested in collaborating? Take a stab at fixing one of these issues. Help Wanted :octocat: Issues ideal for external contributors. Native Module Resolution: Locked This issue was locked by the bot. Type: Discussion Long running discussion.

Comments

@RSNara
Copy link
Contributor

RSNara commented May 16, 2019

Flow Typing NativeModules

The TurboModule system is nearly feature-complete on both Android and iOS. Before we rollout the system, we'd like to migrate all our OSS NativeModules to use it. As a prerequisite for this migration, all the the NativeModules must have spec files. There are currently 41 NativeModules in total, so there is a bunch of work to do. We'd love to use this as an opportunity to help get more people involved by contributing to React Native.

Instructions

  1. Pick an unclaimed module and comment that you're working on it.
  2. Create a Spec file called NativeXYZ.js, where XYZ is the name of the NativeModule.
  3. Define flow types based on the NativeModule's native methods.
  4. Change call-sites from NativeModules.XYZ to NativeXYZ
  5. Make sure flow passes
  6. Do one module per PR

What is a Spec file?

A Spec file looks like this:

NativeAnalytics.js

/**
 * Copyright 2004-present Facebook. All Rights Reserved.
 *
 * @flow strict-local
 * @format
 */

'use strict';

import type {TurboModule} from 'RCTExport';
import * as TurboModuleRegistry from 'TurboModuleRegistry';

export interface Spec extends TurboModule {
  +getConstants: () => {|
    constant1: string,
    constant2: boolean,
  |};
  +logCounter: (key: string, value: number) => void;
  +logEvent: (eventName: string, data: Object, analyticsModule: ?string) => void;
  +logRealtimeEvent: (
    eventName: string,
    data: Object,
    analyticsModule: ?string,
  ) => void;
}

export default TurboModuleRegistry.getEnforcing<Spec>(
  'Analytics',
);

Observations

  • We use TurboModuleRegistry.getEnforcing<Spec>('Analytics') as opposed to NativeModules.Analytics to require the NativeModule. TurboModuleRegistry.getEnforcing is an indirection that allows us to require both NativeModules and TurboModules. It throws if the NativeModule isn't there. In the case that a NativeModule is platform-specific, please use Platform.OS and conditionally call TurboModuleRegistry.getEnforcing.
  • Each Spec file exports an interface called Spec that extends TurboModule. This interface contains typings for methods exposed by the NativeModule/TurboModule.
  • NativeModule constants are declared in the return type of the getConstants() method. The old way of accessing constants as properties on NativeModule objects is deprecated and unsupported by the TurboModule system. On iOS, these constants map to the return type of constantsToExport in iOS and getConstants in Android.
  • Each Spec file is named Native*.js. The filename matters because our codegen uses it to name the generated Java interfaces, ObjC protocols, and C++ TurboModule subclasses. NativeAnalytics.js, for instance, will generate a Java interface and ObjC protocol called NativeAnalyticsSpec, and a C++ TurboModule class called NativeAnalyticsSpecJSI. After these Spec files are typed, we'll generate and check in the codegen output into this repository. Then, after we open source our codegen, we'll delete the generated interfaces, protocols, and C++ classes from this repository.
    • Note that the naming convention used here is not finalized, but stable enough for the time being.
  • This isn't a ViewManager. We're currently not focusing on ViewManagers. Therefore, there's no need to write spec files for them.
  • We're not using imported types. Our codegen doesn't support imported types. So, for the time being, all types used by the spec must be declared in the same file.

Supported Types

  • Methods with simple args:
    • string
    • boolean
    • number
    • Object
    • Array<*>*
  • Function and typed function:
    • Methods with nullable args
    • ?string
    • ?Object
    • ?Array<*>*
    • ?Function and nullable typed function
    • number and boolean are not supported
  • Methods with inline complex Object typed args
    • e.g. (x: {|foo: string, ... |}) => void
  • Methods that return a Promise<*>*
  • Synchronous methods that return simple non-nullable types
    • string
    • number
    • boolean
    • Object
    • Array<*>*
  • Optional methods with all variants above
  • Typed exported constants
  • Note: Flow unions aren't supported

How do you type NativeModules?

You have to deduce the types by looking at the NativeModule implementations on iOS and Android. Some NativeModules already have JS wrappers, so you could also look at those for writing the Spec files.

Guidelines

  • How do you know which methods are exported to JS?

    • On Android: Look for NativeModule non-inherited class methods annotated with @ReactMethod.
    • On iOS: Look for NativeModule non-inherited and inherited class methods wrapped in RCT_EXPORT_*_METHOD macros .
  • How do you know when a method should have a Promise return type?

    • On Android: The last argument of the method is the Promise object.
    • On iOS: The last two arguments are a RCTPromiseResolveBlock and RCTPromiseRejectBlock
  • What should the JS method name be?

    • On Android: It's the name of the Java method.
    • On iOS: It's the part of the selector before the first argument/color.
  • NSDictionary on iOS, and ReadableMap and WritableMap on Android translate to object literals in JS.

  • RCTResponseSenderBlock and RCTResponseErrorBlock on iOS, and Callback on Android translate to function literals in JS.

  • Try to avoid using Function and Object whenever possible.

  • In the case that a method or constant is unavailable on one platform, make it optional.

  • In the case that a NativeModule is unavailable on one platform, make it optional.

  • Where do you put the Spec file?

    • Most NativeModules belong to a Library (see the JS section of the table below), so you could write the Spec in the library. For the other NativeModules, write the spec inside react-native-github/Libraries/NativeModules/specs.

Platform-specific NativeModules

For platform-specific NativeModules, use Platform.OS to conditionally call TurboModuleRegistry.getEnforcing<Spec>. When changing the call-sites of these NativeModules, you may have to guard them with null checks to please flow.

Call-site Before

const NativeModules = require('NativeModules');
const IntentAndroid = NativeModules.IntentAndroid;

function foo() {
  if (Platform.OS === 'android') {
    IntentAndroid.method();
  }
}

Call-site After

const NativeIntentAndroid = require('NativeIntentAndroid');
const {Platform} = require('react-native');

function foo() {
  if (Platform.OS === 'android') {
    if (NativeIntentAndroid != null) {
      NativeIntentAndroid.method();
    }
  }
}

NativeModule List

Please claim a NativeModule from the list below.

⬜️ - Unclaimed
🚧 - Claimed / PR in progress
✅ - PR Merged

Status JS Name JS NativeModule Wrappers iOS Android
AccessibilityInfo react-native-github/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js AccessibilityInfoModule.java
AccessibilityManager react-native-github/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js RCTAccessibilityManager.m
AlertManager react-native-github/Libraries/Alert/Alert.js RCTAlertManager.m
AnimationDebugModule AnimationsDebugModule.java
AppState react-native-github/Libraries/AppState/AppState.js RCTAppState.m AppStateModule.java
BlobModule react-native-github/Libraries/Blob/BlobManager.js RCTBlobManager.mm BlobModule.java
DatePickerAndroid react-native-github/Libraries/Components/DatePickerAndroid/DatePickerAndroid.android.js DatePickerDialogModule.java
DevLoadingView react-native-github/Libraries/Utilities/HMRLoadingView.ios.js RCTDevLoadingView.m
DevSettings N/A RCTDevSettings.mm DevSettingsModule.java
DeviceEventManager N/A DeviceEventManagerModule.java
DeviceInfo react-native-github/Libraries/Utilities/DeviceInfo.js RCTDeviceInfo.m DeviceInfoModule.java
DialogManagerAndroid N/A DialogModule.java
ExceptionsManager react-native-github/Libraries/Core/ExceptionsManager.js RCTExceptionsManager.m ExceptionsManagerModule.java
FileReaderModule N/A RCTFileReaderModule.m FileReaderModule.java
HeadlessJsTaskSupport N/A HeadlessJsTaskSupportModule.java
I18nManager react-native-github/Libraries/ReactNative/I18nManager.js RCTI18nManager.m I18nManagerModule.java
ImageEditor N/A RCTImageEditingManager.m ImageEditingModule.java
ImageStore N/A RCTImageStoreManager.m ImageStoreManager.java
IntentAndroid react-native-github/Libraries/Linking/Linking.js IntentModule.java
JSCHeapCapture react-native-github/Libraries/Utilities/HeapCapture.js JSCHeapCapture.java
JSCSamplingProfiler react-native-github/Libraries/Performance/SamplingProfiler.js JSCSamplingProfiler.java
JSDevSupport react-native-github/Libraries/Utilities/JSDevSupportModule.js JSDevSupport.java
KeyboardObserver react-native-github/Libraries/Components/Keyboard/Keyboard.js (NativeEventEmitter) RCTKeyboardObserver.m
LinkingManager react-native-github/Libraries/Linking/Linking.js RCTLinkingManager.m
ModalManager N/A RCTModalManager.m
NativeAnimatedModule react-native-github/Libraries/Animated/src/NativeAnimatedHelper.js RCTNativeAnimatedModule.m NativeAnimatedModule.java
Networking react-native-github/Libraries/Network/RCTNetworking.android.js RCTNetworking.mm NetworkingModule.java
react-native-github/Libraries/Network/RCTNetworking.ios.js
PermissionsAndroid react-native-github/Libraries/PermissionsAndroid/PermissionsAndroid.js PermissionsModule.java
PlatformConstants react-native-github/Libraries/Utilities/Platform.android.js RCTPlatform.m AndroidInfoModule.java
react-native-github/Libraries/Utilities/Platform.ios.js
RedBox N/A RCTRedBox.m
SettingsManager react-native-github/Libraries/Settings/Settings.ios.js RCTSettingsManager
SourceCode react-native-github/Libraries/Share/Share.js RCTSourceCode.m SourceCodeModule.java
TVNavigationEventEmitter react-native-github/Libraries/Components/AppleTV/TVEventHandler.js RCTTVNavigationEventEmitter.m
TimePickerAndroid react-native-github/Libraries/Components/TimePickerAndroid/TimePickerAndroid.android.js TimePickerDialogModule.java
react-native-github/Libraries/Components/TimePickerAndroid/TimePickerAndroid.ios.js
Timing react-native-github/Libraries/Core/Timers/JSTimers.js RCTTiming.m Timing.java
ToastAndroid react-native-github/Libraries/Components/ToastAndroid/ToastAndroid.android.js ToastModule.java
UIManager RCTUIManager.m UIManagerModule.java
WebSocketModule react-native-github/Libraries/WebSocket/WebSocket.js RCTWebSocketModule.m WebSocketModule.java
@RSNara RSNara added Good first issue Interested in collaborating? Take a stab at fixing one of these issues. Help Wanted :octocat: Issues ideal for external contributors. Type: Discussion Long running discussion. labels May 16, 2019
@RSNara RSNara self-assigned this May 16, 2019
@RSNara RSNara changed the title Flow Typing NativeModules 👻 Flow Typing NativeModules May 16, 2019
@ericlewis
Copy link
Contributor

@RSNara any examples on how to handle event emitter classes?

@fkgozali
Copy link
Contributor

fkgozali commented May 16, 2019

any examples on how to handle event emitter classes?

export interface Spec extends TurboModule {
  +getConstants: () => {|
    // any constants it exports
  |};

  // add any exported methods

  // Then add these 2 methods:

  // Events
  +addListener: (eventName: string) => void;
  +removeListeners: (count: number) => void;
}

eric: I changed the comment for listeners to be generic

@ericlewis
Copy link
Contributor

ericlewis commented May 16, 2019

Also worth noting: there are some places in the code base that directly access constants in JS, they need to be changed to be grabbed from getConstants.

Example:

const DeviceInfo = require('./DeviceInfo');
dims = DeviceInfo.Dimensions;

becomes:

const DeviceInfo = require('./DeviceInfo');
dims = DeviceInfo.getConstants().Dimensions;

luckily, flow will complain about these if you do your typing right! So, just update the callsites.

@michalchudziak
Copy link
Contributor

Hey! I'd like to help with Linking module.

@gedeagas
Copy link
Contributor

Hi, I would like to help with DeviceInfo

@fkgozali
Copy link
Contributor

@michalchudziak, @gedeagas both were done by &ericlewis’ PRs

@fkgozali
Copy link
Contributor

PermissionAndroid/TimePickerAndroid are still open I think

@krizzu
Copy link
Contributor

krizzu commented May 16, 2019

I'll go with PermissionsAndroid then

@michalchudziak
Copy link
Contributor

michalchudziak commented May 16, 2019

Sure, no problem! Is it possible to work on AccessibilityManager & AccessibilityInfo?

Edit: I'm working on it :)

@wojteg1337
Copy link
Contributor

I work on ToastAndroid

@thymikee
Copy link
Contributor

Taking Networking

@jeanregisser
Copy link
Contributor

Working on Timing

@jeanregisser
Copy link
Contributor

Working on WebSocketModule

@chakrihacker

This comment has been minimized.

M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for TVNavigationEventEmitter
Pull Request resolved: facebook#24898

Reviewed By: fkgozali

Differential Revision: D15391716

Pulled By: rickhanlonii

fbshipit-source-id: 015120c755894a5c8f75a99c2670a6ac5545b454
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875.

## Changelog

[General] [Added] - add TM spec for FileReaderModule
Pull Request resolved: facebook#24904

Reviewed By: fkgozali

Differential Revision: D15391738

Pulled By: rickhanlonii

fbshipit-source-id: 69e6ff53aba2d2227607905e1f70310bdd01d224
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for SourceCode
Pull Request resolved: facebook#24901

Reviewed By: fkgozali

Differential Revision: D15391727

Pulled By: rickhanlonii

fbshipit-source-id: 9d4622d809efdc3955d435c5a51b72c38cedccc5
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875.

## Changelog

[General] [Added] - add TM spec for JSDevSupport
Pull Request resolved: facebook#24905

Reviewed By: fkgozali

Differential Revision: D15391754

Pulled By: rickhanlonii

fbshipit-source-id: afca6ce3d6bcfaaf097e13c148496cdd1f062465
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
part of facebook#24875. iOS only it appears, but not really used by RN itself. Should be fine?

## Changelog

[General] [Added] - Add TM spec for KeyboardObserver
Pull Request resolved: facebook#24881

Reviewed By: fkgozali

Differential Revision: D15391769

Pulled By: rickhanlonii

fbshipit-source-id: 557507f6063b40d1c68ec8739e23b33bc22ade39
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for TimePickerAndroid
Pull Request resolved: facebook#24897

Reviewed By: fkgozali

Differential Revision: D15424335

Pulled By: RSNara

fbshipit-source-id: a846de9353af58ad7d5e09678dd810ac33532105
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875, adds a spec for ExceptionsManager

## Changelog

[General] [Added] - TM Add spec for ExceptionsManager
Pull Request resolved: facebook#24900

Reviewed By: fkgozali

Differential Revision: D15434006

Pulled By: RSNara

fbshipit-source-id: 1a505744a84c0c4ac3a9fac6c91a391fbd8a9f46
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875. Not sure that the id’s types are necessarily correct here…

## Changelog

[General] [Added] - Add TM spec for BlobModule
Pull Request resolved: facebook#24909

Reviewed By: fkgozali

Differential Revision: D15433753

Pulled By: RSNara

fbshipit-source-id: 68193d1a82fc7c66d6cc7ba4f22a0d3786987599
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for AccessibilityInfo
Pull Request resolved: facebook#24891

Reviewed By: fkgozali

Differential Revision: D15394913

Pulled By: RSNara

fbshipit-source-id: e66e7b7fc4451575b5022695f125c15f9f4b707e
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875, adds a spec for HeapCapture

## Changelog

[General] [Added] - TM Spec for HeapCapture
Pull Request resolved: facebook#24899

Reviewed By: fkgozali

Differential Revision: D15393464

Pulled By: RSNara

fbshipit-source-id: d8778285753ce8dbc87204ecfbddfa7339acd264
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for Timing
Pull Request resolved: facebook#24889

Reviewed By: fkgozali

Differential Revision: D15379559

Pulled By: RSNara

fbshipit-source-id: d254fb4d1cae3533bbd63bf7ec739cebc6ca14b0
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875. Added `strict-local` to the NativeModuleHelper btw.

## Changelog

[General] [Added] - TM add spec for AnimatedModule
Pull Request resolved: facebook#24911

Reviewed By: rickhanlonii

Differential Revision: D15434114

Pulled By: fkgozali

fbshipit-source-id: ea9215306ebf969795ce755270b8fdc14c52da9c
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875.

## Changelog

[General] [Added] - TM add spec for DialogManagerAndroid
Pull Request resolved: facebook#24912

Reviewed By: fkgozali

Differential Revision: D15433854

Pulled By: RSNara

fbshipit-source-id: e7234debe16de5afbc770f8feee2471f41b54427
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for AlertManager
Pull Request resolved: facebook#24906

Reviewed By: lunaleaps

Differential Revision: D15471065

Pulled By: fkgozali

fbshipit-source-id: bb22e6454b1f748987f3a8cd957bfd4e027493a5
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
This PR solves part of this issue: facebook#24875
## Changelog

[General] [Added] - TM Spec for ImageEditor
Pull Request resolved: facebook#24921

Reviewed By: rickhanlonii

Differential Revision: D15471058

Pulled By: fkgozali

fbshipit-source-id: f01539fc8acea95fca27ce7bb4b4169ffe138d93
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog
[General] [Added] - Add TurboModule spec for ModalManager
Pull Request resolved: facebook#24896

Reviewed By: rickhanlonii

Differential Revision: D15471097

Pulled By: fkgozali

fbshipit-source-id: 99671583ddc2a6fc32fd1bcf9a6e340ad93a27c2
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for AccessibilityManager
Pull Request resolved: facebook#24894

Reviewed By: rickhanlonii

Differential Revision: D15471243

Pulled By: fkgozali

fbshipit-source-id: 33f39d41d70da9380f29f2eb47e8c7682b323030
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog
[General] [Added] - Add TurboModule spec for PermissionsAndroid
Pull Request resolved: facebook#24886

Reviewed By: RSNara

Differential Revision: D15542996

Pulled By: fkgozali

fbshipit-source-id: cab02d97e70d65347f63e891cff98c17adc1fdba
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
part of facebook#24875. I again, am not completely sure how the call site here works- appears settings can be directly accessed?

## Changelog

[General] [Added] - Add TM spec for Settings
Pull Request resolved: facebook#24879

Reviewed By: RSNara

Differential Revision: D15543012

Pulled By: fkgozali

fbshipit-source-id: a1df3096a2fc5fe8e65d0ed2398912530bd3911a
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
part of facebook#24875

## Changelog

[General] [Added] - Add TM spec for AndroidToast
Pull Request resolved: facebook#24888

Reviewed By: RSNara

Differential Revision: D15543043

Pulled By: fkgozali

fbshipit-source-id: 6636dd913f7c006704ead1aa92d37e42a4edf70e
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875, adds a spec for Networking. Since `sendRequest` methods are different for both platforms, I had to create 2 spec files as Flow would merge their definitions even when I added `Platform.OS` check

## Changelog

[General] [Added] - TM spec for Networking
Pull Request resolved: facebook#24892

Reviewed By: RSNara

Differential Revision: D15543067

Pulled By: fkgozali

fbshipit-source-id: 2b91114dfa45e7899bbb139656a30a6fd52e31db
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875

## Changelog

[General] [Added] - Add TurboModule spec for WebSocketModule
Pull Request resolved: facebook#24893

Reviewed By: RSNara

Differential Revision: D15551329

Pulled By: fkgozali

fbshipit-source-id: 59a921c50cc162528b2181fdd4cb1e41e3f1f6eb
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
part of facebook#24875.

## Changelog

[General] [Added] - add TM spec for PlatformConstants
Pull Request resolved: facebook#24928

Reviewed By: RSNara

Differential Revision: D15551340

Pulled By: fkgozali

fbshipit-source-id: 9de15ff4cfe717f963332868bd873d5147a37506
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
part of facebook#24875. Because some of the methods are rewriteable, I dropped the `+` from the signature, this doesn't feel right to me, but I am not sure if the codegen requires that. If it does, it will probably be better to extend the spec and allow those specific methods to be overriden in a UIManager.js interface. Thoughts on that fkgozali or RSNara?

## Changelog

[General] [Added] - Add TM spec for UIManager
Pull Request resolved: facebook#24902

Reviewed By: hramos

Differential Revision: D15551356

Pulled By: fkgozali

fbshipit-source-id: 076c4ce635aa7ea41e21cbd67c47ecd562fc320d
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875, adds a spec for DevSettings.

## Changelog

[General] [Added] - TM spec for DevSettings
Pull Request resolved: facebook#25084

Reviewed By: hramos

Differential Revision: D15558093

Pulled By: fkgozali

fbshipit-source-id: 3adcb640a6ad80c84c831905bda114e27177f1fe
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
This PR solves part of this issue: facebook#24875

## Changelog

[General] [Added] - add TM spec for ImageStore
Pull Request resolved: facebook#25101

Reviewed By: hramos

Differential Revision: D15583463

Pulled By: fkgozali

fbshipit-source-id: 17e87e8fecb35d42a981b1fb348e40d2b1e91cc6
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Part of facebook#24875.

## Changelog

[General] [Added] - add TM spec for I18nManager
Pull Request resolved: facebook#24908

Reviewed By: fkgozali

Differential Revision: D15395163

Pulled By: RSNara

fbshipit-source-id: 8fd3a5a8ce5d0f74132efff4fae7224eab03405b
M-i-k-e-l pushed a commit to M-i-k-e-l/react-native that referenced this issue Mar 10, 2020
Summary:
Note: iOS only.

This spec file (.h/.mm) was generated via FB internal codegen tool for TurboModule. The tool itself is not yet ready to be opensourced, but at least the generated file is. The output is based on all the Flow types added via facebook#24875.
This file can be used by each ObjC NativeModule to be TurboModule compliant.

Reviewed By: rickhanlonii

Differential Revision: D15978911

fbshipit-source-id: 9e97495287bc406e0ed0ccf89cf370753b538772
@facebook facebook locked as resolved and limited conversation to collaborators Jun 1, 2020
@react-native-bot react-native-bot added the Resolution: Locked This issue was locked by the bot. label Jun 1, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Flow Good first issue Interested in collaborating? Take a stab at fixing one of these issues. Help Wanted :octocat: Issues ideal for external contributors. Native Module Resolution: Locked This issue was locked by the bot. Type: Discussion Long running discussion.
Projects
None yet
Development

No branches or pull requests