iterative/vscode-dvc

View on GitHub
extension/src/vscode/extensions.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { commands, Extension, extensions } from 'vscode'

type ExtensionDetails = {
  id: string
  name: string
  version: string
}

type PackageJSON = {
  packageJSON: ExtensionDetails
}

const getExtension = <T>(id: string): Extension<T & PackageJSON> | undefined =>
  extensions.getExtension<T & PackageJSON>(id)

export const getExtensionAPI = async <T>(
  name: string
): Promise<T | undefined> => {
  const extension = getExtension<T>(name)
  if (!extension) {
    return
  }

  try {
    return await extension.activate()
  } catch {}
}

export const isInstalled = (id: string): boolean =>
  !!extensions.all.some(extension => extension.id === id)

export const showExtension = (id: string) =>
  commands.executeCommand('workbench.extensions.search', `@id:${id}`)

export const getOnDidChangeExtensions = () => extensions.onDidChange