From 80dc13711096aae1e1c0f378ddd8d3af6dd56d55 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 12 Sep 2022 14:40:37 -0400 Subject: [PATCH] Introduce typing for extension API to prevent breakage Signed-off-by: Sebastian Malton --- src/extensions/common-api/app.ts | 20 +++++++++++++++---- src/extensions/common-api/index.ts | 2 +- src/extensions/common-api/user-preferences.ts | 15 ++++++++------ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/extensions/common-api/app.ts b/src/extensions/common-api/app.ts index 2f3dafdc0a..acc4036f8f 100644 --- a/src/extensions/common-api/app.ts +++ b/src/extensions/common-api/app.ts @@ -11,11 +11,25 @@ import isWindowsInjectable from "../../common/vars/is-windows.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import getEnabledExtensionsInjectable from "./get-enabled-extensions/get-enabled-extensions.injectable"; -import * as Preferences from "./user-preferences"; +import type { UserPreferenceExtensionItems } from "./user-preferences"; +import { Preferences } from "./user-preferences"; import { slackUrl, issuesTrackerUrl } from "../../common/vars"; import { buildVersionInjectionToken } from "../../common/vars/build-semantic-version.injectable"; -const App = { +export interface AppExtensionItems { + readonly Preferences: UserPreferenceExtensionItems; + readonly version: string; + readonly appName: string; + readonly slackUrl: string; + readonly issuesTrackerUrl: string; + readonly isSnap: boolean; + readonly isWindows: boolean; + readonly isMac: boolean; + readonly isLinux: boolean; + getEnabledExtensions: () => string[]; +} + +export const App: AppExtensionItems = { Preferences, getEnabledExtensions: asLegacyGlobalFunctionForExtensionApi(getEnabledExtensionsInjectable), get version() { @@ -51,5 +65,3 @@ const App = { slackUrl, issuesTrackerUrl, }; - -export default App; diff --git a/src/extensions/common-api/index.ts b/src/extensions/common-api/index.ts index e7f491966f..e505b9bfbb 100644 --- a/src/extensions/common-api/index.ts +++ b/src/extensions/common-api/index.ts @@ -4,7 +4,7 @@ */ // APIs -import App from "./app"; +import { App } from "./app"; import * as EventBus from "./event-bus"; import * as Store from "./stores"; import * as Util from "./utils"; diff --git a/src/extensions/common-api/user-preferences.ts b/src/extensions/common-api/user-preferences.ts index 2c44f6f604..3a0a93793b 100644 --- a/src/extensions/common-api/user-preferences.ts +++ b/src/extensions/common-api/user-preferences.ts @@ -4,10 +4,13 @@ */ import { UserStore } from "../../common/user-store"; - -/** - * Get the configured kubectl binaries path. - */ -export function getKubectlPath(): string | undefined { - return UserStore.getInstance().kubectlBinariesPath; +export interface UserPreferenceExtensionItems { + /** + * Get the configured kubectl binaries path. + */ + getKubectlPath: () => string | undefined; } + +export const Preferences: UserPreferenceExtensionItems = { + getKubectlPath: () => UserStore.getInstance().kubectlBinariesPath, +};