forked from salesforce/salesforcedx-vscode-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCoreExtensionService.ts
More file actions
137 lines (121 loc) · 4.89 KB
/
CoreExtensionService.ts
File metadata and controls
137 lines (121 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* Copyright (c) 2023, salesforce.com, inc.
* All rights reserved.
* SPDX-License-Identifier: MIT
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
*/
import { ExtensionContext, extensions } from 'vscode';
import { satisfies, valid } from 'semver';
import type {
CoreExtensionApi,
WorkspaceContext,
SalesforceProjectConfig,
TelemetryService
} from '../types';
import {
CORE_EXTENSION_ID,
MINIMUM_REQUIRED_VERSION_CORE_EXTENSION
} from '../utils/constants';
const NOT_INITIALIZED_ERROR = 'CoreExtensionService not initialized';
const CORE_EXTENSION_NOT_FOUND = 'Core extension not found';
const WORKSPACE_CONTEXT_NOT_FOUND = 'Workspace Context not found';
const SALESFORCE_PROJECT_CONFIG_NOT_FOUND = 'SalesforceProjectConfig not found';
const TELEMETRY_SERVICE_NOT_FOUND = 'TelemetryService not found';
const coreExtensionMinRequiredVersionError =
'You are running an older version of the Salesforce CLI Integration VSCode Extension. Please update the Salesforce Extension pack and try again.';
export class CoreExtensionService {
private static initialized = false;
private static workspaceContext: WorkspaceContext;
private static salesforceProjectConfig: SalesforceProjectConfig;
private static telemetryService: TelemetryService;
static loadDependencies(context: ExtensionContext) {
if (!CoreExtensionService.initialized) {
const coreExtension = extensions.getExtension(CORE_EXTENSION_ID);
if (!coreExtension) {
throw new Error(CORE_EXTENSION_NOT_FOUND);
}
const coreExtensionVersion = coreExtension.packageJSON.version;
if (
!CoreExtensionService.isAboveMinimumRequiredVersion(
MINIMUM_REQUIRED_VERSION_CORE_EXTENSION,
coreExtensionVersion
)
) {
throw new Error(coreExtensionMinRequiredVersionError);
}
const coreExtensionApi = coreExtension.exports as CoreExtensionApi;
CoreExtensionService.initializeWorkspaceContext(
coreExtensionApi?.services.WorkspaceContext
);
CoreExtensionService.initializeSalesforceProjectConfig(
coreExtensionApi?.services.SalesforceProjectConfig
);
CoreExtensionService.initializeTelemetryService(
coreExtensionApi?.services.TelemetryService,
context
);
CoreExtensionService.initialized = true;
}
}
private static initializeWorkspaceContext(
workspaceContext: WorkspaceContext | undefined
) {
if (!workspaceContext) {
throw new Error(WORKSPACE_CONTEXT_NOT_FOUND);
}
CoreExtensionService.workspaceContext =
workspaceContext.getInstance(false);
}
private static initializeSalesforceProjectConfig(
salesforceProjectConfig: SalesforceProjectConfig | undefined
) {
if (!salesforceProjectConfig) {
throw new Error(SALESFORCE_PROJECT_CONFIG_NOT_FOUND);
}
CoreExtensionService.salesforceProjectConfig = salesforceProjectConfig;
}
private static initializeTelemetryService(
telemetryService: TelemetryService | undefined,
context: ExtensionContext
) {
if (!telemetryService) {
throw new Error(TELEMETRY_SERVICE_NOT_FOUND);
}
const { name } = context.extension.packageJSON;
CoreExtensionService.telemetryService =
telemetryService.getInstance(name);
CoreExtensionService.telemetryService.initializeService(context);
}
private static isAboveMinimumRequiredVersion(
minRequiredVersion: string,
actualVersion: string
) {
// Check to see if version is in the expected MAJOR.MINOR.PATCH format
if (!valid(actualVersion)) {
console.debug(
'Invalid version format found for the Core Extension.' +
`\nActual version: ${actualVersion}` +
`\nMinimum required version: ${minRequiredVersion}`
);
}
return satisfies(actualVersion, '>=' + minRequiredVersion);
}
static getWorkspaceContext(): WorkspaceContext {
if (CoreExtensionService.initialized) {
return CoreExtensionService.workspaceContext;
}
throw new Error(NOT_INITIALIZED_ERROR);
}
static getSalesforceProjectConfig(): SalesforceProjectConfig {
if (CoreExtensionService.initialized) {
return CoreExtensionService.salesforceProjectConfig;
}
throw new Error(NOT_INITIALIZED_ERROR);
}
static getTelemetryService(): TelemetryService {
if (CoreExtensionService.initialized) {
return CoreExtensionService.telemetryService;
}
throw new Error(NOT_INITIALIZED_ERROR);
}
}