Сайт

extension.ts

Поле main задаёт путь к входному файлу вашего расширения. Этот файл экспортирует функцию activate, которая выполняется при активации расширения, а также может экспортировать необязательную функцию deactivate. Внутри входного файла вы используете глобально доступный sdk.

import type { ExtensionContext } from '@fragmenta/extension'

export function activate(context: ExtensionContext) {
  context.subscriptions.push(
    sdk.commands.registerCommand('openTriggerView', () => {
      // откройте view, выполните логику, ...
    }),
  )
}

export function deactivate() {}
  • С помощью sdk можно регистрировать такие вещи, как команды, оркестраторы и т. д.
  • Вы можете добавлять каждый disposable-объект (любой ресурс, который нужно освободить или очистить позже) в массив context.subscriptions. При деактивации расширения, Fragmenta автоматически освободит каждый элемент в этом массиве, так что вам не придётся очищать их вручную.

Объект context

activate получает ExtensionContext, который содержит все данные, которые вашему расширению нужно знать о себе и о том, где оно выполняется.

| Поле | Описание | | --- | --- | | subscriptions | Это поле содержит disposable-объекты, которые очищаются при деактивации. В него также помещаются команды, listeners и watchers. | | extension | Это поле содержит идентификационные данные и манифест расширения (id, name, version, publisher ...). | | extensionUri / extensionPath | Это поле содержит путь к вашему расширению на жёстком диске. | | asAbsolutePath(rel) | Это поле преобразует путь, входящий в состав вашего расширения, в абсолютный путь. | | platform | win32 | darwin | linux | web | unknown. | | env | Это поле содержит среду выполнения. Дополнительную информацию см. ниже. |

context.env

| Поле | Описание | | --- | --- | | channel | Это поле содержит канал сборки: release | dev | preview. Вы можете разграничить поведение по каналам. | | platform | Это поле содержит то же значение, что и context.platform. | | isDesktop / isWeb | Это поле содержит информацию о том, запускается ли Fragmenta как десктопное приложение или в браузере. | | isWindows / isMac / isLinux | Удобные флаги ОС. | | userAgent | Сырая строка user-agent. |

export function activate(context: ExtensionContext) {
  if (context.env.channel === 'dev') {
    // включить экспериментальное поведение только на канале dev
  }
  if (context.env.isDesktop) {
    // функции только для desktop
  }
}

Полный API — в SDK Reference.