SuperAPI AI Directory

core-extension-api

Coding & development

View repository

Updated 10-15 21:43

About this skill

Core Extension Public API

packages/salesforcedx-vscode-core/src/index.ts — activate() returns SalesforceVSCodeCoreApi.

Consumers access via:

const ext = vscode.extensions.getExtension<SalesforceVSCodeCoreApi>(
  'salesforce.salesforcedx-vscode-core'
);
const api = ext.exports;

Also consumed indirectly via @salesforce/vscode-service-provider.

Public API — external consumers depend on this

See external-consumers for full list and search commands.

Breaking (check consumers first):

  • Remove field from SalesforceVSCodeCoreApi
  • Change field type
  • Change behavior (even same signature)
  • Change static methods on services.* classes (.getInstance())
  • Rename/restructure services sub-object

Non-breaking: add new fields.

API surface

Top-level (instances/functions)

getUserId, getAuthFields, isCLIInstalled,
SfCommandletExecutor, WorkspaceContext,
telemetryService, workspaceContextUtils

Note: the top-level channelService field was removed (W-23348840). Consumers must use services.ChannelService.

services (class constructors with static methods)

RegistryAccess, ChannelService (.getInstance(name)),
TelemetryService (.getInstance(name)),
WorkspaceContext (.getInstance()), CommandEventDispatcher (.getInstance())

External consumers predominantly use services.*. The .getInstance() signatures are public contract.

Overlap

Some capabilities at both levels (e.g. telemetryService instance top-level, services.TelemetryService class). Consumers may use either/both — check both when evaluating usage.

Before changing

  1. Read external-consumers
  2. Grep monorepo: \.exports\.MEMBER — catches direct access outside wrapper files
  3. Search org:
    gh api -X GET "search/code?q=SYMBOL+org:forcedotcom&per_page=30" \
      --jq '.items[] | "\(.repository.name): \(.path)"'
    # also search salesforcecli org
    gh api -X GET "search/code?q=SYMBOL+org:salesforcecli&per_page=30" \
      --jq '.items[] | "\(.repository.name): \(.path)"'
    # also search for exports.SYMBOL (direct access pattern)
    gh api -X GET "search/code?q=exports.SYMBOL+org:forcedotcom&per_page=30" \
      --jq '.items[] | "\(.repository.name): \(.path)"'
    
  4. Read private repos: gh api repos/forcedotcom/REPO/contents/PATH --jq '.content' | base64 -d
  5. Removing something unused in monorepo? Confirm unused externally too
  6. Changing behavior? Check consumer version gates and minimum versions

Consumer patterns

  • extensionDependencies: ["salesforce.salesforcedx-vscode-core"]
  • Version-check core (semver.satisfies(version, '>=X.Y.Z'))
  • Define own minimal type (don't import SalesforceVSCodeCoreApi directly)
  • Call .getInstance(extensionName) on services classes
  • Graceful degradation if core missing/outdated