Проект
sdk.project — точка входа к тому, что открыто в рабочей области проекта. Сам граф хранится в sdk.project.nodeEditor.
Активный проект
getActive(): Promise<ProjectSnapshot | undefined>
Резолвится в undefined, если проект не открыт.
ProjectSnapshot:
| Поле | Тип | Описание |
| --- | --- | --- |
| id | ProjectId | Id проекта. |
| displayName | string | Имя проекта. |
| versionId | ProjectVersionId | Id версии проекта. |
| orchestratorId? | OrchestratorId | Выбранный для проекта orchestrator; отсутствует, если не выбран. |
События
| Событие | Payload | Когда срабатывает |
| --- | --- | --- |
| onChangeActiveProject | ProjectSnapshot \| undefined | Активным стал другой проект или проект закрыт (undefined). |
| onUpdateProject | ProjectSnapshot | Данные проекта изменились. |
| onSaveProject | ProjectSnapshot | Проект сохранён. |
onChangeActiveProjectтакже срабатывает повторно для того же проекта, когда меняются данные активного проекта — имя, нотация, расширение или оркестратор, либо когда проект синхронизируется, и может сработать дважды, пока проект открывается. Если важны только переключения, сравнивайтеid.onUpdateProjectсрабатывает для любого проекта, а не только для активного, — проверяйтеid. Также он срабатывает прямо передonSaveProjectпри каждом сохранении.
context.subscriptions.push(
sdk.project.onSaveProject((project) => {
// например, опубликовать текущий DSL
}),
)
let activeId: string | undefined
context.subscriptions.push(
sdk.project.onChangeActiveProject((project) => {
if (project?.id === activeId) return
activeId = project?.id
// активный проект действительно сменился
}),
)
Панели
sdk.project.panel.left // ExtensionSdkPanelHandle
sdk.project.panel.right // ExtensionSdkPanelHandle
sdk.project.panel.bottom // ExtensionSdkPanelHandle
Каждый ExtensionSdkPanelHandle управляет одной из панелей workspace проекта:
| Элемент | Возвращает | Описание |
| --- | --- | --- |
| panelId | — | Id панели: 'project:panel.left', 'project:panel.right' или 'project:panel.bottom' (также ProjectPanelIds.Left / .Right / .Bottom). Передавайте его в webview.show({ panel }). |
| open() | void | Открывает панель. Ничего не делает, если она уже открыта. |
| close() | void | Закрывает панель. Ничего не делает, если она уже закрыта. |
| setSize(size) | void | Меняет размер панели. size — проценты (0–100), а не пиксели; значение ограничивается пределами панели. |
| getSize() | Promise<number \| undefined> | Текущий размер в процентах; если панель не отрисована — последний известный размер или размер по умолчанию. |
open(), close() и setSize() работают по принципу fire-and-forget: возвращаются сразу и не сообщают об ошибках. getSize() отклоняется, если панель недоступна. Событий у дескриптора нет.
| Панель | Мин. размер | Макс. размер | Размер по умолчанию |
| --- | --- | --- | --- |
| left | 5 | 60 | 25 |
| right | 5 | 60 | 25 |
| bottom | 5 | 70 | 30 |
sdk.project.panel.bottom.open()
sdk.project.panel.bottom.setSize(40) // 40%
const size = await sdk.project.panel.bottom.getSize()