mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-29 01:25:37 -05:00
* Added publish and schema compare telemetry * Adding telemetry points for add/exclude/delete * telemetry for validation * Adding telemetry from project roundtrip updates, editing sqlproj, and db refs * Changed method for obtaining extension ID during registration * Fixing test failures, updating ads telemetry package dependency * replacing action strings with enums * change database project string actions to enums * Changed action name to better match dialog * PR feedback
62 lines
2.5 KiB
TypeScript
62 lines
2.5 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { IProjectProvider } from 'dataworkspace';
|
|
import * as vscode from 'vscode';
|
|
import { IProjectProviderRegistry } from './interfaces';
|
|
import { TelemetryActions, TelemetryReporter, TelemetryViews } from './telemetry';
|
|
|
|
export const ProjectProviderRegistry: IProjectProviderRegistry = new class implements IProjectProviderRegistry {
|
|
private _providers = new Array<IProjectProvider>();
|
|
private _providerFileExtensionMapping: { [key: string]: IProjectProvider } = {};
|
|
private _providerProjectTypeMapping: { [key: string]: IProjectProvider } = {};
|
|
|
|
registerProvider(provider: IProjectProvider, providerId: string): vscode.Disposable {
|
|
this.validateProvider(provider);
|
|
this._providers.push(provider);
|
|
provider.supportedProjectTypes.forEach(projectType => {
|
|
this._providerFileExtensionMapping[projectType.projectFileExtension.toUpperCase()] = provider;
|
|
this._providerProjectTypeMapping[projectType.id.toUpperCase()] = provider;
|
|
});
|
|
|
|
TelemetryReporter.createActionEvent(TelemetryViews.ProviderRegistration, TelemetryActions.ProviderRegistered)
|
|
.withAdditionalProperties({
|
|
providerId: providerId,
|
|
extensions: provider.supportedProjectTypes.map(p => p.projectFileExtension).sort().join(', ')
|
|
})
|
|
.send();
|
|
|
|
return new vscode.Disposable(() => {
|
|
const idx = this._providers.indexOf(provider);
|
|
if (idx >= 0) {
|
|
this._providers.splice(idx, 1);
|
|
provider.supportedProjectTypes.forEach(projectType => {
|
|
delete this._providerFileExtensionMapping[projectType.projectFileExtension.toUpperCase()];
|
|
delete this._providerProjectTypeMapping[projectType.id.toUpperCase()];
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
get providers(): IProjectProvider[] {
|
|
return this._providers.slice(0);
|
|
}
|
|
|
|
clear(): void {
|
|
this._providers.length = 0;
|
|
}
|
|
|
|
validateProvider(provider: IProjectProvider): void {
|
|
}
|
|
|
|
getProviderByProjectExtension(extension: string): IProjectProvider | undefined {
|
|
return extension ? this._providerFileExtensionMapping[extension.toUpperCase()] : undefined;
|
|
}
|
|
|
|
getProviderByProjectType(projectType: string): IProjectProvider | undefined {
|
|
return projectType ? this._providerProjectTypeMapping[projectType.toUpperCase()] : undefined;
|
|
}
|
|
};
|