-
Notifications
You must be signed in to change notification settings - Fork 24.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move TurboModuleRegistry (JS) to github
Summary: Moved the JS wrapper function to github. To access a TurboModule from JS: ``` export interface Spec extends TurboModule { +func1: () => number, } const module = TurboModuleRegistry.get<Spec>('SampleTurboModule'); ``` This assumes: * the binding on the native side has been installed properly, i.e. `global.__turboModuleProxy` needs to be installed properly. * the module `SampleTurboModule` is registered properly in native. More instructions will be provided later. Reviewed By: yungsters Differential Revision: D13584561 fbshipit-source-id: 50d29d88787f8d9caa7a3ee0d54d378db866515c
- Loading branch information
1 parent
f2fccbb
commit a3df286
Showing
2 changed files
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow strict | ||
* @format | ||
*/ | ||
|
||
'use strict'; | ||
|
||
/** | ||
* NOTE: This is React Native specific export type. | ||
* | ||
* RCTExport is an interface type that allows native code generation for React | ||
* Native native modules. It exists as a hint to the codegen tool that any | ||
* interface that extends it needs to be codegen'ed. Example usage: | ||
* | ||
* export interface RCTFoobar extends RCTExport<void> {} | ||
* | ||
* Native definition for RCTFoobar will then be generated. | ||
* | ||
* The type param T is a placeholder for future codegen hinting, like versioning | ||
* information, native base classes, etc. For now, simply use `void` type as | ||
* there's nothing to give hint about. | ||
*/ | ||
|
||
// eslint-disable-next-line no-unused-vars | ||
export interface RCTExport<T: void = void> { | ||
+getConstants?: () => {}; | ||
} | ||
|
||
// eslint-disable-next-line lint/react-native-modules | ||
export interface TurboModule extends RCTExport<void> {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow | ||
* @format | ||
*/ | ||
|
||
'use strict'; | ||
|
||
import type {TurboModule} from 'RCTExport'; | ||
import invariant from 'invariant'; | ||
import {NativeModules} from 'react-native'; | ||
|
||
// TODO | ||
function get<T: TurboModule>(name: string): ?T { | ||
// Backward compatibility layer during migration. | ||
if (NativeModules[name] != null) { | ||
return ((NativeModules[name]: any): T); | ||
} | ||
|
||
const module: ?T = global.__turboModuleProxy(name); | ||
return module; | ||
} | ||
|
||
function getEnforcing<T: TurboModule>(name: string): T { | ||
const module = get(name); | ||
invariant(module != null, `${name} is not available in this app.`); | ||
return module; | ||
} | ||
|
||
export {get}; | ||
export {getEnforcing}; |