Donutgramплагины
На этой страницеdefinePlugin

Жизненный цикл

Точка входа, активация, остановка и освобождение ресурсов.

definePlugin

У плагина нет обязательного базового класса. Точка входа экспортирует результат definePlugin с методами activate и необязательным deactivate.

const _plugin = "donutgram";
let command;

export default definePlugin({
  async activate(api) {
    command = await api.commands.register({
      id: "hello",
      title: "Приветствие",
      placement: "composer",
      async run() {
        await api.ui.toast("Привет!");
      }
    });
  },
  async deactivate() {
    if (command) await command.dispose();
    command = undefined;
  }
});

В манифесте такой команды требуется ui.contribute / composer.

Активация

Регистрируйте обработчики внутри activate, а не при импорте модуля. Дождитесь асинхронных регистраций. Ошибка активации не должна оставлять плагин в состоянии «работает».

Обе формы definePlugin(implementation) и definePlugin(manifest, implementation) допустимы. Метаданные установки всё равно берутся из статически проверенного манифеста пакета.

Остановка

Плагин останавливается при выключении, удалении, смене аккаунта и изменениях состояния приложения. Не рассчитывайте на непрерывную фоновую работу.

Нативный хост освобождает принадлежащие runtime команды, callbacks и страницы. deactivate полезен для собственного аккуратного завершения, но не должен быть единственным местом записи важных данных.

Disposable

Регистрация команды, события и трансформации возвращает объект с асинхронным dispose. Вызов позволяет убрать конкретную регистрацию до полной остановки плагина.

Не делать при загрузке

Не создавайте бесконечные циклы, не загружайте внешний код и не предполагаете наличие Node.js или браузерных объектов. Лимиты и допустимые глобальные объекты описаны в среде выполнения.