Skip to content

Commit

Permalink
Add missing types for AppRegistry
Browse files Browse the repository at this point in the history
Summary:
These are all documented on the website and seem to likely work in OSS to at least some extent. Add the missing types corresponding to functions exported from AppRegistry.

Changelog:
[General][Fixed] - Add missing types for AppRegistry

Reviewed By: GijsWeterings

Differential Revision: D42036018

fbshipit-source-id: 0728d6c5602a50e50f1eaf7f76c54ab47dcb0124
  • Loading branch information
NickGerleman authored and facebook-github-bot committed Dec 15, 2022
1 parent 4e5421f commit 8d6e2f8
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
49 changes: 49 additions & 0 deletions Libraries/ReactNative/AppRegistry.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@
*/

import type * as React from 'react';
import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';

type Task = (taskData: any) => Promise<void>;
type TaskProvider = () => Task;
type TaskCanceller = () => void;
type TaskCancelProvider = () => TaskCanceller;

export type ComponentProvider = () => React.ComponentType<any>;

Expand All @@ -22,6 +25,13 @@ export type AppConfig = {
run?: Runnable | undefined;
};

export type ComponentProviderInstrumentationHook = (
component: ComponentProvider,
scopedPerformanceLogger: IPerformanceLogger,
) => React.ComponentType<any>;

export type WrapperComponentProvider = (any) => React.ComponentType<any>;

/**
* `AppRegistry` is the JS entry point to running all React Native apps. App
* root components should register themselves with
Expand All @@ -38,17 +48,31 @@ export type AppConfig = {
* `require`d.
*/
export namespace AppRegistry {
export function setWrapperComponentProvider(
provider: WrapperComponentProvider,
);

export function registerConfig(config: AppConfig[]): void;

export function registerComponent(
appKey: string,
getComponentFunc: ComponentProvider,
section?: boolean,
): string;

export function registerRunnable(appKey: string, func: Runnable): string;

export function registerSection(
appKey: string,
component: ComponentProvider,
): void;

export function getAppKeys(): string[];

export function getSectionKeys(): string[];

export function getSections(): Record<string, Runnable>;

export function unmountApplicationComponentAtRootTag(rootTag: number): void;

export function runApplication(appKey: string, appParameters: any): void;
Expand All @@ -65,4 +89,29 @@ export namespace AppRegistry {
): void;

export function getRunnable(appKey: string): Runnable | undefined;

export function getRegistry(): {sections: string[]; runnables: Runnable[]};

export function setComponentProviderInstrumentationHook(
hook: ComponentProviderInstrumentationHook,
);

export function registerHeadlessTask(
taskKey: string,
taskProvider: TaskProvider,
): void;

export function registerCancellableHeadlessTask(
taskKey: string,
taskProvider: TaskProvider,
taskCancelProvider: TaskCancelProvider,
): void;

export function startHeadlessTask(
taskId: number,
taskKey: string,
data: any,
): void;

export function cancelHeadlessTask(taskId: number, taskKey: string): void;
}
48 changes: 48 additions & 0 deletions Libraries/Utilities/createPerformanceLogger.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

export type Timespan = {
startTime: number;
endTime?: number;
totalTime?: number;
startExtras?: Extras;
endExtras?: Extras;
};

// Extra values should be serializable primitives
export type ExtraValue = number | string | boolean;

export type Extras = {[key: string]: ExtraValue};

export interface IPerformanceLogger {
addTimespan(
key: string,
startTime: number,
endTime: number,
startExtras?: Extras,
endExtras?: Extras,
): void;
append(logger: IPerformanceLogger): void;
clear(): void;
clearCompleted(): void;
close(): void;
currentTimestamp(): number;
getExtras(): {[key: string]: ExtraValue | null};
getPoints(): {[key: string]: number | null};
getPointExtras(): {[key: string]: Extras | null};
getTimespans(): {[key: string]: Timespan | null};
hasTimespan(key: string): boolean;
isClosed(): boolean;
logEverything(): void;
markPoint(key: string, timestamp?: number, extras?: Extras): void;
removeExtra(key: string): ExtraValue | null;
setExtra(key: string, value: ExtraValue): void;
startTimespan(key: string, timestamp?: number, extras?: Extras): void;
stopTimespan(key: string, timestamp?: number, extras?: Extras): void;
}

0 comments on commit 8d6e2f8

Please sign in to comment.