protected createBasePluginClient()

in desktop/flipper-plugin/src/plugin/PluginBase.tsx [327:431]


  protected createBasePluginClient(): BasePluginClient<any, any> {
    return {
      pluginKey: this.pluginKey,
      device: this.device,
      onActivate: (cb) => {
        this.events.on('activate', batched(cb));
      },
      onDeactivate: (cb) => {
        this.events.on('deactivate', batched(cb));
      },
      onDeepLink: (cb) => {
        this.events.on('deeplink', batched(cb));
      },
      onDestroy: (cb) => {
        this.events.on('destroy', batched(cb));
      },
      onExport: (cb) => {
        if (this.exportHandler) {
          throw new Error('onExport handler already set');
        }
        this.exportHandler = cb;
      },
      onImport: (cb) => {
        if (this.importHandler) {
          throw new Error('onImport handler already set');
        }
        this.importHandler = cb;
      },
      onReady: (cb) => {
        this.events.on('ready', batched(cb));
      },
      addMenuEntry: (...entries) => {
        for (const entry of entries) {
          const normalized = normalizeMenuEntry(entry);
          const idx = this.menuEntries.findIndex(
            (existing) =>
              existing.label === normalized.label ||
              existing.action === normalized.action,
          );
          if (idx !== -1) {
            this.menuEntries[idx] = normalizeMenuEntry(entry);
          } else {
            this.menuEntries.push(normalizeMenuEntry(entry));
          }
          if (this.activated) {
            // entries added after initial registration
            this.flipperLib.enableMenuEntries(this.menuEntries);
          }
        }
      },
      onDeviceLogEntry: (cb: DeviceLogListener): (() => void) => {
        const handle = this.device.addLogListener(cb);
        this.logListeners.push(handle);
        return () => {
          this.device.removeLogListener(handle);
        };
      },
      onDeviceCrash: (cb: CrashLogListener): (() => void) => {
        const handle = this.device.addCrashListener(cb);
        this.crashListeners.push(handle);
        return () => {
          this.device.removeCrashListener(handle);
        };
      },
      writeTextToClipboard: this.flipperLib.writeTextToClipboard,
      createPaste: this.flipperLib.createPaste,
      isFB: this.flipperLib.isFB,
      GK: this.flipperLib.GK,
      showNotification: (notification: Notification) => {
        this.flipperLib.showNotification(this.pluginKey, notification);
      },
      logger: this.flipperLib.logger,
      onServerAddOnStart: (cb) => {
        this.events.on('serverAddOnStart', batched(cb));
        if (this.serverAddOnStarted) {
          batched(cb)();
        }
      },
      onServerAddOnStop: (cb) => {
        this.events.on('serverAddOnStop', batched(cb));
        if (this.serverAddOnStopped) {
          batched(cb)();
        }
      },
      sendToServerAddOn: (method, params) =>
        this.serverAddOnControls.sendMessage(
          this.definition.packageName,
          method,
          params,
        ),
      onServerAddOnMessage: (event, cb) => {
        this.serverAddOnControls.receiveMessage(
          this.definition.packageName,
          event,
          batched(cb),
        );
      },
      onServerAddOnUnhandledMessage: (cb) => {
        this.serverAddOnControls.receiveAnyMessage(
          this.definition.packageName,
          batched(cb),
        );
      },
    };
  }