mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Extract product name as injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make tray items comply with Open Closed Principle Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Replace duplicated overrides with global Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add behaviour for navigating to preferences using tray Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce a tray item for updating application Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak naming Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak more naming Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant indirection Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak more naming Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce injectable for package.json being side-effect Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Relocate file to directory containing feature Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using injectable for limiting side effect Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add missing injection token for implementation of tray item Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove resetting state for update is ready to be installed for being unclear Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make label of tray item reactive Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract updating is enabled to separate injectable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce competition for tray Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Expand scope of behaviour for updating using tray also contain checking for updates Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove dead code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement checking of updates from multiple update channels Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Start installing updates automatically when quitting application Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Show application window when checking of updates has happened Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Show notifications and dialog for downloading update Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement naive notifications for version updates Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement checking of Electron specific updates as responsibility Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement downloading of Electron specific updates as responsibility Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce competition for channel abstraction Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant global override Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix typing after enabling strict mode Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce abstraction for a state that is shared between environments Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract states of application update to be usable from all environments Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Handle failing download of update Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make code for window visibility actually work Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate code for sending messages between processes to a window Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Split bloated dependency in smaller pieces Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make state of download progress accessible from all environments Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Rename files for accuracy Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Move channel abstraction to more global directory Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Enhance typing of channels and sync-box Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate channel abstraction types Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Update asyncFn to support strict mode Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix snapshot after rebase Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add missing global override Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce injection token for channels to allow injecting all of them at once Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add notifications about change in update status Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Rename property for accuracy Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak code style Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make notifications unit testable in behaviours Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add implementation for asking boolean over processes Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reorganize responsibilities for checking updates Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Reorganize tests for installing update under separate scenarios Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make stuff happening when root frame is rendered unit testable Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce periodical check for updates Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Allow downgrading app versions Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using competition for checking of updates in application menu Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make test less prone to fail for wrong reason Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant boilerplate Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make tests for specific migrations less prone to failing for wrong reason Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Move shared stuff under common Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using single source of truth for selected update channel Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Extract tests for installing update from different update channels to separate scenario Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add missing global override Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using release channel of installed application version as default value for selected update channel Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate usage of channel abstraction to same implementation Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make Channel abstraction support return values Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix direct calling of runnables Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Synchronize initial values of sync boxes when window starts Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add missing global override Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak message of question from user Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Consolidate names of directories Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Add TODO Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove unimplemented scenario from test Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify test Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Improve name of test Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant overrides Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix code style Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make Animate deterministic in unit tests Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Simplify more naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Simplify even more naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Simplify more and more naming Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Add todo for cleaning unacceptable code encountered Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Improve name of behaviour Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make unit test more strict Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Enhance name of behaviour Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce dependency to get random IDs Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make asking of boolean value from user not require explicit ID for question Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Simplify code for asking of boolean value from user Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make setting of initial state for sync boxes not trigger irrelevant messaging to main Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make a channel have default type for sent and returned message Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce higher order function to log errors in decorated functions Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Export type for error logging Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak test name Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce higher order function for suppressing errors Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Relocate some explicit error handlings to proper level of abstraction Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make higher order function for logging errors support asynchronous rejecting with non error instance Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make overridden version of application exactly the one required by unit test Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Mark injectable causing side effects Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Revert not required changes Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make code for asserting a promise more strict Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make dependencies readonly Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove duplication for disposers Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement initial values for sync-boxes Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Separate concept of message and request channels Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Introduce tests for requesting from channel in renderer Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Implement requesting from renderer in main Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Revert "Implement requesting from renderer in main" This reverts commit d3e7899d7900516f3dbfacdb317a453202318305. Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak typing of request channel listeners to get rid of unexpected undefined Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove unused variable Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Tweak timing of sentry setup Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Require messages for MessageChannels be JsonValues for serialization Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Require requests and responses for RequestChannels be JsonValues for serialization Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make different MessageChannels not require explicit "extends JsonObject" Note: Non-escaped lint breaks type here for forcing interface over type. Reasonable effort brought no understanding for what is the relevant difference between the two. Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make a primitive argument an object for readability Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make typing of higher order function for error suppression not lie Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Serialize messages in channels to make IPC not blow up Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce a way to make intentional orphan promises uniform, controllable and deliberate Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Make downloading of update and what follows more deliberate as orphan promise Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Move utility function under directory Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Move another utility function under directory Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix incorrect name of file Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant code Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kill dead code Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Round percentage of update download progress in tray Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix rebase conflicts Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Fix CheckForUpdate type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> Co-authored-by: Iku-turso <mikko.aspiala@gmail.com> Co-authored-by: Sebastian Malton <sebastian@malton.name>
355 lines
7.8 KiB
TypeScript
355 lines
7.8 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import moment from "moment-timezone";
|
|
import path from "path";
|
|
import os from "os";
|
|
import type { editor } from "monaco-editor";
|
|
import merge from "lodash/merge";
|
|
import { defaultThemeId, defaultEditorFontFamily, defaultFontSize, defaultTerminalFontFamily } from "../vars";
|
|
import type { ObservableMap } from "mobx";
|
|
import { observable } from "mobx";
|
|
|
|
export interface KubeconfigSyncEntry extends KubeconfigSyncValue {
|
|
filePath: string;
|
|
}
|
|
|
|
export interface KubeconfigSyncValue {
|
|
}
|
|
export interface TerminalConfig {
|
|
fontSize: number;
|
|
fontFamily: string;
|
|
}
|
|
|
|
export const defaultTerminalConfig: TerminalConfig = {
|
|
fontSize: defaultFontSize,
|
|
fontFamily: defaultTerminalFontFamily,
|
|
};
|
|
|
|
interface BaseEditorConfiguration extends Required<Pick<editor.IStandaloneEditorConstructionOptions, "minimap" | "tabSize" | "fontSize" | "fontFamily">> {
|
|
lineNumbers: NonNullable<Exclude<editor.IStandaloneEditorConstructionOptions["lineNumbers"], Function>>;
|
|
}
|
|
|
|
export type EditorConfiguration = Required<BaseEditorConfiguration>;
|
|
|
|
export const defaultEditorConfig: EditorConfiguration = {
|
|
tabSize: 2,
|
|
lineNumbers: "on",
|
|
fontSize: defaultFontSize,
|
|
fontFamily: defaultEditorFontFamily,
|
|
minimap: {
|
|
enabled: true,
|
|
side: "right",
|
|
},
|
|
};
|
|
|
|
export type StoreType<P> = P extends PreferenceDescription<unknown, infer Store>
|
|
? Store
|
|
: never;
|
|
|
|
export interface PreferenceDescription<T, R = T> {
|
|
fromStore(val: T | undefined): R;
|
|
toStore(val: R): T | undefined;
|
|
}
|
|
|
|
const httpsProxy: PreferenceDescription<string | undefined> = {
|
|
fromStore(val) {
|
|
return val;
|
|
},
|
|
toStore(val) {
|
|
return val || undefined;
|
|
},
|
|
};
|
|
|
|
const shell: PreferenceDescription<string | undefined> = {
|
|
fromStore(val) {
|
|
return val;
|
|
},
|
|
toStore(val) {
|
|
return val || undefined;
|
|
},
|
|
};
|
|
|
|
const colorTheme: PreferenceDescription<string> = {
|
|
fromStore(val) {
|
|
return val || defaultThemeId;
|
|
},
|
|
toStore(val) {
|
|
if (!val || val === defaultThemeId) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const terminalTheme: PreferenceDescription<string> = {
|
|
fromStore(val) {
|
|
return val || "";
|
|
},
|
|
toStore(val) {
|
|
return val || undefined;
|
|
},
|
|
};
|
|
|
|
export const defaultLocaleTimezone = "UTC";
|
|
|
|
const localeTimezone: PreferenceDescription<string> = {
|
|
fromStore(val) {
|
|
return val || moment.tz.guess(true) || defaultLocaleTimezone;
|
|
},
|
|
toStore(val) {
|
|
if (!val || val === moment.tz.guess(true) || val === defaultLocaleTimezone) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const allowUntrustedCAs: PreferenceDescription<boolean> = {
|
|
fromStore(val) {
|
|
return val ?? false;
|
|
},
|
|
toStore(val) {
|
|
if (!val) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const allowErrorReporting: PreferenceDescription<boolean> = {
|
|
fromStore(val) {
|
|
return val ?? true;
|
|
},
|
|
toStore(val) {
|
|
if (val === true) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
export interface DownloadMirror {
|
|
url: string;
|
|
label: string;
|
|
platforms: Set<NodeJS.Platform>;
|
|
}
|
|
|
|
export const defaultPackageMirror = "default";
|
|
const defaultDownloadMirrorData: DownloadMirror = {
|
|
url: "https://storage.googleapis.com/kubernetes-release/release",
|
|
label: "Default (Google)",
|
|
platforms: new Set(["darwin", "win32", "linux"]),
|
|
};
|
|
|
|
export const packageMirrors = new Map<string, DownloadMirror>([
|
|
[defaultPackageMirror, defaultDownloadMirrorData],
|
|
["china", {
|
|
url: "https://mirror.azure.cn/kubernetes/kubectl",
|
|
label: "China (Azure)",
|
|
platforms: new Set(["win32", "linux"]),
|
|
}],
|
|
]);
|
|
|
|
const downloadMirror: PreferenceDescription<string> = {
|
|
fromStore(val) {
|
|
return !val || !packageMirrors.has(val)
|
|
? defaultPackageMirror
|
|
: val;
|
|
},
|
|
toStore(val) {
|
|
if (!val || val === defaultPackageMirror) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const downloadKubectlBinaries: PreferenceDescription<boolean> = {
|
|
fromStore(val) {
|
|
return val ?? true;
|
|
},
|
|
toStore(val) {
|
|
if (val === true) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const downloadBinariesPath: PreferenceDescription<string | undefined> = {
|
|
fromStore(val) {
|
|
return val;
|
|
},
|
|
toStore(val) {
|
|
if (!val) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const kubectlBinariesPath: PreferenceDescription<string | undefined> = {
|
|
fromStore(val) {
|
|
return val;
|
|
},
|
|
toStore(val) {
|
|
if (!val) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const openAtLogin: PreferenceDescription<boolean> = {
|
|
fromStore(val) {
|
|
return val ?? false;
|
|
},
|
|
toStore(val) {
|
|
if (!val) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const terminalCopyOnSelect: PreferenceDescription<boolean> = {
|
|
fromStore(val) {
|
|
return val ?? false;
|
|
},
|
|
toStore(val) {
|
|
if (!val) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const hiddenTableColumns: PreferenceDescription<[string, string[]][], Map<string, Set<string>>> = {
|
|
fromStore(val) {
|
|
return new Map(
|
|
(val ?? []).map(([tableId, columnIds]) => [tableId, new Set(columnIds)]),
|
|
);
|
|
},
|
|
toStore(val) {
|
|
const res: [string, string[]][] = [];
|
|
|
|
for (const [table, columns] of val) {
|
|
if (columns.size) {
|
|
res.push([table, Array.from(columns)]);
|
|
}
|
|
}
|
|
|
|
return res.length ? res : undefined;
|
|
},
|
|
};
|
|
|
|
const mainKubeFolder = path.join(os.homedir(), ".kube");
|
|
|
|
const syncKubeconfigEntries: PreferenceDescription<KubeconfigSyncEntry[], ObservableMap<string, KubeconfigSyncValue>> = {
|
|
fromStore(val) {
|
|
return observable.map(
|
|
val
|
|
?.map(({ filePath, ...rest }) => [filePath, rest])
|
|
?? [[mainKubeFolder, {}]],
|
|
);
|
|
},
|
|
toStore(val) {
|
|
if (val.size === 1 && val.has(mainKubeFolder)) {
|
|
return undefined;
|
|
}
|
|
|
|
return Array.from(val, ([filePath, rest]) => ({ filePath, ...rest }));
|
|
},
|
|
};
|
|
|
|
const editorConfiguration: PreferenceDescription<Partial<EditorConfiguration> | undefined, EditorConfiguration> = {
|
|
fromStore(val) {
|
|
return merge(defaultEditorConfig, val);
|
|
},
|
|
toStore(val) {
|
|
return val;
|
|
},
|
|
};
|
|
|
|
const terminalConfig: PreferenceDescription<TerminalConfig, TerminalConfig> = {
|
|
fromStore(val) {
|
|
return merge(defaultTerminalConfig, val);
|
|
},
|
|
toStore(val) {
|
|
return val;
|
|
},
|
|
};
|
|
|
|
export type ExtensionRegistryLocation = "default" | "npmrc" | "custom";
|
|
|
|
export type ExtensionRegistry = {
|
|
location: "default" | "npmrc";
|
|
customUrl?: undefined;
|
|
} | {
|
|
location: "custom";
|
|
customUrl: string;
|
|
};
|
|
|
|
export const defaultExtensionRegistryUrlLocation = "default";
|
|
export const defaultExtensionRegistryUrl = "https://registry.npmjs.org";
|
|
|
|
const extensionRegistryUrl: PreferenceDescription<ExtensionRegistry> = {
|
|
fromStore(val) {
|
|
return val ?? {
|
|
location: defaultExtensionRegistryUrlLocation,
|
|
};
|
|
},
|
|
toStore(val) {
|
|
if (val.location === defaultExtensionRegistryUrlLocation) {
|
|
return undefined;
|
|
}
|
|
|
|
return val;
|
|
},
|
|
};
|
|
|
|
type PreferencesModelType<field extends keyof typeof DESCRIPTORS> = typeof DESCRIPTORS[field] extends PreferenceDescription<infer T, any> ? T : never;
|
|
type UserStoreModelType<field extends keyof typeof DESCRIPTORS> = typeof DESCRIPTORS[field] extends PreferenceDescription<any, infer T> ? T : never;
|
|
|
|
export type UserStoreFlatModel = {
|
|
[field in keyof typeof DESCRIPTORS]: UserStoreModelType<field>;
|
|
};
|
|
|
|
export type UserPreferencesModel = {
|
|
[field in keyof typeof DESCRIPTORS]: PreferencesModelType<field>;
|
|
} & { updateChannel: string };
|
|
|
|
export const DESCRIPTORS = {
|
|
httpsProxy,
|
|
shell,
|
|
colorTheme,
|
|
terminalTheme,
|
|
localeTimezone,
|
|
allowUntrustedCAs,
|
|
allowErrorReporting,
|
|
downloadMirror,
|
|
downloadKubectlBinaries,
|
|
downloadBinariesPath,
|
|
kubectlBinariesPath,
|
|
openAtLogin,
|
|
hiddenTableColumns,
|
|
syncKubeconfigEntries,
|
|
editorConfiguration,
|
|
terminalCopyOnSelect,
|
|
terminalConfig,
|
|
extensionRegistryUrl,
|
|
};
|