/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import {Logger} from '../utils/Logger'; import {RealFlipperDevice} from './DevicePlugin'; import {NormalizedMenuEntry} from './MenuEntry'; import {RealFlipperClient} from './Plugin'; import {Notification} from './Notification'; import {DetailSidebarProps} from '../ui/DetailSidebar'; /** * This interface exposes all global methods for which an implementation will be provided by Flipper itself */ export interface FlipperLib { isFB: boolean; logger: Logger; enableMenuEntries(menuEntries: NormalizedMenuEntry[]): void; createPaste(input: string): Promise; GK(gatekeeper: string): boolean; selectPlugin( device: RealFlipperDevice, client: RealFlipperClient | null, pluginId: string, deeplink: unknown, ): void; writeTextToClipboard(text: string): void; showNotification(pluginKey: string, notification: Notification): void; DetailsSidebarImplementation?( props: DetailSidebarProps, ): React.ReactElement | null; } let flipperLibInstance: FlipperLib | undefined; export function tryGetFlipperLibImplementation(): FlipperLib | undefined { return flipperLibInstance; } export function getFlipperLibImplementation(): FlipperLib { if (!flipperLibInstance) { throw new Error('Flipper lib not instantiated'); } return flipperLibInstance; } export function setFlipperLibImplementation(impl: FlipperLib | undefined) { flipperLibInstance = impl; }