diff --git a/package-lock.json b/package-lock.json index bcc47f1439..a3d105a65d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3288,14 +3288,26 @@ "resolved": "packages/release-tool", "link": true }, + "node_modules/@k8slens/run-many": { + "resolved": "packages/utility-features/run-many", + "link": true + }, "node_modules/@k8slens/semver": { "resolved": "packages/semver", "link": true }, + "node_modules/@k8slens/test-utils": { + "resolved": "packages/utility-features/test-utils", + "link": true + }, "node_modules/@k8slens/typescript": { "resolved": "packages/infrastructure/typescript", "link": true }, + "node_modules/@k8slens/utilities": { + "resolved": "packages/utility-features/utilities", + "link": true + }, "node_modules/@k8slens/webpack": { "resolved": "packages/infrastructure/webpack", "link": true @@ -4673,16 +4685,6 @@ "react-dom": "^17 || ^18" } }, - "node_modules/@ogre-tools/injectable-utils": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-utils/-/injectable-utils-15.1.2.tgz", - "integrity": "sha512-2MjkmA2HRFQ6Czz8BWtujosFDgPO6OXnzkbWYvDFYT7W8zLJHmeXzt4mWjw90+vIfwAPOQWOlBP6T4yau9tSug==", - "peerDependencies": { - "@ogre-tools/fp": "*", - "@ogre-tools/injectable": "*", - "lodash": "^4.17.21" - } - }, "node_modules/@ogre-tools/test-utils": { "version": "15.1.2", "resolved": "https://registry.npmjs.org/@ogre-tools/test-utils/-/test-utils-15.1.2.tgz", @@ -30796,7 +30798,6 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, "engines": { "node": ">=12.20" }, @@ -32342,7 +32343,6 @@ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "@sentry/electron": "^3.0.8", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.1.0", @@ -32542,6 +32542,9 @@ "peerDependencies": { "@k8slens/application": "^6.5.0-alpha.0", "@k8slens/application-for-electron-main": "^6.5.0-alpha.0", + "@k8slens/run-many": "^1.0.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", @@ -34383,12 +34386,14 @@ "@k8slens/ensure-binaries": "^6.5.0-alpha.0", "@k8slens/feature-core": "^6.5.0-alpha.0", "@k8slens/generate-tray-icons": "^6.5.0-alpha.0", + "@k8slens/run-many": "^1.0.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@ogre-tools/fp": "^15.1.2", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "mobx": "^6.8.0", "rimraf": "^4.1.2" }, @@ -34901,7 +34906,6 @@ "@ogre-tools/fp": "^15.1.1", "@ogre-tools/injectable": "^15.1.1", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.1", - "@ogre-tools/injectable-utils": "^15.1.1", "lodash": "^4.17.15" } }, @@ -34917,7 +34921,6 @@ "@ogre-tools/fp": "^15.1.2", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "lodash": "^4.17.15" } }, @@ -34934,7 +34937,6 @@ "@k8slens/feature-core": "^6.5.0-alpha.0", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "electron": "^19.1.9" } }, @@ -34945,6 +34947,46 @@ "peerDependencies": { "@ogre-tools/injectable": "^15.1.2" } + }, + "packages/utility-features/run-many": { + "name": "@k8slens/run-many", + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1" + } + }, + "packages/utility-features/test-utils": { + "name": "@k8slens/test-utils", + "version": "1.0.0", + "license": "MIT" + }, + "packages/utility-features/types": { + "version": "1.0.0", + "extraneous": true, + "license": "MIT" + }, + "packages/utility-features/utilities": { + "name": "@k8slens/utilities", + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "mobx": "^6.8.0", + "type-fest": "^2.19.0" + } + }, + "packages/utility-features/utility-types": { + "name": "@k8slens/utilities", + "version": "1.0.0", + "extraneous": true, + "license": "MIT", + "peerDependencies": { + "mobx": "^6.8.0", + "type-fest": "^2.19.0" + } } } } diff --git a/packages/core/package.json b/packages/core/package.json index 9d216e60d9..04ca0224c3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -135,7 +135,6 @@ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "@sentry/electron": "^3.0.8", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.1.0", @@ -332,6 +331,9 @@ "peerDependencies": { "@k8slens/application": "^6.5.0-alpha.0", "@k8slens/application-for-electron-main": "^6.5.0-alpha.0", + "@k8slens/run-many": "^1.0.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", diff --git a/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts b/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts index db4734994d..76a7a9b539 100644 --- a/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts +++ b/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import pathToNpmCliInjectable from "./path-to-npm-cli.injectable"; export default getGlobalOverride(pathToNpmCliInjectable, () => "/some/npm/cli/path"); diff --git a/packages/core/src/common/base-store/base-store.ts b/packages/core/src/common/base-store/base-store.ts index ecdad5bd4d..be7abf1293 100644 --- a/packages/core/src/common/base-store/base-store.ts +++ b/packages/core/src/common/base-store/base-store.ts @@ -7,7 +7,7 @@ import type Config from "conf"; import type { Migrations, Options as ConfOptions } from "conf/dist/source/types"; import type { IEqualsComparer } from "mobx"; import { makeObservable, reaction } from "mobx"; -import { disposer, isPromiseLike, toJS } from "../utils"; +import { disposer, isPromiseLike } from "@k8slens/utilities"; import { broadcastMessage } from "../ipc"; import isEqual from "lodash/isEqual"; import { kebabCase } from "lodash"; @@ -16,6 +16,7 @@ import type { Logger } from "../logger"; import type { PersistStateToConfig } from "./save-to-file"; import type { GetBasenameOfPath } from "../path/get-basename.injectable"; import type { EnlistMessageChannelListener } from "../utils/channel/enlist-message-channel-listener-injection-token"; +import { toJS } from "../utils"; export interface BaseStoreParams extends Omit, "migrations"> { syncOptions?: { diff --git a/packages/core/src/common/base-store/migrations.injectable.ts b/packages/core/src/common/base-store/migrations.injectable.ts index 27f7489dfa..d97abee1ec 100644 --- a/packages/core/src/common/base-store/migrations.injectable.ts +++ b/packages/core/src/common/base-store/migrations.injectable.ts @@ -7,7 +7,7 @@ import { lifecycleEnum, getInjectable } from "@ogre-tools/injectable"; import type Conf from "conf/dist/source"; import type { Migrations } from "conf/dist/source/types"; import loggerInjectable from "../logger.injectable"; -import { getOrInsert, iter } from "../utils"; +import { getOrInsert, iter } from "@k8slens/utilities"; export interface MigrationDeclaration { version: string; diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts index 15195a4b74..b36be73de6 100644 --- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts +++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token"; import { GeneralEntity } from "../../index"; -import { buildURL } from "../../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; import catalogRouteInjectable from "../../../front-end-routing/routes/catalog/catalog-route.injectable"; const catalogCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts index 363dd73c5f..a00dcec323 100644 --- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts +++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token"; import { GeneralEntity } from "../../index"; -import { buildURL } from "../../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; import welcomeRouteInjectable from "../../../front-end-routing/routes/welcome/welcome-route.injectable"; const welcomeCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/common/catalog/catalog-entity.ts b/packages/core/src/common/catalog/catalog-entity.ts index eafe8fcb0c..bb45f4cb27 100644 --- a/packages/core/src/common/catalog/catalog-entity.ts +++ b/packages/core/src/common/catalog/catalog-entity.ts @@ -7,8 +7,8 @@ import EventEmitter from "events"; import type TypedEmitter from "typed-emitter"; import { observable, makeObservable } from "mobx"; import { once } from "lodash"; -import type { Disposer } from "../utils"; -import { iter } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { iter } from "@k8slens/utilities"; import type { CategoryColumnRegistration, TitleCellProps } from "../../renderer/components/+catalog/custom-category-columns"; export type { CategoryColumnRegistration, TitleCellProps }; diff --git a/packages/core/src/common/catalog/category-registry.ts b/packages/core/src/common/catalog/category-registry.ts index e4de26b322..f541645df0 100644 --- a/packages/core/src/common/catalog/category-registry.ts +++ b/packages/core/src/common/catalog/category-registry.ts @@ -5,8 +5,8 @@ import { action, computed, observable, makeObservable } from "mobx"; import { once } from "lodash"; -import { iter, getOrInsertMap, strictSet } from "../utils"; -import type { Disposer } from "../utils"; +import { iter, getOrInsertMap, strictSet } from "@k8slens/utilities"; +import type { Disposer } from "@k8slens/utilities"; import type { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity"; export type CategoryFilter = (category: CatalogCategory) => any; diff --git a/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts b/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts index d547516062..4d0aeec1d8 100644 --- a/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts +++ b/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import lensProxyCertificateInjectable from "./lens-proxy-certificate.injectable"; export default getGlobalOverride(lensProxyCertificateInjectable, () => { diff --git a/packages/core/src/common/cluster/list-namespaces.injectable.ts b/packages/core/src/common/cluster/list-namespaces.injectable.ts index 54e15c4c59..363a10abb1 100644 --- a/packages/core/src/common/cluster/list-namespaces.injectable.ts +++ b/packages/core/src/common/cluster/list-namespaces.injectable.ts @@ -5,7 +5,7 @@ import type { KubeConfig } from "@kubernetes/client-node"; import { CoreV1Api } from "@kubernetes/client-node"; import { getInjectable } from "@ogre-tools/injectable"; -import { isDefined } from "../utils"; +import { isDefined } from "@k8slens/utilities"; export type ListNamespaces = () => Promise; diff --git a/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts b/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts index 1aa2934ef9..1a7dce6a61 100644 --- a/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts +++ b/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import initializeSentryReportingWithInjectable from "./initialize-sentry-reporting.injectable"; export default getGlobalOverride(initializeSentryReportingWithInjectable, () => () => {}); diff --git a/packages/core/src/common/fetch/download-binary.injectable.ts b/packages/core/src/common/fetch/download-binary.injectable.ts index b50c4e5782..9f0ce65093 100644 --- a/packages/core/src/common/fetch/download-binary.injectable.ts +++ b/packages/core/src/common/fetch/download-binary.injectable.ts @@ -4,14 +4,14 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { RequestInit, Response } from "@k8slens/node-fetch"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import fetchInjectable from "./fetch.injectable"; export interface DownloadBinaryOptions { signal?: AbortSignal | null | undefined; } -export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => Promise>; +export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => AsyncResult; const downloadBinaryInjectable = getInjectable({ id: "download-binary", diff --git a/packages/core/src/common/fetch/download-json/impl.ts b/packages/core/src/common/fetch/download-json/impl.ts index bf5cf06a19..f691cc2762 100644 --- a/packages/core/src/common/fetch/download-json/impl.ts +++ b/packages/core/src/common/fetch/download-json/impl.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "../../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { Fetch } from "../fetch.injectable"; import type { RequestInit, Response } from "@k8slens/node-fetch"; @@ -10,7 +10,7 @@ export interface DownloadJsonOptions { signal?: AbortSignal | null | undefined; } -export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => Promise>; +export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => AsyncResult; export const downloadJsonWith = (fetch: Fetch): DownloadJson => async (url, opts) => { let result: Response; diff --git a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts index 1a5f80735c..7aa6db7a2d 100644 --- a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts +++ b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import fetchInjectable from "./fetch.injectable"; export default getGlobalOverrideForFunction(fetchInjectable); diff --git a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts index 0bc144b1be..3598b6ce14 100644 --- a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts +++ b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import lensFetchInjectable from "./lens-fetch.injectable"; export default getGlobalOverrideForFunction(lensFetchInjectable); diff --git a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts index 8e01646b82..3a6669d99f 100644 --- a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts +++ b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { shouldShowResourceInjectionToken } from "../../../../../cluster-store/allowed-resources-injection-token"; -import { computedOr } from "../../../../../utils/computed-or"; +import { computedOr } from "@k8slens/utilities"; import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token"; const ingressesRouteInjectable = getInjectable({ diff --git a/packages/core/src/common/fs/copy.global-override-for-injectable.ts b/packages/core/src/common/fs/copy.global-override-for-injectable.ts index b6d899d2c4..3799d3b760 100644 --- a/packages/core/src/common/fs/copy.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/copy.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import copyInjectable from "./copy.injectable"; export default getGlobalOverride(copyInjectable, () => async () => { diff --git a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts index 162666a130..381a546125 100644 --- a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import execFileInjectable from "./exec-file.injectable"; export default getGlobalOverrideForFunction(execFileInjectable); diff --git a/packages/core/src/common/fs/exec-file.injectable.ts b/packages/core/src/common/fs/exec-file.injectable.ts index f026e0db3a..9ee0fae78f 100644 --- a/packages/core/src/common/fs/exec-file.injectable.ts +++ b/packages/core/src/common/fs/exec-file.injectable.ts @@ -5,14 +5,14 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ExecFileException, ExecFileOptions } from "child_process"; import { execFile } from "child_process"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export type ExecFileError = ExecFileException & { stderr: string }; export interface ExecFile { - (filePath: string): Promise>; - (filePath: string, argsOrOptions: string[] | ExecFileOptions): Promise>; - (filePath: string, args: string[], options: ExecFileOptions): Promise>; + (filePath: string): AsyncResult; + (filePath: string, argsOrOptions: string[] | ExecFileOptions): AsyncResult; + (filePath: string, args: string[], options: ExecFileOptions): AsyncResult; } const execFileInjectable = getInjectable({ diff --git a/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts b/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts index 02a46c1d6b..68d1fe4259 100644 --- a/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import extractTarInjectable from "./extract-tar.injectable"; export default getGlobalOverride(extractTarInjectable, () => async () => { diff --git a/packages/core/src/common/fs/fs.injectable.ts b/packages/core/src/common/fs/fs.injectable.ts index 600e4eaa40..b42a51aad7 100644 --- a/packages/core/src/common/fs/fs.injectable.ts +++ b/packages/core/src/common/fs/fs.injectable.ts @@ -21,6 +21,7 @@ const fsInjectable = getInjectable({ rm, access, stat, + unlink, }, ensureDir, ensureDirSync, @@ -56,6 +57,7 @@ const fsInjectable = getInjectable({ ensureDirSync, createReadStream, stat, + unlink, }; }, causesSideEffects: true, diff --git a/packages/core/src/common/fs/lstat.global-override-for-injectable.ts b/packages/core/src/common/fs/lstat.global-override-for-injectable.ts index 9c9f3d4933..155fac7451 100644 --- a/packages/core/src/common/fs/lstat.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/lstat.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import lstatInjectable from "./lstat.injectable"; export default getGlobalOverride(lstatInjectable, () => async () => { diff --git a/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts b/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts index 57c83ceffb..72d9b523f4 100644 --- a/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import readDirectoryInjectable from "./read-directory.injectable"; export default getGlobalOverride(readDirectoryInjectable, () => async () => { diff --git a/packages/core/src/common/fs/remove.global-override-for-injectable.ts b/packages/core/src/common/fs/remove.global-override-for-injectable.ts index 4b92353344..58fb0f9dce 100644 --- a/packages/core/src/common/fs/remove.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/remove.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import removePathInjectable from "./remove.injectable"; export default getGlobalOverride(removePathInjectable, () => async () => { diff --git a/packages/core/src/common/fs/unlink.injectable.ts b/packages/core/src/common/fs/unlink.injectable.ts new file mode 100644 index 0000000000..e13bf35935 --- /dev/null +++ b/packages/core/src/common/fs/unlink.injectable.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import fsInjectable from "./fs.injectable"; + +export type Unlink = (path: string) => Promise; + +const unlinkInjectable = getInjectable({ + id: "unlink", + instantiate: (di): Unlink => di.inject(fsInjectable).unlink, +}); + +export default unlinkInjectable; diff --git a/packages/core/src/common/fs/validate-directory.injectable.ts b/packages/core/src/common/fs/validate-directory.injectable.ts index efce915238..717caf5ec8 100644 --- a/packages/core/src/common/fs/validate-directory.injectable.ts +++ b/packages/core/src/common/fs/validate-directory.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../utils/async-result"; -import { isErrnoException } from "../utils"; +import type { AsyncResult } from "@k8slens/utilities"; +import { isErrnoException } from "@k8slens/utilities"; import type { Stats } from "fs-extra"; import { lowerFirst } from "lodash/fp"; import statInjectable from "./stat.injectable"; -export type ValidateDirectory = (path: string) => Promise>; +export type ValidateDirectory = (path: string) => AsyncResult; function getUserReadableFileType(stats: Stats): string { if (stats.isFile()) { diff --git a/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts b/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts index 689c7150cf..b74c3eec20 100644 --- a/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import watchInjectable from "./watch.injectable"; export default getGlobalOverride(watchInjectable, () => () => { diff --git a/packages/core/src/common/fs/watch/watch.injectable.ts b/packages/core/src/common/fs/watch/watch.injectable.ts index 50f96cdf57..084197769d 100644 --- a/packages/core/src/common/fs/watch/watch.injectable.ts +++ b/packages/core/src/common/fs/watch/watch.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { watch } from "chokidar"; import type { Stats } from "fs"; import type TypedEventEmitter from "typed-emitter"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; export interface AlwaysStatWatcherEvents { add: (path: string, stats: Stats) => void; diff --git a/packages/core/src/common/fs/write-file.global-override-for-injectable.ts b/packages/core/src/common/fs/write-file.global-override-for-injectable.ts index c8b7ef8e45..e87f648305 100644 --- a/packages/core/src/common/fs/write-file.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/write-file.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import writeFileInjectable from "./write-file.injectable"; export default getGlobalOverride(writeFileInjectable, () => async () => { diff --git a/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts b/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts index 5f51460a2b..95e2845825 100644 --- a/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts +++ b/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts @@ -5,7 +5,7 @@ import assert from "assert"; import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getConfigurationFileModelInjectable from "./get-configuration-file-model.injectable"; import type Config from "conf"; import readJsonSyncInjectable from "../fs/read-json-sync.injectable"; diff --git a/packages/core/src/common/helm/add-helm-repository-channel.ts b/packages/core/src/common/helm/add-helm-repository-channel.ts index bf5aa19367..258367c7ec 100644 --- a/packages/core/src/common/helm/add-helm-repository-channel.ts +++ b/packages/core/src/common/helm/add-helm-repository-channel.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { HelmRepo } from "./helm-repo"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export type AddHelmRepositoryChannel = RequestChannel>; diff --git a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts index 26720e9a5f..2ea5a80030 100644 --- a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts +++ b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { HelmRepo } from "./helm-repo"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export type GetActiveHelmRepositoriesChannel = RequestChannel>; diff --git a/packages/core/src/common/helm/remove-helm-repository-channel.ts b/packages/core/src/common/helm/remove-helm-repository-channel.ts index 4d479d088c..f1189cb580 100644 --- a/packages/core/src/common/helm/remove-helm-repository-channel.ts +++ b/packages/core/src/common/helm/remove-helm-repository-channel.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; import type { HelmRepo } from "./helm-repo"; diff --git a/packages/core/src/common/hotbars/types.ts b/packages/core/src/common/hotbars/types.ts index 6370fe136d..2925c785a0 100644 --- a/packages/core/src/common/hotbars/types.ts +++ b/packages/core/src/common/hotbars/types.ts @@ -4,8 +4,8 @@ */ import * as uuid from "uuid"; -import type { Tuple } from "../utils"; -import { tuple } from "../utils"; +import type { Tuple } from "@k8slens/utilities"; +import { tuple } from "@k8slens/utilities"; export interface HotbarItem { entity: { diff --git a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts index e455b30cdc..519d0761ed 100644 --- a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts +++ b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import broadcastMessageInjectable from "./broadcast-message.injectable"; export default getGlobalOverrideForFunction(broadcastMessageInjectable); diff --git a/packages/core/src/common/ipc/ipc.ts b/packages/core/src/common/ipc/ipc.ts index e84fcfec56..4815fbfbf1 100644 --- a/packages/core/src/common/ipc/ipc.ts +++ b/packages/core/src/common/ipc/ipc.ts @@ -11,7 +11,7 @@ import { ipcMain, ipcRenderer, webContents } from "electron"; import { toJS } from "../utils/toJS"; import type { ClusterFrameInfo } from "../cluster-frames"; import { clusterFrameMap } from "../cluster-frames"; -import type { Disposer } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable"; import loggerInjectable from "../logger.injectable"; diff --git a/packages/core/src/common/item.store.ts b/packages/core/src/common/item.store.ts index 805137e95c..4d7c3343ef 100644 --- a/packages/core/src/common/item.store.ts +++ b/packages/core/src/common/item.store.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import autoBind from "auto-bind"; import orderBy from "lodash/orderBy"; -import { autoBind } from "./utils"; import { action, computed, observable, when, makeObservable } from "mobx"; export interface ItemObject { diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts index 5848be20c5..e3bcd70a81 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts @@ -10,7 +10,7 @@ import type { Fetch } from "../../fetch/fetch.injectable"; import fetchInjectable from "../../fetch/fetch.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { flushPromises } from "../../test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; import setupAutoRegistrationInjectable from "../../../renderer/before-frame-starts/runnables/setup-auto-registration.injectable"; import { createMockResponseFromString } from "../../../test-utils/mock-responses"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; @@ -119,7 +119,7 @@ describe("KubeApi", () => { ]); }); - describe("when resource request fufills with a resource", () => { + describe("when resource request fulfills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"], @@ -281,7 +281,7 @@ describe("KubeApi", () => { }); }); - describe("when resource request fufills with no resource", () => { + describe("when resource request fulfills with no resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"], @@ -305,7 +305,7 @@ describe("KubeApi", () => { - describe("when resource request fufills with a resource", () => { + describe("when resource request fulfills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1"], @@ -507,7 +507,7 @@ describe("KubeApi", () => { ]); }); - describe("when resource request fufills with a resource", () => { + describe("when resource request fulfills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ["https://127.0.0.1:12345/api-kube/apis/extensions"], diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts index 198ace4bbe..2b3978c0eb 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts @@ -15,7 +15,7 @@ import type { CreateKubeApiForRemoteCluster } from "../create-kube-api-for-remot import createKubeApiForRemoteClusterInjectable from "../create-kube-api-for-remote-cluster.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { flushPromises } from "../../test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; import createKubeJsonApiInjectable from "../create-kube-json-api.injectable"; import type { IKubeWatchEvent } from "../kube-watch-event"; import type { KubeJsonApiDataFor } from "../kube-object"; diff --git a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts index 424cffba23..24820648af 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { noop } from "../../utils"; +import { noop } from "@k8slens/utilities"; import type { KubeApi } from "../kube-api"; import { KubeObject } from "../kube-object"; import type { KubeObjectStoreLoadingParams } from "../kube-object.store"; diff --git a/packages/core/src/common/k8s-api/api-manager/api-manager.ts b/packages/core/src/common/k8s-api/api-manager/api-manager.ts index 0dad9a2a21..f6c2758921 100644 --- a/packages/core/src/common/k8s-api/api-manager/api-manager.ts +++ b/packages/core/src/common/k8s-api/api-manager/api-manager.ts @@ -10,7 +10,7 @@ import { autorun, action, observable } from "mobx"; import type { KubeApi } from "../kube-api"; import type { KubeObject, ObjectReference } from "../kube-object"; import { parseKubeApi, createKubeApiURL } from "../kube-api-parse"; -import { chain, find } from "../../utils/iter"; +import { iter } from "@k8slens/utilities"; export type RegisterableStore = Store extends KubeObjectStore ? Store @@ -38,7 +38,7 @@ export class ApiManager { constructor(private readonly dependencies: Dependencies) { // NOTE: this is done to preserve the old behaviour of an API being discoverable using all previous apiBases autorun(() => { - const apis = chain(this.dependencies.apis.get().values()) + const apis = iter.chain(this.dependencies.apis.get().values()) .concat(this.externalApis.values()); const removedApis = new Set(this.apis.values()); const newState = new Map(this.apis); @@ -62,7 +62,7 @@ export class ApiManager { getApi(pathOrCallback: string | FindApiCallback) { if (typeof pathOrCallback === "function") { - return find(this.apis.values(), pathOrCallback); + return iter.find(this.apis.values(), pathOrCallback); } const { apiBase } = parseKubeApi(pathOrCallback); @@ -130,7 +130,7 @@ export class ApiManager { return undefined; } - return chain(this.dependencies.stores.get().values()) + return iter.chain(this.dependencies.stores.get().values()) .concat(this.externalStores.values()) .find(store => store.api.apiBase === api.apiBase); } diff --git a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts index a2860246b1..cf635fb623 100644 --- a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts @@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { autoBind } from "../../utils"; +import autoBind from "auto-bind"; export interface ConfigMapData extends KubeJsonApiData, void, void> { data?: Partial>; diff --git a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts index 2ccb8c910c..1ad0c42511 100644 --- a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts @@ -6,7 +6,7 @@ import moment from "moment"; import type { NamespaceScopedMetadata, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { formatDuration } from "../../utils/formatDuration"; +import { formatDuration } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { JobTemplateSpec } from "./types/job-template-spec"; diff --git a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts index b438f06b3a..a9259e710e 100644 --- a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts @@ -5,7 +5,7 @@ import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import customResourcesRouteInjectable from "../../front-end-routing/routes/cluster/custom-resources/custom-resources/custom-resources-route.injectable"; -import { buildURL } from "../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts index 31bc55ae76..70e7200e3c 100644 --- a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts @@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api"; import type { PodSpec } from "./pod.api"; import type { KubeObjectStatus, LabelSelector, NamespaceScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { hasTypedProperty, isNumber, isObject } from "../../utils"; +import { hasTypedProperty, isNumber, isObject } from "@k8slens/utilities"; export class DeploymentApi extends KubeApi { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { diff --git a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts index c60377a887..1e045e902d 100644 --- a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind } from "../../utils"; +import autoBind from "auto-bind"; import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/events.api.ts b/packages/core/src/common/k8s-api/endpoints/events.api.ts index aca77712c8..1da4b6afe8 100644 --- a/packages/core/src/common/k8s-api/endpoints/events.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/events.api.ts @@ -6,7 +6,7 @@ import moment from "moment"; import type { KubeObjectMetadata, KubeObjectScope, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { formatDuration } from "../../utils/formatDuration"; +import { formatDuration } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts index 26da740830..da2d8ab00c 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts @@ -3,7 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind, bifurcateArray } from "../../utils"; +import { array } from "@k8slens/utilities"; +import autoBind from "auto-bind"; import Joi from "joi"; export interface RawHelmChart { @@ -263,7 +264,7 @@ export class HelmChart implements HelmChartData { return new HelmChart(result.value); } - const [actualErrors, unknownDetails] = bifurcateArray(result.error.details, ({ type }) => type === "object.unknown"); + const [actualErrors, unknownDetails] = array.bifurcate(result.error.details, ({ type }) => type === "object.unknown"); if (unknownDetails.length > 0) { console.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) }); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts index 4d9bfc55b1..246b628ea0 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { RawHelmChart } from "../helm-charts.api"; import { HelmChart } from "../helm-charts.api"; -import { isDefined } from "../../../utils"; +import { isDefined } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmCharts = () => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts index fb8eaafa10..d6977fc5ca 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../utils/async-result"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import type { AsyncResult } from "@k8slens/utilities"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; const requestReadmeEndpoint = urlBuilderFor("/v2/charts/:repo/:name/readme"); -export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => Promise>; +export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => AsyncResult; const requestHelmChartReadmeInjectable = getInjectable({ id: "request-helm-chart-readme", diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts index 71105c9ff9..2d4e77bf33 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../utils/async-result"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import type { AsyncResult } from "@k8slens/utilities"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; const requestValuesEndpoint = urlBuilderFor("/v2/charts/:repo/:name/values"); -export type RequestHelmChartValues = (repo: string, name: string, version: string) => Promise>; +export type RequestHelmChartValues = (repo: string, name: string, version: string) => AsyncResult; const requestHelmChartValuesInjectable = getInjectable({ id: "request-helm-chart-values", diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts index ab85594ec6..f7527c093a 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts @@ -3,10 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor, isDefined } from "@k8slens/utilities"; import { HelmChart } from "../helm-charts.api"; import type { RawHelmChart } from "../helm-charts.api"; -import { isDefined } from "../../../utils"; import apiBaseInjectable from "../../api-base.injectable"; const requestVersionsEndpoint = urlBuilderFor("/v2/charts/:repo/:name/versions"); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts index 18b3bd0ec0..631d4c5e17 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import requestHelmReleaseConfigurationInjectable from "./request-configuration.injectable"; export default getGlobalOverride(requestHelmReleaseConfigurationInjectable, () => () => { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts index e1581c5d76..b9e6de7b0c 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseConfiguration = ( diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts index c1cd09d40f..253e97bf72 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts @@ -5,7 +5,7 @@ import yaml from "js-yaml"; import { getInjectable } from "@ogre-tools/injectable"; import type { HelmReleaseUpdateDetails } from "../helm-releases.api"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseCreatePayload { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts index 44af4311a9..3b48f2d9b7 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestDeleteHelmRelease = (name: string, namespace: string) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts index 37f2287377..8c7b3dd472 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { KubeJsonApiData } from "../../kube-json-api"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseDetails { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts index 58b6a37dbb..9a9a3159ea 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseRevision { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts index ee6503ca99..ffd3a92dee 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; import type { HelmReleaseDto } from "../helm-releases.api"; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts index 036b399ef2..9e43e4d8ac 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts index 715a21cea9..3a23536673 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; -import type { AsyncResult } from "../../../utils/async-result"; +import { urlBuilderFor } from "@k8slens/utilities"; +import type { AsyncResult } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseUpdatePayload { @@ -18,7 +18,7 @@ export type RequestHelmReleaseUpdate = ( name: string, namespace: string, payload: HelmReleaseUpdatePayload -) => Promise>; +) => AsyncResult; const requestUpdateEndpoint = urlBuilderFor("/v2/releases/:namespace/:name"); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts index 99f1cc17d0..a1668b993e 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseValues = (name: string, namespace: string, all?: boolean) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts index f0bc5d14bc..b3bdbbf21d 100644 --- a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { OptionVarient } from "../../utils"; +import type { OptionVariant } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { BaseKubeObjectCondition, LabelSelector, NamespaceScopedMetadata } from "../kube-object"; @@ -46,7 +46,7 @@ export interface V2Beta1ContainerResourceMetricSource { targetAverageValue?: string; } -export type ContainerResourceMetricSource = +export type ContainerResourceMetricSource = | V2ContainerResourceMetricSource | V2Beta1ContainerResourceMetricSource; @@ -74,7 +74,7 @@ export interface V2Beta1ExternalMetricSource { }; } -export type ExternalMetricSource = +export type ExternalMetricSource = | V2Beta1ExternalMetricSource | V2ExternalMetricSource; @@ -152,11 +152,11 @@ export interface BaseHorizontalPodAutoscalerMetricSpec { } export type HorizontalPodAutoscalerMetricSpec = - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient; + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant; interface HorizontalPodAutoscalerBehavior { scaleUp?: HPAScalingRules; @@ -294,11 +294,11 @@ export interface BaseHorizontalPodAutoscalerMetricStatus { } export type HorizontalPodAutoscalerMetricStatus = - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient; + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant; export interface HorizontalPodAutoscalerSpec { scaleTargetRef: CrossVersionObjectReference; diff --git a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts index d35cd77c0b..2a9a49ad8e 100644 --- a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts @@ -5,7 +5,7 @@ import type { NamespaceScopedMetadata, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { hasTypedProperty, isString, iter } from "../../utils"; +import { hasTypedProperty, isString, iter } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { RequireExactlyOne } from "type-fest"; diff --git a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts index 406ab1d0b2..69465bbf6e 100644 --- a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts @@ -6,7 +6,7 @@ // Metrics api import moment from "moment"; -import { isDefined, object } from "../../utils"; +import { isDefined, object } from "@k8slens/utilities"; export interface MetricData { status: string; diff --git a/packages/core/src/common/k8s-api/endpoints/node.api.ts b/packages/core/src/common/k8s-api/endpoints/node.api.ts index 158f359a57..31839b24f8 100644 --- a/packages/core/src/common/k8s-api/endpoints/node.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/node.api.ts @@ -5,7 +5,7 @@ import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { cpuUnitsToNumber, unitsToBytes, isObject } from "../../../renderer/utils"; +import { cpuUnitsToNumber, unitsToBytes, isObject } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import { TypedRegEx } from "typed-regex"; diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts index 947d9139a3..25e4d63454 100644 --- a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts @@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object"; import type { Pod } from "./pod.api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { object } from "../../utils"; +import { object } from "@k8slens/utilities"; import type { ResourceRequirements } from "./types/resource-requirements"; export class PersistentVolumeClaimApi extends KubeApi { diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts index f4d80a82eb..6d6e249db5 100644 --- a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts @@ -5,7 +5,7 @@ import type { ClusterScopedMetadata, LabelSelector, ObjectReference, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { unitsToBytes } from "../../utils"; +import { unitsToBytes } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { ResourceRequirements } from "./types/resource-requirements"; diff --git a/packages/core/src/common/k8s-api/endpoints/pod.api.ts b/packages/core/src/common/k8s-api/endpoints/pod.api.ts index 3a0bed57cd..d0c0178d8d 100644 --- a/packages/core/src/common/k8s-api/endpoints/pod.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/pod.api.ts @@ -10,7 +10,7 @@ import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, Na import type { SecretReference } from "./secret.api"; import type { PersistentVolumeClaimSpec } from "./persistent-volume-claim.api"; import { KubeObject } from "../kube-object"; -import { isDefined } from "../../utils"; +import { isDefined } from "@k8slens/utilities"; import type { PodSecurityContext } from "./types/pod-security-context"; import type { Probe } from "./types/probe"; import type { Container } from "./types/container"; diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts index 49271fb6d2..714340c78a 100644 --- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts @@ -5,10 +5,10 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Patch } from "rfc6902"; import apiBaseInjectable from "../../api-base.injectable"; -import type { AsyncResult } from "../../../utils/async-result"; +import type { AsyncResult, Result } from "@k8slens/utilities"; import type { KubeJsonApiData } from "../../kube-json-api"; -export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => Promise>; +export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => AsyncResult; const requestKubeObjectPatchInjectable = getInjectable({ id: "request-kube-object-patch", @@ -23,7 +23,7 @@ const requestKubeObjectPatchInjectable = getInjectable({ ns, patch, }, - }) as AsyncResult; + }) as Result; if (!result.callWasSuccessful) { return result; diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts index 1891a779cf..211ada1575 100644 --- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts @@ -4,10 +4,10 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../api-base.injectable"; -import type { AsyncResult } from "../../../utils/async-result"; +import type { AsyncResult, Result } from "@k8slens/utilities"; import type { KubeJsonApiData } from "../../kube-json-api"; -export type RequestKubeObjectCreation = (resourceDescriptor: string) => Promise>; +export type RequestKubeObjectCreation = (resourceDescriptor: string) => AsyncResult; const requestKubeObjectCreationInjectable = getInjectable({ id: "request-kube-object-creation", @@ -15,7 +15,7 @@ const requestKubeObjectCreationInjectable = getInjectable({ const apiBase = di.inject(apiBaseInjectable); return async (data) => { - const result = await apiBase.post("/stack", { data }) as AsyncResult; + const result = await apiBase.post("/stack", { data }) as Result; if (!result.callWasSuccessful) { return result; diff --git a/packages/core/src/common/k8s-api/endpoints/secret.api.ts b/packages/core/src/common/k8s-api/endpoints/secret.api.ts index a5a3b5eb1c..213aa1ef2b 100644 --- a/packages/core/src/common/k8s-api/endpoints/secret.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/secret.api.ts @@ -6,9 +6,9 @@ import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; -import { autoBind } from "../../utils"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; +import autoBind from "auto-bind"; export enum SecretType { Opaque = "Opaque", diff --git a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts index bf121e47db..d0b7167876 100644 --- a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts @@ -3,12 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind } from "../../utils"; import type { ClusterScopedMetadata, KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; +import autoBind from "auto-bind"; export interface TopologySelectorLabelRequirement { key: string; diff --git a/packages/core/src/common/k8s-api/json-api.ts b/packages/core/src/common/k8s-api/json-api.ts index c99fddf4f6..00325f3853 100644 --- a/packages/core/src/common/k8s-api/json-api.ts +++ b/packages/core/src/common/k8s-api/json-api.ts @@ -15,8 +15,8 @@ import type { PartialDeep, ValueOf } from "type-fest"; import { EventEmitter } from "../../common/event-emitter"; import type { Logger } from "../../common/logger"; import type { Fetch } from "../fetch/fetch.injectable"; -import type { Defaulted } from "../utils"; -import { json } from "../utils"; +import type { Defaulted } from "@k8slens/utilities"; +import { isObject, isString, json } from "@k8slens/utilities"; export interface JsonApiData {} @@ -184,20 +184,17 @@ export class JsonApi = Js const res = await this.dependencies.fetch(reqUrl, reqInit); - return this.parseResponse(res, infoLog); + return await this.parseResponse(res, infoLog) as OutData; } - protected async parseResponse(res: Response, log: JsonApiLog): Promise { + protected async parseResponse(res: Response, log: JsonApiLog): Promise { const { status } = res; const text = await res.text(); - let data: any; - - try { - data = text ? json.parse(text) : ""; // DELETE-requests might not have response-body - } catch (e) { - data = text; - } + const parseResponse = json.parse(text || "{}"); + const data = parseResponse.callWasSuccessful + ? parseResponse.response as Data + : text as Data; if (status >= 200 && status < 300) { this.onData.emit(data, res); @@ -211,7 +208,7 @@ export class JsonApi = Js throw data; } - const error = new JsonApiErrorParsed(data, this.parseError(data, res)); + const error = new JsonApiErrorParsed(data as JsonApiError, this.parseError(data, res)); this.onError.emit(error, res); this.writeLog({ ...log, error }); @@ -219,16 +216,20 @@ export class JsonApi = Js throw error; } - protected parseError(error: JsonApiError | string, res: Response): string[] { - if (typeof error === "string") { + protected parseError(error: unknown, res: Response): string[] { + if (isString(error)) { return [error]; } + if (!isObject(error)) { + return []; + } + if (Array.isArray(error.errors)) { return error.errors.map(error => error.title); } - if (error.message) { + if (isString(error.message)) { return [error.message]; } diff --git a/packages/core/src/common/k8s-api/kube-api-parse.ts b/packages/core/src/common/k8s-api/kube-api-parse.ts index cb5315b50c..2bb397a8be 100644 --- a/packages/core/src/common/k8s-api/kube-api-parse.ts +++ b/packages/core/src/common/k8s-api/kube-api-parse.ts @@ -5,7 +5,7 @@ // Parse kube-api path and get api-version, group, etc. -import { splitArray } from "../utils"; +import { array } from "@k8slens/utilities"; export interface IKubeApiLinkRef { apiPrefix?: string; @@ -26,7 +26,7 @@ export function parseKubeApi(path: string): IKubeApiParsed { const apiPath = new URL(path, "https://localhost").pathname; const [, prefix, ...parts] = apiPath.split("/"); const apiPrefix = `/${prefix}`; - const [left, right, namespaced] = splitArray(parts, "namespaces"); + const [left, right, namespaced] = array.split(parts, "namespaces"); let apiGroup!: string; let apiVersion!: string; let namespace!: string; diff --git a/packages/core/src/common/k8s-api/kube-api.ts b/packages/core/src/common/k8s-api/kube-api.ts index 9db60b5484..95210478a1 100644 --- a/packages/core/src/common/k8s-api/kube-api.ts +++ b/packages/core/src/common/k8s-api/kube-api.ts @@ -13,8 +13,8 @@ import { KubeObject, KubeStatus, isKubeStatusData } from "./kube-object"; import byline from "byline"; import type { IKubeWatchEvent } from "./kube-watch-event"; import type { KubeJsonApiData, KubeJsonApi } from "./kube-json-api"; -import type { Disposer } from "../utils"; -import { isDefined, noop, WrappedAbortController } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { isDefined, noop, WrappedAbortController } from "@k8slens/utilities"; import type { RequestInit, Response } from "@k8slens/node-fetch"; import type { Patch } from "rfc6902"; import assert from "assert"; diff --git a/packages/core/src/common/k8s-api/kube-object.store.ts b/packages/core/src/common/k8s-api/kube-object.store.ts index 571e395a7b..f26b05283e 100644 --- a/packages/core/src/common/k8s-api/kube-object.store.ts +++ b/packages/core/src/common/k8s-api/kube-object.store.ts @@ -4,8 +4,8 @@ */ import { action, computed, makeObservable, observable, reaction } from "mobx"; -import type { Disposer } from "../utils"; -import { waitUntilDefined, autoBind, includes, rejectPromiseBy } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { waitUntilDefined, includes, rejectPromiseBy, object } from "@k8slens/utilities"; import type { KubeJsonApiDataFor, KubeObject } from "./kube-object"; import { KubeStatus } from "./kube-object"; import type { IKubeWatchEvent } from "./kube-watch-event"; @@ -17,9 +17,9 @@ import type { Patch } from "rfc6902"; import type { Logger } from "../logger"; import assert from "assert"; import type { PartialDeep } from "type-fest"; -import { entries } from "../utils/objects"; import AbortController from "abort-controller"; import type { ClusterContext } from "../../renderer/cluster-frame-context/cluster-frame-context"; +import autoBind from "auto-bind"; export type OnLoadFailure = (error: unknown) => void; @@ -179,7 +179,7 @@ export abstract class KubeObjectStore< return this.items.filter((item: K) => { const itemLabels = item.metadata.labels || {}; - return entries(labels) + return object.entries(labels) .every(([key, value]) => itemLabels[key] === value); }); } diff --git a/packages/core/src/common/k8s-api/kube-object.ts b/packages/core/src/common/k8s-api/kube-object.ts index d88c19db89..e700710788 100644 --- a/packages/core/src/common/k8s-api/kube-object.ts +++ b/packages/core/src/common/k8s-api/kube-object.ts @@ -7,7 +7,7 @@ import moment from "moment"; import type { KubeJsonApiData, KubeJsonApiDataList, KubeJsonApiListMetadata } from "./kube-json-api"; -import { autoBind, formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord, json } from "../utils"; +import { formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord } from "@k8slens/utilities"; import type { ItemObject } from "../item.store"; import type { Patch } from "rfc6902"; import assert from "assert"; @@ -17,6 +17,7 @@ import { apiKubeInjectionToken } from "./api-kube"; import requestKubeObjectCreationInjectable from "./endpoints/resource-applier.api/request-update.injectable"; import { dump } from "js-yaml"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import autoBind from "auto-bind"; export type KubeJsonApiDataFor = K extends KubeObject ? KubeJsonApiData @@ -624,7 +625,7 @@ export class KubeObject< } toPlainObject() { - return json.parse(JSON.stringify(this)) as JsonObject; + return JSON.parse(JSON.stringify(this)) as JsonObject; } /** diff --git a/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts b/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts index 616e110c88..3a75fb6134 100644 --- a/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts +++ b/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import windowLocationInjectable from "./window-location.injectable"; export default getGlobalOverride(windowLocationInjectable, () => ({ diff --git a/packages/core/src/common/k8s/resource-stack.ts b/packages/core/src/common/k8s/resource-stack.ts index 5bdafdc58d..75460423d1 100644 --- a/packages/core/src/common/k8s/resource-stack.ts +++ b/packages/core/src/common/k8s/resource-stack.ts @@ -7,13 +7,13 @@ import type { KubernetesCluster } from "../catalog-entities"; import yaml from "js-yaml"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import productNameInjectable from "../vars/product-name.injectable"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { Logger } from "../logger"; import type { KubectlApplyAll, KubectlDeleteAll } from "../kube-helpers/channels"; import type { ReadDirectory } from "../fs/read-directory.injectable"; import type { JoinPaths } from "../path/join-paths.injectable"; import type { ReadFile } from "../fs/read-file.injectable"; -import { hasTypedProperty, isObject } from "../utils"; +import { hasTypedProperty, isObject } from "@k8slens/utilities"; export interface ResourceApplyingStack { kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise; @@ -72,7 +72,7 @@ export class ResourceStack { return ""; } - protected async applyResources(resources: string[], extraArgs: string[] = []): Promise> { + protected async applyResources(resources: string[], extraArgs: string[] = []): AsyncResult { const kubectlArgs = [...extraArgs, ...this.getAdditionalArgs(extraArgs)]; return this.dependencies.kubectlApplyAll({ @@ -82,7 +82,7 @@ export class ResourceStack { }); } - protected async deleteResources(resources: string[], extraArgs: string[] = []): Promise> { + protected async deleteResources(resources: string[], extraArgs: string[] = []): AsyncResult { const kubectlArgs = [...extraArgs, ...this.getAdditionalArgs(extraArgs)]; return this.dependencies.kubectlDeleteAll({ diff --git a/packages/core/src/common/kube-helpers.ts b/packages/core/src/common/kube-helpers.ts index c439c29d16..6deb9ab8a1 100644 --- a/packages/core/src/common/kube-helpers.ts +++ b/packages/core/src/common/kube-helpers.ts @@ -7,7 +7,7 @@ import { KubeConfig } from "@kubernetes/client-node"; import yaml from "js-yaml"; import type { Cluster, Context, User } from "@kubernetes/client-node/dist/config_types"; import { newClusters, newContexts, newUsers } from "@kubernetes/client-node/dist/config_types"; -import { isDefined } from "./utils"; +import { isDefined } from "@k8slens/utilities"; import Joi from "joi"; import type { PartialDeep } from "type-fest"; diff --git a/packages/core/src/common/kube-helpers/channels.ts b/packages/core/src/common/kube-helpers/channels.ts index 4782f64367..b48f9f1f99 100644 --- a/packages/core/src/common/kube-helpers/channels.ts +++ b/packages/core/src/common/kube-helpers/channels.ts @@ -7,7 +7,7 @@ import { getInjectionToken } from "@ogre-tools/injectable"; import type { Asyncify } from "type-fest"; import type { RequestChannelHandler } from "../../main/utils/channel/channel-listeners/listener-tokens"; import type { ClusterId } from "../cluster-types"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export interface KubectlApplyAllArgs { diff --git a/packages/core/src/common/log-error.global-override-for-injectable.ts b/packages/core/src/common/log-error.global-override-for-injectable.ts index e3a03c2802..95fa0ac16f 100644 --- a/packages/core/src/common/log-error.global-override-for-injectable.ts +++ b/packages/core/src/common/log-error.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "./test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import logErrorInjectable from "./log-error.injectable"; // Note: this should remain as it is, and throw if called. Logging error is something diff --git a/packages/core/src/common/logger.global-override-for-injectable.ts b/packages/core/src/common/logger.global-override-for-injectable.ts index cad548cd22..e314316d47 100644 --- a/packages/core/src/common/logger.global-override-for-injectable.ts +++ b/packages/core/src/common/logger.global-override-for-injectable.ts @@ -4,13 +4,12 @@ */ import loggerInjectable from "./logger.injectable"; -import { getGlobalOverride } from "./test-utils/get-global-override"; -import { noop } from "./utils"; +import { getGlobalOverride } from "@k8slens/test-utils"; export default getGlobalOverride(loggerInjectable, () => ({ - warn: noop, - debug: noop, - error: noop, - info: noop, - silly: noop, + warn: () => {}, + debug: () => {}, + error: () => {}, + info: () => {}, + silly: () => {}, })); diff --git a/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts b/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts index 05615644f9..dde5e3008c 100644 --- a/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts +++ b/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import tempDirectoryPathInjectable from "./temp-directory-path.injectable"; export default getGlobalOverride(tempDirectoryPathInjectable, () => "/some-temp-directory"); diff --git a/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts b/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts index 15f377cb2c..6ebbd34bd8 100644 --- a/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts +++ b/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getAbsolutePathInjectable from "./get-absolute-path.injectable"; export default getGlobalOverride(getAbsolutePathInjectable, () => path.posix.resolve); diff --git a/packages/core/src/common/path/get-basename.global-override-for-injectable.ts b/packages/core/src/common/path/get-basename.global-override-for-injectable.ts index 913ec9c5c2..76c45ae30f 100644 --- a/packages/core/src/common/path/get-basename.global-override-for-injectable.ts +++ b/packages/core/src/common/path/get-basename.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getBasenameOfPathInjectable from "./get-basename.injectable"; export default getGlobalOverride(getBasenameOfPathInjectable, () => path.posix.basename); diff --git a/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts b/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts index ed694de182..5579636551 100644 --- a/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts +++ b/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getDirnameOfPathInjectable from "./get-dirname.injectable"; export default getGlobalOverride(getDirnameOfPathInjectable, () => path.posix.dirname); diff --git a/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts b/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts index 9e96b70301..987165af15 100644 --- a/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts +++ b/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getRelativePathInjectable from "./get-relative-path.injectable"; export default getGlobalOverride(getRelativePathInjectable, () => path.posix.relative); diff --git a/packages/core/src/common/path/join-paths.global-override-for-injectable.ts b/packages/core/src/common/path/join-paths.global-override-for-injectable.ts index d3e9d5e4c2..320490c0f3 100644 --- a/packages/core/src/common/path/join-paths.global-override-for-injectable.ts +++ b/packages/core/src/common/path/join-paths.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import joinPathsInjectable from "./join-paths.injectable"; export default getGlobalOverride(joinPathsInjectable, () => path.posix.join); diff --git a/packages/core/src/common/path/parse.global-override-for-injectable.ts b/packages/core/src/common/path/parse.global-override-for-injectable.ts index fad97db696..9dbc434bca 100644 --- a/packages/core/src/common/path/parse.global-override-for-injectable.ts +++ b/packages/core/src/common/path/parse.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import parsePathInjectable from "./parse.injectable"; export default getGlobalOverride(parsePathInjectable, () => path.posix.parse); diff --git a/packages/core/src/common/path/separator.global-override-for-injectable.ts b/packages/core/src/common/path/separator.global-override-for-injectable.ts index 655f8908b0..25d0700481 100644 --- a/packages/core/src/common/path/separator.global-override-for-injectable.ts +++ b/packages/core/src/common/path/separator.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import path from "path"; -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import fileSystemSeparatorInjectable from "./separator.injectable"; export default getGlobalOverride(fileSystemSeparatorInjectable, () => path.posix.sep); diff --git a/packages/core/src/common/protocol-handler/router.ts b/packages/core/src/common/protocol-handler/router.ts index 8c9915b287..0018c385c2 100644 --- a/packages/core/src/common/protocol-handler/router.ts +++ b/packages/core/src/common/protocol-handler/router.ts @@ -6,7 +6,7 @@ import type { match } from "react-router"; import { matchPath } from "react-router"; import { countBy } from "lodash"; -import { isDefined, iter } from "../utils"; +import { isDefined, iter } from "@k8slens/utilities"; import { pathToRegexp } from "path-to-regexp"; import type Url from "url-parse"; import { RoutingError, RoutingErrorType } from "./error"; diff --git a/packages/core/src/common/runnable/run-many-for.ts b/packages/core/src/common/runnable/run-many-for.ts deleted file mode 100644 index 106cc74da1..0000000000 --- a/packages/core/src/common/runnable/run-many-for.ts +++ /dev/null @@ -1,140 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable"; -import type { SingleOrMany } from "../utils"; -import { getOrInsert, getOrInsertSetFor, isDefined } from "../utils"; -import * as uuid from "uuid"; -import assert from "assert"; -import type { Asyncify } from "type-fest"; -import type TypedEventEmitter from "typed-emitter"; -import EventEmitter from "events"; - -export interface Runnable { - id: string; - run: Run; - runAfter?: SingleOrMany>; -} - -type Run = (parameter: Param) => Promise | void; - -export type RunMany = (injectionToken: InjectionToken, void>) => Asyncify>; - -const computedNextEdge = (traversed: string[], graph: Map>, currentId: string, seenIds: Set) => { - seenIds.add(currentId); - const currentNode = graph.get(currentId); - - assert(currentNode, `Runnable graph does not contain node with id="${currentId}"`); - - for (const nextId of currentNode.values()) { - if (traversed.includes(nextId)) { - throw new Error(`Cycle in runnable graph: "${traversed.join(`" -> "`)}" -> "${nextId}"`); - } - - computedNextEdge([...traversed, nextId], graph, nextId, seenIds); - } -}; - -const verifyRunnablesAreDAG = (injectionToken: InjectionToken, void>, runnables: Runnable[]) => { - const rootId = uuid.v4(); - const runnableGraph = new Map>(); - const seenIds = new Set(); - const addRunnableId = getOrInsertSetFor(runnableGraph); - - // Build the Directed graph - for (const runnable of runnables) { - addRunnableId(runnable.id); - - if (!runnable.runAfter || (Array.isArray(runnable.runAfter) && runnable.runAfter.length === 0)) { - addRunnableId(rootId).add(runnable.id); - } else if (Array.isArray(runnable.runAfter)) { - for (const parentRunnable of runnable.runAfter) { - addRunnableId(parentRunnable.id).add(runnable.id); - } - } else { - addRunnableId(runnable.runAfter.id).add(runnable.id); - } - } - - addRunnableId(rootId); - - // Do a DFS to find any cycles - computedNextEdge([], runnableGraph, rootId, seenIds); - - for (const id of runnableGraph.keys()) { - if (!seenIds.has(id)) { - const runnable = runnables.find(runnable => runnable.id === id); - - if (!runnable) { - throw new Error(`Runnable "${id}" is not part of the injection token "${injectionToken.id}"`); - } - - const runAfters = [runnable.runAfter] - .flat() - .filter(isDefined) - .map(runnable => runnable.id) - .join('", "'); - - throw new Error(`Runnable "${id}" is unreachable for injection token "${injectionToken.id}": run afters "${runAfters}" are a part of different injection tokens.`); - } - } -}; - -interface BarrierEvent { - finish: (id: string) => void; -} - -class DynamicBarrier { - private readonly finishedIds = new Map>(); - private readonly events: TypedEventEmitter = new EventEmitter(); - - private initFinishingPromise(id: string): Promise { - return getOrInsert(this.finishedIds, id, new Promise(resolve => { - const handler = (finishedId: string) => { - if (finishedId === id) { - resolve(); - this.events.removeListener("finish", handler); - } - }; - - this.events.addListener("finish", handler); - })); - } - - setFinished(id: string): void { - void this.initFinishingPromise(id); - - this.events.emit("finish", id); - } - - async blockOn(id: string): Promise { - await this.initFinishingPromise(id); - } -} - -const executeRunnableWith = (param: Param) => { - const barrier = new DynamicBarrier(); - - return async (runnable: Runnable): Promise => { - const parentRunnables = [runnable.runAfter].flat().filter(isDefined); - - for (const parentRunnable of parentRunnables) { - await barrier.blockOn(parentRunnable.id); - } - - await runnable.run(param); - barrier.setFinished(runnable.id); - }; -}; - -export function runManyFor(di: DiContainerForInjection): RunMany { - return (injectionToken: InjectionToken, void>) => async (param: Param) => { - const executeRunnable = executeRunnableWith(param); - const allRunnables = di.injectMany(injectionToken); - - verifyRunnablesAreDAG(injectionToken, allRunnables); - - await Promise.all(allRunnables.map(executeRunnable)); - }; -} diff --git a/packages/core/src/common/runnable/run-many-sync-for.ts b/packages/core/src/common/runnable/run-many-sync-for.ts deleted file mode 100644 index 08dba2f72d..0000000000 --- a/packages/core/src/common/runnable/run-many-sync-for.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable"; -import type { Composite } from "../utils/composite/get-composite/get-composite"; -import { getCompositeFor } from "../utils/composite/get-composite/get-composite"; -import * as uuid from "uuid"; - -export interface RunnableSync { - id: string; - run: RunSync; - runAfter?: RunnableSync; -} - -/** - * NOTE: this is the worse of two evils. This makes sure that `RunnableSync` always is sync. - * If the return type is `void` instead then async functions (those return `Promise`) can - * coerce to it. - */ -type RunSync = (parameter: Param) => undefined; - -export type RunManySync = (injectionToken: InjectionToken, void>) => RunSync; - -function runCompositeRunnableSyncs(param: Param, composite: Composite>): undefined { - composite.value.run(param); - composite.children.map(composite => runCompositeRunnableSyncs(param, composite)); - - return undefined; -} - -export function runManySyncFor(di: DiContainerForInjection): RunManySync { - return (injectionToken: InjectionToken, void>) => (param: Param): undefined => { - const allRunnables = di.injectMany(injectionToken); - const rootId = uuid.v4(); - const getCompositeRunnables = getCompositeFor>({ - getId: (runnable) => runnable.id, - getParentId: (runnable) => ( - runnable.id === rootId - ? undefined - : runnable.runAfter?.id ?? rootId - ), - }); - const composite = getCompositeRunnables([ - // This is a dummy runnable to conform to the requirements of `getCompositeFor` to only have one root - { - id: rootId, - run: () => undefined, - }, - ...allRunnables, - ]); - - return runCompositeRunnableSyncs(param, composite); - }; -} diff --git a/packages/core/src/common/test-utils/get-global-override.ts b/packages/core/src/common/test-utils/get-global-override.ts deleted file mode 100644 index ac3c86a33e..0000000000 --- a/packages/core/src/common/test-utils/get-global-override.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import type { Injectable } from "@ogre-tools/injectable"; - -export interface GlobalOverride { - injectable: Injectable; - overridingInstantiate: any; -} - -export const getGlobalOverride = >( - injectable: T, - overridingInstantiate: T["instantiate"], -) => ({ - injectable, - overridingInstantiate, - }); diff --git a/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts b/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts index 6056074d3c..ef831ca3c1 100644 --- a/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts +++ b/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import currentTimezoneInjectable from "./current-timezone.injectable"; export default getGlobalOverride(currentTimezoneInjectable, () => "Etc/GMT"); diff --git a/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts b/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts index bb0ac054f3..0cd1383cc6 100644 --- a/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts +++ b/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import userStoreFileNameMigrationInjectable from "./file-name-migration.injectable"; export default getGlobalOverride(userStoreFileNameMigrationInjectable, () => async () => {}); diff --git a/packages/core/src/common/user-store/file-name-migration.injectable.ts b/packages/core/src/common/user-store/file-name-migration.injectable.ts index 106f559ef0..31d5352056 100644 --- a/packages/core/src/common/user-store/file-name-migration.injectable.ts +++ b/packages/core/src/common/user-store/file-name-migration.injectable.ts @@ -5,7 +5,7 @@ import fse from "fs-extra"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { isErrnoException } from "../utils"; +import { isErrnoException } from "@k8slens/utilities"; import { getInjectable } from "@ogre-tools/injectable"; import joinPathsInjectable from "../path/join-paths.injectable"; diff --git a/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts b/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts index 21fb26f8a9..cc650f6de3 100644 --- a/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts +++ b/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import userInfoInjectable from "./user-info.injectable"; export default getGlobalOverride(userInfoInjectable, () => ({ diff --git a/packages/core/src/common/user-store/user-store.ts b/packages/core/src/common/user-store/user-store.ts index 8979ba3351..4ffa31fac1 100644 --- a/packages/core/src/common/user-store/user-store.ts +++ b/packages/core/src/common/user-store/user-store.ts @@ -6,7 +6,7 @@ import { action, observable, makeObservable, isObservableArray, isObservableSet, isObservableMap } from "mobx"; import type { BaseStoreDependencies } from "../base-store/base-store"; import { BaseStore } from "../base-store/base-store"; -import { getOrInsertSet, toggle, toJS, object } from "../../renderer/utils"; +import { getOrInsertSet, toggle, object } from "@k8slens/utilities"; import type { UserPreferencesModel, StoreType } from "./preferences-helpers"; import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; @@ -14,6 +14,7 @@ import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; import type { SelectedUpdateChannel } from "../../features/application-update/common/selected-update-channel/selected-update-channel.injectable"; import type { ReleaseChannel } from "../../features/application-update/common/update-channels"; import type { PreferenceDescriptors } from "./preference-descriptors.injectable"; +import { toJS } from "../utils"; export interface UserStoreModel { preferences: UserPreferencesModel; diff --git a/packages/core/src/common/utils/__tests__/iter.test.ts b/packages/core/src/common/utils/__tests__/iter.test.ts deleted file mode 100644 index 2489649d90..0000000000 --- a/packages/core/src/common/utils/__tests__/iter.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { join, nth, reduce, concat } from "../iter"; - -describe("iter", () => { - describe("reduce", () => { - it("can reduce a value", () => { - expect(reduce([1, 2, 3], (acc: number[], current: number) => [current, ...acc], [0])).toEqual([3, 2, 1, 0]); - }); - - it("can reduce an empty iterable", () => { - expect(reduce([], (acc: number[], current: number) => [acc[0] + current], [])).toEqual([]); - }); - }); - - describe("join", () => { - it("should not prefix the output by the seperator", () => { - expect(join(["a", "b", "c"].values(), " ")).toBe("a b c"); - }); - - it("should return empty string if iterator is empty", () => { - expect(join([].values(), " ")).toBe(""); - }); - - it("should return just first entry if iterator is of size 1", () => { - expect(join(["d"].values(), " ")).toBe("d"); - }); - }); - - describe("nth", () => { - it("should return undefined past the end of the iterator", () => { - expect(nth(["a"], 123)).toBeUndefined(); - }); - - it("should by 0-indexing the index", () => { - expect(nth(["a", "b"], 0)).toBe("a"); - }); - }); - - describe("concat", () => { - it("should yield undefined for empty args", () => { - const iter = concat(); - - expect(iter.next()).toEqual({ done: true }); - }); - - it("should yield undefined for only empty args", () => { - const iter = concat([].values(), [].values(), [].values(), [].values()); - - expect(iter.next()).toEqual({ done: true }); - }); - - it("should yield all of the first and then all of the second", () => { - const iter = concat([1, 2, 3].values(), [4, 5, 6].values()); - - expect(iter.next()).toEqual({ done: false, value: 1 }); - expect(iter.next()).toEqual({ done: false, value: 2 }); - expect(iter.next()).toEqual({ done: false, value: 3 }); - expect(iter.next()).toEqual({ done: false, value: 4 }); - expect(iter.next()).toEqual({ done: false, value: 5 }); - expect(iter.next()).toEqual({ done: false, value: 6 }); - expect(iter.next()).toEqual({ done: true }); - }); - }); -}); diff --git a/packages/core/src/common/utils/__tests__/n-fircate.test.ts b/packages/core/src/common/utils/__tests__/n-fircate.test.ts deleted file mode 100644 index 7e6f84a095..0000000000 --- a/packages/core/src/common/utils/__tests__/n-fircate.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { nFircate } from "../n-fircate"; - -describe("nFircate", () => { - it("should produce an empty array if no parts are provided", () => { - expect(nFircate([{ a: 1 }, { a: 2 }], "a", []).length).toBe(0); - }); - - it("should ignore non-matching parts", () => { - const res = nFircate([{ a: 1 }, { a: 2 }], "a", [1]); - - expect(res.length).toBe(1); - expect(res[0].length).toBe(1); - }); - - it("should include all matching parts in each type", () => { - const res = nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2]); - - expect(res.length).toBe(2); - expect(res[0].length).toBe(2); - expect(res[0][0].b).toBe("a"); - expect(res[0][1].b).toBe("c"); - expect(res[1].length).toBe(1); - expect(res[1][0].b).toBe("b"); - }); - - it("should throw a type error if the same part is provided more than once", () => { - try { - nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2, 1]); - fail("Expected error"); - } catch (error) { - expect(error).toBeInstanceOf(TypeError); - } - }); -}); diff --git a/packages/core/src/common/utils/array.ts b/packages/core/src/common/utils/array.ts deleted file mode 100644 index b9071c33ec..0000000000 --- a/packages/core/src/common/utils/array.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -/** - * A inference typed version of `Array(length).fill(value)` - * @param length The number of entries - * @param value The value of each of the indices - */ -export function filled(length: number, value: T): T[] { - return Array(length).fill(value); -} diff --git a/packages/core/src/common/utils/autobind.ts b/packages/core/src/common/utils/autobind.ts deleted file mode 100644 index 49feb435e3..0000000000 --- a/packages/core/src/common/utils/autobind.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type { Options } from "auto-bind"; -import autoBindClass from "auto-bind"; -import autoBindReactClass from "auto-bind/react"; -import React from "react"; - -// Automatically bind methods to their class instance -export function autoBind(obj: T, opts?: Options): T { - if (obj instanceof React.Component) { - return autoBindReactClass(obj, opts); - } - - return autoBindClass(obj, opts); -} diff --git a/packages/core/src/common/utils/channel/channel.test.ts b/packages/core/src/common/utils/channel/channel.test.ts index 72204d4fb6..c27817dd68 100644 --- a/packages/core/src/common/utils/channel/channel.test.ts +++ b/packages/core/src/common/utils/channel/channel.test.ts @@ -16,7 +16,7 @@ import { requestFromChannelInjectionToken } from "./request-from-channel-injecti import type { RequestChannel } from "./request-channel-listener-injection-token"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { getPromiseStatus } from "../../test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import { runInAction } from "mobx"; import type { RequestChannelHandler } from "../../../main/utils/channel/channel-listeners/listener-tokens"; import { diff --git a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts index 34f62d51d5..d6db37cea2 100644 --- a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts +++ b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Disposer } from "../disposer"; +import type { Disposer } from "@k8slens/utilities"; import type { MessageChannel, MessageChannelListener } from "./message-channel-listener-injection-token"; export type EnlistMessageChannelListener = (listener: MessageChannelListener>) => Disposer; diff --git a/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts b/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts index afe0c08f24..6ebc9ca7c1 100644 --- a/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts +++ b/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts @@ -4,9 +4,9 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { getStartableStoppable } from "../get-startable-stoppable"; -import { disposer } from "../index"; import { messageChannelListenerInjectionToken } from "./message-channel-listener-injection-token"; import { enlistMessageChannelListenerInjectionToken } from "./enlist-message-channel-listener-injection-token"; +import { disposer } from "@k8slens/utilities"; const listeningOnMessageChannelsInjectable = getInjectable({ id: "listening-on-message-channels", diff --git a/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts b/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts index 14e925f190..dc3d1fa1a4 100644 --- a/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts +++ b/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts @@ -6,8 +6,8 @@ import { getInjectionToken } from "@ogre-tools/injectable"; import type { RequestChannel } from "./request-channel-listener-injection-token"; export interface RequestFromChannel { - (channel: RequestChannel, request: Request): Promise; - (channel: RequestChannel): Promise; + (channel: RequestChannel, request: Request): Promise>; + (channel: RequestChannel): Promise>; } export const requestFromChannelInjectionToken = getInjectionToken({ diff --git a/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts b/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts index ad8e2ed25b..c31f1cd8ee 100644 --- a/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts +++ b/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { isBoolean } from "@k8slens/utilities"; import type { IComputedValue } from "mobx"; -import { isBoolean } from "../../type-narrowing"; export interface Showable { readonly isShown: IComputedValue | boolean; diff --git a/packages/core/src/common/utils/escapeRegExp.ts b/packages/core/src/common/utils/escapeRegExp.ts deleted file mode 100644 index 9d5c7e2ff6..0000000000 --- a/packages/core/src/common/utils/escapeRegExp.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -// Helper to sanitize / escape special chars for passing to RegExp-constructor - -export function escapeRegExp(str: string) { - return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} diff --git a/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts b/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts index a0f87b4180..36f598cde1 100644 --- a/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts +++ b/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getRandomIdInjectable from "./get-random-id.injectable"; export default getGlobalOverride(getRandomIdInjectable, () => () => "some-irrelevant-random-id"); diff --git a/packages/core/src/common/utils/getRandId.ts b/packages/core/src/common/utils/getRandId.ts deleted file mode 100644 index 489456d56b..0000000000 --- a/packages/core/src/common/utils/getRandId.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -// Create random system name - -export function getRandId({ prefix = "", suffix = "", sep = "_" } = {}) { - const randId = () => Math.random().toString(16).slice(2); - - return [prefix, randId(), suffix].filter(s => s).join(sep); -} diff --git a/packages/core/src/common/utils/index.ts b/packages/core/src/common/utils/index.ts index 4857d04418..d95bd52904 100644 --- a/packages/core/src/common/utils/index.ts +++ b/packages/core/src/common/utils/index.ts @@ -3,50 +3,5 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -export * from "./abort-controller"; -export * from "./autobind"; -export * from "./camelCase"; export * from "./cluster-id-url-parsing"; -export * from "./collection-functions"; -export * from "./convertCpu"; -export * from "./convertMemory"; -export * from "./debouncePromise"; -export * from "./delay"; -export * from "./disposer"; -export * from "./escapeRegExp"; -export * from "./formatDuration"; -export * from "./getRandId"; -export * from "./hash-set"; -export * from "./n-fircate"; -export * from "./noop"; -export * from "./observable-crate/impl"; -export * from "./promise-exec"; -export * from "./readonly"; -export * from "./reject-promise"; -export * from "./singleton"; -export * from "./sort-compare"; -export * from "./splitArray"; -export * from "./tar"; export * from "./toJS"; -export * from "./type-narrowing"; -export * from "./types"; -export * from "./wait-for-path"; -export * from "./wait"; - -export type { Tuple } from "./tuple"; - -import * as iter from "./iter"; -import * as array from "./array"; -import * as tuple from "./tuple"; -import * as base64 from "./base64"; -import * as object from "./objects"; -import * as json from "./json"; - -export { - iter, - array, - tuple, - base64, - object, - json, -}; diff --git a/packages/core/src/common/utils/is-promise/is-promise.test.ts b/packages/core/src/common/utils/is-promise/is-promise.test.ts deleted file mode 100644 index 565f272ed6..0000000000 --- a/packages/core/src/common/utils/is-promise/is-promise.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { isPromise } from "./is-promise"; - -describe("isPromise", () => { - it("given promise, returns true", () => { - const actual = isPromise(new Promise(() => {})); - - expect(actual).toBe(true); - }); - - it("given non-promise, returns false", () => { - const actual = isPromise({}); - - expect(actual).toBe(false); - }); - - it("given thenable, returns false", () => { - const actual = isPromise({ then: () => {} }); - - expect(actual).toBe(false); - }); - - it("given nothing, returns false", () => { - const actual = isPromise(undefined); - - expect(actual).toBe(false); - }); -}); diff --git a/packages/core/src/common/utils/is-promise/is-promise.ts b/packages/core/src/common/utils/is-promise/is-promise.ts deleted file mode 100644 index 6261f569cd..0000000000 --- a/packages/core/src/common/utils/is-promise/is-promise.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -export function isPromise(reference: any): reference is Promise { - return reference?.constructor === Promise; -} diff --git a/packages/core/src/common/utils/json.ts b/packages/core/src/common/utils/json.ts deleted file mode 100644 index 53d357f05c..0000000000 --- a/packages/core/src/common/utils/json.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type { JsonValue } from "type-fest"; - -export function parse(input: string): JsonValue { - return JSON.parse(input); -} diff --git a/packages/core/src/common/utils/n-fircate.ts b/packages/core/src/common/utils/n-fircate.ts deleted file mode 100644 index 0f195adc10..0000000000 --- a/packages/core/src/common/utils/n-fircate.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -/** - * Split an iterable into several arrays with matching fields - * @param from The iterable of items to split up - * @param field The field of each item to split over - * @param parts What each array will be filtered to - * @returns A `parts.length` tuple of `T[]` where each array has matching `field` values - */ -export function nFircate(from: Iterable, field: keyof T, parts: []): []; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field]]): [T[]]; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field]]): [T[], T[]]; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field], T[typeof field]]): [T[], T[], T[]]; - -export function nFircate(from: Iterable, field: keyof T, parts: T[typeof field][]): T[][] { - if (new Set(parts).size !== parts.length) { - throw new TypeError("Duplicate parts entries"); - } - - const res = Array.from(parts, () => [] as T[]); - - for (const item of from) { - const index = parts.indexOf(item[field]); - - if (index < 0) { - continue; - } - - res[index].push(item); - } - - return res; -} diff --git a/packages/core/src/common/utils/objects.ts b/packages/core/src/common/utils/objects.ts deleted file mode 100644 index 9b6355d3e7..0000000000 --- a/packages/core/src/common/utils/objects.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -/** - * A better typed version of `Object.fromEntries` where the keys are known to - * be a specific subset - */ -export function fromEntries(entries: Iterable): Record { - return Object.fromEntries(entries) as Record; -} - -export function keys(obj: Partial>): K[]; - -export function keys(obj: Record): K[] { - return Object.keys(obj) as K[]; -} - -export function entries(obj: Partial> | null | undefined): [K, V][]; -export function entries(obj: Partial> | null | undefined): [K, V][]; -export function entries(obj: Record | null | undefined): [K, V][]; - -export function entries(obj: Record | null | undefined): [K, V][] { - if (obj && typeof obj == "object") { - return Object.entries(obj) as never; - } - - return [] as never; -} diff --git a/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts b/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts index 62c1539757..d7e005020e 100644 --- a/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts +++ b/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import openLinkInBrowserInjectable from "./open-link-in-browser.injectable"; export default getGlobalOverride(openLinkInBrowserInjectable, () => async () => {}); diff --git a/packages/core/src/common/utils/promise-exec.ts b/packages/core/src/common/utils/promise-exec.ts deleted file mode 100644 index e2471d2611..0000000000 --- a/packages/core/src/common/utils/promise-exec.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import * as util from "util"; -import { execFile } from "child_process"; - -export const promiseExecFile = util.promisify(execFile); diff --git a/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts b/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts index 9fce1baebd..d4cc7519cd 100644 --- a/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts +++ b/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import randomBytesInjectable from "./random-bytes.injectable"; export default getGlobalOverride(randomBytesInjectable, () => (size) => { diff --git a/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx b/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx index ab9b185438..5776388516 100644 --- a/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx +++ b/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx @@ -8,8 +8,8 @@ import type { IComputedValue } from "mobx"; import { computed, observe } from "mobx"; import React from "react"; import { observer } from "mobx-react"; -import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import { reactiveNow } from "./reactive-now"; +import { advanceFakeTime, testUsingFakeTime } from "../../../test-utils/use-fake-time"; describe("reactiveNow", () => { let someComputed: IComputedValue; diff --git a/packages/core/src/common/utils/toJS.ts b/packages/core/src/common/utils/toJS.ts index 7a949b46fc..2d70f564cb 100644 --- a/packages/core/src/common/utils/toJS.ts +++ b/packages/core/src/common/utils/toJS.ts @@ -13,6 +13,9 @@ import * as mobx from "mobx"; import { isObservable, observable } from "mobx"; +/** + * @deprecated Switch to doing toJS on each field instead + */ export function toJS(data: T): T { // make data observable for recursive toJS()-output if (typeof data === "object" && !isObservable(data)) { diff --git a/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts b/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts index 0aaca9f97d..37bf7220c7 100644 --- a/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts +++ b/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts @@ -4,7 +4,6 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import logErrorInjectable from "../../log-error.injectable"; -import { isPromise } from "../is-promise/is-promise"; export type WithErrorLoggingFor = ( getErrorMessage: (error: unknown) => string @@ -33,7 +32,7 @@ const withErrorLoggingInjectable = getInjectable({ throw e; } - if (isPromise(returnValue)) { + if ((returnValue as any) instanceof Promise) { return returnValue.catch((e: unknown) => { const errorMessage = getErrorMessage(e); diff --git a/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts b/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts index 1e7747a952..9cc5899ce6 100644 --- a/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts +++ b/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts @@ -8,7 +8,7 @@ import withErrorLoggingInjectable from "./with-error-logging.injectable"; import { pipeline } from "@ogre-tools/fp"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { getPromiseStatus } from "../../test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import logErrorInjectable from "../../log-error.injectable"; describe("with-error-logging", () => { diff --git a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts index 12d6a60441..63232ad06d 100644 --- a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts +++ b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts @@ -5,7 +5,7 @@ import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { getPromiseStatus } from "../../test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import { withErrorSuppression } from "./with-error-suppression"; describe("with-error-suppression", () => { diff --git a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts index 657ed13c16..22d51b6014 100644 --- a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts +++ b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts @@ -12,7 +12,7 @@ export function withErrorSuppression(toBeDecorated: any) { try { const returnValue = toBeDecorated(...args); - if (isPromise(returnValue)) { + if ((returnValue as any) instanceof Promise) { return returnValue.catch(noop); } @@ -22,7 +22,3 @@ export function withErrorSuppression(toBeDecorated: any) { } }; } - -function isPromise(reference: any): reference is Promise { - return !!reference?.then; -} diff --git a/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts b/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts index 6d473eb1de..b1a74f47b6 100644 --- a/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import extensionApiVersionInjectable from "./extension-api-version.injectable"; export default getGlobalOverride(extensionApiVersionInjectable, () => "6.0.0"); diff --git a/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts b/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts index 7aa500ff2e..fab25913ed 100644 --- a/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import isDebuggingInjectable from "./is-debugging.injectable"; export default getGlobalOverride(isDebuggingInjectable, () => false); diff --git a/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts b/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts index cb3ff0a6e9..a18d89f221 100644 --- a/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import isSnapPackageInjectable from "./is-snap-package.injectable"; export default getGlobalOverride(isSnapPackageInjectable, () => false); diff --git a/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts b/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts index 1a72b0ccf7..f40bbe6cd4 100644 --- a/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import lensResourcesDirInjectable from "./lens-resources-dir.injectable"; export default getGlobalOverride(lensResourcesDirInjectable, () => "/irrelavent-dir-for-lens-resources"); diff --git a/packages/core/src/common/vars/platform.global-override-for-injectable.ts b/packages/core/src/common/vars/platform.global-override-for-injectable.ts index 4bb06dec5e..2825ebe8cf 100644 --- a/packages/core/src/common/vars/platform.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/platform.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import platformInjectable from "./platform.injectable"; export default getGlobalOverride(platformInjectable, () => "darwin"); diff --git a/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts b/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts index 42d74d4ec8..bdc4c5e823 100644 --- a/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import processArchInjectable from "./process-arch.injectable"; export default getGlobalOverride(processArchInjectable, () => "x64"); diff --git a/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts b/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts index 3b8ec43046..2ed47dd1a4 100644 --- a/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts +++ b/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import staticFilesDirectoryInjectable from "./static-files-directory.injectable"; export default getGlobalOverride(staticFilesDirectoryInjectable, () => "/some-static-directory"); diff --git a/packages/core/src/extensions/__tests__/extension-loader.test.ts b/packages/core/src/extensions/__tests__/extension-loader.test.ts index 92de69590e..4ded8cdbb9 100644 --- a/packages/core/src/extensions/__tests__/extension-loader.test.ts +++ b/packages/core/src/extensions/__tests__/extension-loader.test.ts @@ -7,7 +7,7 @@ import type { ExtensionLoader } from "../extension-loader"; import extensionLoaderInjectable from "../extension-loader/extension-loader.injectable"; import { runInAction } from "mobx"; import updateExtensionsStateInjectable from "../extension-loader/update-extensions-state/update-extensions-state.injectable"; -import { delay } from "../../renderer/utils"; +import { delay } from "@k8slens/utilities"; import { getDiForUnitTesting } from "../../renderer/getDiForUnitTesting"; import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable"; import type { IpcRenderer } from "electron"; diff --git a/packages/core/src/extensions/common-api/utils.ts b/packages/core/src/extensions/common-api/utils.ts index a129cfda60..40f8e00175 100644 --- a/packages/core/src/extensions/common-api/utils.ts +++ b/packages/core/src/extensions/common-api/utils.ts @@ -8,11 +8,49 @@ import buildVersionInjectable from "../../main/vars/build-version/build-version. 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"; -export { Singleton } from "../../common/utils"; -export { prevDefault, stopPropagation } from "../../renderer/utils/prevDefault"; +export { Singleton } from "../../common/utils/singleton"; -export type { IClassName, IgnoredClassNames } from "../../renderer/utils"; -export { cssNames } from "../../renderer/utils/cssNames"; +export { + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + prevDefault, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + stopPropagation, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + cssNames, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + disposer, +} from "@k8slens/utilities"; + +export type { + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + IClassName, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + IgnoredClassNames, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + Disposer, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + Disposable, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + ExtendableDisposer, +} from "@k8slens/utilities"; export type { OpenLinkInBrowser } from "../../common/utils/open-link-in-browser.injectable"; @@ -24,6 +62,3 @@ export const getAppVersion = () => { return di.inject(buildVersionInjectable).get(); }; - -export { disposer } from "../../common/utils"; -export type { Disposer, Disposable, ExtendableDisposer } from "../../common/utils"; diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts index 6a8f50eda3..e27d00a34e 100644 --- a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts +++ b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts @@ -9,7 +9,7 @@ import extensionDiscoveryInjectable from "../extension-discovery/extension-disco import type { ExtensionDiscovery } from "../extension-discovery/extension-discovery"; import installExtensionInjectable from "../install-extension/install-extension.injectable"; import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { delay } from "../../renderer/utils"; +import { delay } from "@k8slens/utilities"; import { observable, runInAction, when } from "mobx"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; import pathExistsInjectable from "../../common/fs/path-exists.injectable"; diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.ts index bd9baff2c8..a91bf9e406 100644 --- a/packages/core/src/extensions/extension-discovery/extension-discovery.ts +++ b/packages/core/src/extensions/extension-discovery/extension-discovery.ts @@ -7,7 +7,8 @@ import { ipcRenderer } from "electron"; import { EventEmitter } from "events"; import { makeObservable, observable, reaction, when } from "mobx"; import { broadcastMessage, ipcMainHandle, ipcRendererOn } from "../../common/ipc"; -import { isErrnoException, toJS } from "../../common/utils"; +import { toJS } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import type { ExtensionsStore } from "../extensions-store/extensions-store"; import type { ExtensionLoader } from "../extension-loader"; import type { LensExtensionId, LensExtensionManifest } from "../lens-extension"; diff --git a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts index 093c80934b..8553ce9c40 100644 --- a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts +++ b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts @@ -4,8 +4,8 @@ */ import { action, computed, observable } from "mobx"; -import { disposer } from "../../renderer/utils"; -import type { ExtendableDisposer } from "../../renderer/utils"; +import { disposer } from "@k8slens/utilities"; +import type { ExtendableDisposer } from "@k8slens/utilities"; import * as uuid from "uuid"; import { broadcastMessage } from "../../common/ipc"; import { ipcRenderer } from "electron"; diff --git a/packages/core/src/extensions/extension-loader/extension-loader.ts b/packages/core/src/extensions/extension-loader/extension-loader.ts index 5dce874e54..b82fe5c159 100644 --- a/packages/core/src/extensions/extension-loader/extension-loader.ts +++ b/packages/core/src/extensions/extension-loader/extension-loader.ts @@ -6,9 +6,9 @@ import { ipcMain, ipcRenderer } from "electron"; import { isEqual } from "lodash"; import type { ObservableMap } from "mobx"; -import { action, computed, makeObservable, observable, observe, reaction, when } from "mobx"; +import { action, computed, makeObservable, toJS, observable, observe, reaction, when } from "mobx"; import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc"; -import { isDefined, toJS } from "../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import type { InstalledExtension } from "../extension-discovery/extension-discovery"; import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension"; import type { LensExtensionState } from "../extensions-store/extensions-store"; diff --git a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts index 6b9424cea4..07f054d3fd 100644 --- a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts +++ b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts @@ -6,7 +6,7 @@ import type { Injectable } from "@ogre-tools/injectable"; import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { difference, find, map } from "lodash"; import { reaction, runInAction } from "mobx"; -import { disposer } from "../../../common/utils/disposer"; +import { disposer } from "@k8slens/utilities"; import type { LensExtension } from "../../lens-extension"; import { extensionRegistratorInjectionToken } from "../extension-registrator-injection-token"; @@ -43,7 +43,7 @@ const extensionInjectable = getInjectable({ reactionDisposer.push( // injectables is either an array or a computed array, in which case - // we need to update the registered injectables with a reaction every time they change + // we need to update the registered injectables with a reaction every time they change reaction( () => Array.isArray(injectables) ? injectables : injectables.get(), (currentInjectables, previousInjectables = []) => { diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts index 50051bf094..90bad89625 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; -import { getOrInsert } from "../../../common/utils"; +import { getOrInsert } from "@k8slens/utilities"; import randomBytesInjectable from "../../../common/utils/random-bytes.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable"; diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts index 37bff649ad..86d978d47c 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts @@ -8,7 +8,6 @@ import { action, makeObservable } from "mobx"; import type { BaseStoreDependencies } from "../../../common/base-store/base-store"; import { BaseStore } from "../../../common/base-store/base-store"; import type { LensExtensionId } from "../../lens-extension"; -import { toJS } from "../../../common/utils"; import type { EnsureHashedDirectoryForExtension } from "./ensure-hashed-directory-for-extension.injectable"; interface FSProvisionModel { @@ -46,8 +45,8 @@ export class FileSystemProvisionerStore extends BaseStore { } toJSON(): FSProvisionModel { - return toJS({ - extensions: Object.fromEntries(this.dependencies.registeredExtensions), - }); + return { + extensions: Object.fromEntries(this.dependencies.registeredExtensions.toJSON()), + }; } } diff --git a/packages/core/src/extensions/extension-store.ts b/packages/core/src/extensions/extension-store.ts index e72f394005..cf435fb474 100644 --- a/packages/core/src/extensions/extension-store.ts +++ b/packages/core/src/extensions/extension-store.ts @@ -8,8 +8,8 @@ import { BaseStore } from "../common/base-store/base-store"; import * as path from "path"; import type { LensExtension } from "./lens-extension"; import assert from "assert"; -import type { StaticThis } from "../common/utils"; -import { getOrInsertWith } from "../common/utils"; +import type { StaticThis } from "../common/utils/singleton"; +import { getOrInsertWith } from "@k8slens/utilities"; import { getLegacyGlobalDiForExtensionApi } from "./as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import directoryForUserDataInjectable from "../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import getConfigurationFileModelInjectable from "../common/get-configuration-file-model/get-configuration-file-model.injectable"; diff --git a/packages/core/src/extensions/extensions-store/extensions-store.ts b/packages/core/src/extensions/extensions-store/extensions-store.ts index 3b2dc80eb1..1a8e5376b6 100644 --- a/packages/core/src/extensions/extensions-store/extensions-store.ts +++ b/packages/core/src/extensions/extensions-store/extensions-store.ts @@ -5,7 +5,6 @@ import type { LensExtensionId } from "../lens-extension"; import { action, computed, makeObservable, observable } from "mobx"; -import { toJS } from "../../common/utils"; import type { BaseStoreDependencies } from "../../common/base-store/base-store"; import { BaseStore } from "../../common/base-store/base-store"; @@ -57,8 +56,8 @@ export class ExtensionsStore extends BaseStore { } toJSON(): LensExtensionsStoreModel { - return toJS({ - extensions: Object.fromEntries(this.state), - }); + return { + extensions: Object.fromEntries(this.state.toJSON()), + }; } } diff --git a/packages/core/src/extensions/install-extension/install-extension.injectable.ts b/packages/core/src/extensions/install-extension/install-extension.injectable.ts index ca46772eb3..6737b7362b 100644 --- a/packages/core/src/extensions/install-extension/install-extension.injectable.ts +++ b/packages/core/src/extensions/install-extension/install-extension.injectable.ts @@ -13,7 +13,7 @@ import joinPathsInjectable from "../../common/path/join-paths.injectable"; import type { PackageJson } from "../common-api"; import writeJsonFileInjectable from "../../common/fs/write-json-file.injectable"; import { once } from "lodash"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; const baseNpmInstallArgs = [ "install", diff --git a/packages/core/src/extensions/ipc/ipc-main.ts b/packages/core/src/extensions/ipc/ipc-main.ts index 8bb0ada63d..a4f4ec14df 100644 --- a/packages/core/src/extensions/ipc/ipc-main.ts +++ b/packages/core/src/extensions/ipc/ipc-main.ts @@ -6,7 +6,7 @@ import { ipcMain } from "electron"; import { IpcPrefix, IpcRegistrar } from "./ipc-registrar"; import { Disposers, lensExtensionDependencies } from "../lens-extension"; import type { LensMainExtension } from "../lens-main-extension"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { ipcMainHandle } from "../../common/ipc"; diff --git a/packages/core/src/extensions/ipc/ipc-registrar.ts b/packages/core/src/extensions/ipc/ipc-registrar.ts index 04222bd64b..7fc27ba0fd 100644 --- a/packages/core/src/extensions/ipc/ipc-registrar.ts +++ b/packages/core/src/extensions/ipc/ipc-registrar.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { Singleton } from "../../common/utils"; +import { Singleton } from "../../common/utils/singleton"; import type { LensExtension } from "../lens-extension"; import { createHash } from "crypto"; import { broadcastMessage } from "../../common/ipc"; diff --git a/packages/core/src/extensions/ipc/ipc-renderer.ts b/packages/core/src/extensions/ipc/ipc-renderer.ts index ff61738113..9060a19154 100644 --- a/packages/core/src/extensions/ipc/ipc-renderer.ts +++ b/packages/core/src/extensions/ipc/ipc-renderer.ts @@ -6,7 +6,7 @@ import { ipcRenderer } from "electron"; import { IpcPrefix, IpcRegistrar } from "./ipc-registrar"; import { Disposers } from "../lens-extension"; import type { LensRendererExtension } from "../lens-renderer-extension"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; export abstract class IpcRenderer extends IpcRegistrar { diff --git a/packages/core/src/extensions/lens-extension.ts b/packages/core/src/extensions/lens-extension.ts index 53c9343607..30cf19e4a4 100644 --- a/packages/core/src/extensions/lens-extension.ts +++ b/packages/core/src/extensions/lens-extension.ts @@ -6,7 +6,7 @@ import type { InstalledExtension } from "./extension-discovery/extension-discovery"; import { action, computed, makeObservable, observable } from "mobx"; import type { PackageJson } from "type-fest"; -import { disposer } from "../common/utils"; +import { disposer } from "@k8slens/utilities"; import type { LensExtensionDependencies } from "./lens-extension-set-dependencies"; import type { ProtocolHandlerRegistration } from "../common/protocol-handler/registration"; diff --git a/packages/core/src/extensions/lens-renderer-extension.ts b/packages/core/src/extensions/lens-renderer-extension.ts index aa00fd8ba3..5a64a6ec6c 100644 --- a/packages/core/src/extensions/lens-renderer-extension.ts +++ b/packages/core/src/extensions/lens-renderer-extension.ts @@ -5,7 +5,7 @@ import { Disposers, LensExtension, lensExtensionDependencies } from "./lens-extension"; import type { CatalogEntity, CategoryFilter } from "../common/catalog"; -import type { Disposer } from "../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import type { EntityFilter } from "../renderer/api/catalog/entity/registry"; import type { TopBarRegistration } from "../renderer/components/layout/top-bar/top-bar-registration"; import type { KubernetesCluster } from "../common/catalog-entities"; diff --git a/packages/core/src/extensions/main-api/power.ts b/packages/core/src/extensions/main-api/power.ts index 671308798a..bf9f61b480 100644 --- a/packages/core/src/extensions/main-api/power.ts +++ b/packages/core/src/extensions/main-api/power.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { powerMonitor } from "electron"; -import type { Disposer } from "../../common/utils/disposer"; +import type { Disposer } from "@k8slens/utilities"; /** * Event listener for system power events diff --git a/packages/core/src/extensions/renderer-api/catalog.ts b/packages/core/src/extensions/renderer-api/catalog.ts index 43b840a39a..9de698c725 100644 --- a/packages/core/src/extensions/renderer-api/catalog.ts +++ b/packages/core/src/extensions/renderer-api/catalog.ts @@ -6,7 +6,7 @@ import type { CatalogCategory, CatalogEntity } from "../../common/catalog"; import type { CatalogEntityOnBeforeRun } from "../../renderer/api/catalog/entity/registry"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import catalogCategoryRegistryInjectable from "../../common/catalog/category-registry.injectable"; import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable"; diff --git a/packages/core/src/extensions/renderer-api/navigation.ts b/packages/core/src/extensions/renderer-api/navigation.ts index 4b7dcd5d39..667fa7135e 100644 --- a/packages/core/src/extensions/renderer-api/navigation.ts +++ b/packages/core/src/extensions/renderer-api/navigation.ts @@ -14,7 +14,7 @@ import navigateInjectable from "../../renderer/navigation/navigate.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; export type { PageParamInit, PageParam } from "../../renderer/navigation/page-param"; -export type { URLParams } from "../../common/utils/buildUrl"; +export type { URLParams } from "@k8slens/utilities"; export const getDetailsUrl = asLegacyGlobalFunctionForExtensionApi(getDetailsUrlInjectable); export const showDetails = asLegacyGlobalFunctionForExtensionApi(showDetailsInjectable); diff --git a/packages/core/src/features/application-menu/application-menu.test.ts b/packages/core/src/features/application-menu/application-menu.test.ts index 0db35db744..bd9d016548 100644 --- a/packages/core/src/features/application-menu/application-menu.test.ts +++ b/packages/core/src/features/application-menu/application-menu.test.ts @@ -5,7 +5,7 @@ import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import populateApplicationMenuInjectable from "./main/populate-application-menu.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import { getCompositePaths } from "../../common/utils/composite/get-composite-paths/get-composite-paths"; import platformInjectable, { allPlatforms } from "../../common/vars/platform.injectable"; diff --git a/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts b/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts index 7f35861a45..465fa48f54 100644 --- a/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts +++ b/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts @@ -5,7 +5,7 @@ import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import populateApplicationMenuInjectable from "./main/populate-application-menu.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import { getCompositePaths } from "../../common/utils/composite/get-composite-paths/get-composite-paths"; import { getInjectable } from "@ogre-tools/injectable"; import applicationMenuItemInjectionToken from "./main/menu-items/application-menu-item-injection-token"; diff --git a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts index e12922c340..59ae1e1491 100644 --- a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts +++ b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts @@ -5,7 +5,7 @@ import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; import { bundledExtensionInjectionToken } from "../../../../../../common/library"; -import { object } from "../../../../../../common/utils"; +import { object } from "@k8slens/utilities"; import buildSemanticVersionInjectable from "../../../../../../common/vars/build-semantic-version.injectable"; const specificVersionsInjectable = getInjectable({ diff --git a/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts b/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts index acd4f5f14e..23f877e2bb 100644 --- a/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts +++ b/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import populateApplicationMenuInjectable from "./populate-application-menu.injectable"; -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; export default getGlobalOverride(populateApplicationMenuInjectable, () => () => {}); diff --git a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts index 59d13760b6..b9a48cb0bd 100644 --- a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts +++ b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts @@ -9,18 +9,13 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const startApplicationMenuInjectable = getInjectable({ id: "start-application-menu", - instantiate: (di) => { - const applicationMenu = di.inject( - applicationMenuReactivityInjectable, - ); + instantiate: (di) => ({ + run: () => { + const applicationMenu = di.inject(applicationMenuReactivityInjectable); - return { - id: "start-application-menu", - run: () => { - applicationMenu.start(); - }, - }; - }, + applicationMenu.start(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts b/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts index 62abd439df..816683b2de 100644 --- a/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts +++ b/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts @@ -4,19 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import applicationMenuReactivityInjectable from "./application-menu-reactivity.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../../main/start-main-application/runnable-tokens/phases"; const stopApplicationMenuInjectable = getInjectable({ id: "stop-application-menu", - instantiate: (di) => { - const applicationMenu = di.inject(applicationMenuReactivityInjectable); + instantiate: (di) => ({ + run: () => { + const applicationMenu = di.inject(applicationMenuReactivityInjectable); - return { - id: "stop-application-menu", - run: () => void applicationMenu.stop(), - }; - }, + applicationMenu.stop(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/features/application-update/analytics-for-installing-update.test.ts b/packages/core/src/features/application-update/analytics-for-installing-update.test.ts index ce77d37229..e93c414027 100644 --- a/packages/core/src/features/application-update/analytics-for-installing-update.test.ts +++ b/packages/core/src/features/application-update/analytics-for-installing-update.test.ts @@ -17,7 +17,7 @@ import type { DownloadPlatformUpdate } from "./main/download-update/download-pla import downloadPlatformUpdateInjectable from "./main/download-update/download-platform-update/download-platform-update.injectable"; import quitAndInstallUpdateInjectable from "./main/quit-and-install-update.injectable"; import periodicalCheckForUpdatesInjectable from "./child-features/periodical-checking-of-updates/main/periodical-check-for-updates.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import emitEventInjectable from "../../common/app-event-bus/emit-event.injectable"; import getBuildVersionInjectable from "../../main/vars/build-version/get-build-version.injectable"; diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx index adede427d2..d2b83844a4 100644 --- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx +++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx @@ -16,7 +16,7 @@ import type { ApplicationBuilder } from "../../../../renderer/components/test-ut import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder"; import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable"; import quitAndInstallUpdateInjectable from "../../main/quit-and-install-update.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time"; +import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time"; function daysToMilliseconds(days: number) { return Math.round(days * 24 * 60 * 60 * 1000); diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx index acdd9929f2..a99501128c 100644 --- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx +++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx @@ -8,7 +8,7 @@ import styles from "./styles.module.scss"; import type { HTMLAttributes } from "react"; import React, { useState } from "react"; import { Menu, MenuItem } from "../../../../../../../renderer/components/menu"; -import { cssNames } from "../../../../../../../renderer/utils"; +import { cssNames } from "@k8slens/utilities"; import type { IconProps } from "../../../../../../../renderer/components/icon"; import { Icon } from "../../../../../../../renderer/components/icon"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts b/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts index 39ac24570a..1f35592dc7 100644 --- a/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts +++ b/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts @@ -14,11 +14,11 @@ import type { DiContainer } from "@ogre-tools/injectable"; import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable"; import type { RenderResult } from "@testing-library/react"; import { fireEvent } from "@testing-library/react"; -import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time"; import quitAndInstallUpdateInjectable from "../../main/quit-and-install-update.injectable"; import timeAfterUpdateMustBeInstalledInjectable from "./renderer/force-update-modal/time-after-update-must-be-installed.injectable"; import secondsAfterInstallStartsInjectable from "./renderer/force-update-modal/seconds-after-install-starts.injectable"; import forceUpdateModalRootFrameComponentInjectable from "./renderer/force-update-modal/force-update-modal-root-frame-component.injectable"; +import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time"; const TIME_AFTER_UPDATE_MUST_BE_INSTALLED = 1000; const TIME_AFTER_INSTALL_STARTS = 5 * 1000; diff --git a/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts b/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts index 49c4be5075..6de3bb5600 100644 --- a/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { computed } from "mobx"; -import { getGlobalOverride } from "../../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import forceUpdateModalRootFrameComponentInjectable from "./force-update-modal-root-frame-component.injectable"; export default getGlobalOverride( diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts index db86b30e37..53c808ba5f 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable"; -import { getGlobalOverride } from "../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; export default getGlobalOverride(periodicalCheckForUpdatesInjectable, () => ({ start: () => {}, diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts index 9ec17029ed..5e8ab6622c 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts @@ -10,19 +10,16 @@ import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const startCheckingForUpdatesInjectable = getInjectable({ id: "start-checking-for-updates", - instantiate: (di) => { - const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable); - const updatingIsEnabled = di.inject(updatingIsEnabledInjectable); + instantiate: (di) => ({ + run: () => { + const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable); + const updatingIsEnabled = di.inject(updatingIsEnabledInjectable); - return { - id: "start-checking-for-updates", - run: () => { - if (updatingIsEnabled && !periodicalCheckForUpdates.started) { - periodicalCheckForUpdates.start(); - } - }, - }; - }, + if (updatingIsEnabled && !periodicalCheckForUpdates.started) { + periodicalCheckForUpdates.start(); + } + }, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts index 6e58d7dd77..df1557466e 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts @@ -4,25 +4,22 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/phases"; const stopCheckingForUpdatesInjectable = getInjectable({ id: "stop-checking-for-updates", - instantiate: (di) => { - const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable); + instantiate: (di) => ({ + run: () => { + const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable); - return { - id: "stop-checking-for-updates", - run: () => { - if (periodicalCheckForUpdates.started) { - periodicalCheckForUpdates.stop(); - } + if (periodicalCheckForUpdates.started) { + periodicalCheckForUpdates.stop(); + } - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts index 22765b85de..63dfb4cc14 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts @@ -9,7 +9,7 @@ import electronUpdaterIsActiveInjectable from "../../../../main/electron-app/fea import publishIsConfiguredInjectable from "../../main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable"; import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable"; import periodicalCheckForUpdatesInjectable from "./main/periodical-check-for-updates.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time"; +import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time"; const ENOUGH_TIME = 1000 * 60 * 60 * 2; diff --git a/packages/core/src/features/application-update/installing-update.test.ts b/packages/core/src/features/application-update/installing-update.test.ts index 81529a851f..719bb879bf 100644 --- a/packages/core/src/features/application-update/installing-update.test.ts +++ b/packages/core/src/features/application-update/installing-update.test.ts @@ -16,7 +16,7 @@ import type { DownloadPlatformUpdate } from "./main/download-update/download-pla import downloadPlatformUpdateInjectable from "./main/download-update/download-platform-update/download-platform-update.injectable"; import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-update-on-quit.injectable"; import processCheckingForUpdatesInjectable from "./main/process-checking-for-updates.injectable"; -import { testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { testUsingFakeTime } from "../../test-utils/use-fake-time"; import staticFilesDirectoryInjectable from "../../common/vars/static-files-directory.injectable"; describe("installing update", () => { diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts index 5e271eaa30..d8d336ef56 100644 --- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(checkForPlatformUpdatesInjectable); diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts index 408da4eb7d..5a4262baf1 100644 --- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts +++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts @@ -10,9 +10,9 @@ import type { AppUpdater, UpdateCheckResult } from "electron-updater"; import type { CheckForPlatformUpdates } from "./check-for-platform-updates.injectable"; import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable"; import type { UpdateChannel, ReleaseChannel } from "../../../common/update-channels"; -import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import loggerInjectable from "../../../../../common/logger.injectable"; -import { noop } from "../../../../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("check-for-platform-updates", () => { let checkForPlatformUpdates: CheckForPlatformUpdates; diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts index 15df5d835b..5a339e3ea3 100644 --- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import downloadPlatformUpdateInjectable from "./download-platform-update.injectable"; export default getGlobalOverrideForFunction(downloadPlatformUpdateInjectable); diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts index e2716ed962..d39931e6ac 100644 --- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts +++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts @@ -9,10 +9,10 @@ import downloadPlatformUpdateInjectable from "./download-platform-update.injecta import type { AppUpdater } from "electron-updater"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import type { DiContainer } from "@ogre-tools/injectable"; import loggerInjectable from "../../../../../common/logger.injectable"; -import { noop } from "../../../../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("download-platform-update", () => { let downloadPlatformUpdate: DownloadPlatformUpdate; diff --git a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts index 1a7abcd7ce..cef23c9860 100644 --- a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts +++ b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts @@ -11,25 +11,22 @@ import buildVersionInjectable from "../../../main/vars/build-version/build-versi const emitCurrentVersionToAnalyticsInjectable = getInjectable({ id: "emit-current-version-to-analytics", - instantiate: (di) => { - const emitAppEvent = di.inject(emitAppEventInjectable); - const buildVersion = di.inject(buildVersionInjectable); + instantiate: (di) => ({ + run: () => { + const emitAppEvent = di.inject(emitAppEventInjectable); + const buildVersion = di.inject(buildVersionInjectable); - return { - id: "emit-current-version-to-analytics", - run: () => { - emitAppEvent({ - name: "app", - action: "current-version", + emitAppEvent({ + name: "app", + action: "current-version", - params: { - version: buildVersion.get(), - currentDateTime: getCurrentDateTime(), - }, - }); - }, - }; - }, + params: { + version: buildVersion.get(), + currentDateTime: getCurrentDateTime(), + }, + }); + }, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts index f8c36953c6..109958838d 100644 --- a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import publishIsConfiguredInjectable from "./publish-is-configured.injectable"; export default getGlobalOverride(publishIsConfiguredInjectable, () => false); diff --git a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts index 73742babaa..2739119a13 100644 --- a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts +++ b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts @@ -9,16 +9,13 @@ import watchIfUpdateShouldHappenOnQuitInjectable from "./watch-if-update-should- const startWatchingIfUpdateShouldHappenOnQuitInjectable = getInjectable({ id: "start-watching-if-update-should-happen-on-quit", - instantiate: (di) => { - const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable); + instantiate: (di) => ({ + run: () => { + const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable); - return { - id: "start-watching-if-update-should-happen-on-quit", - run: () => { - watchIfUpdateShouldHappenOnQuit.start(); - }, - }; - }, + watchIfUpdateShouldHappenOnQuit.start(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts index faf67b4ffc..36a6d3174d 100644 --- a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts +++ b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts @@ -4,19 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import watchIfUpdateShouldHappenOnQuitInjectable from "./watch-if-update-should-happen-on-quit.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../../../main/start-main-application/runnable-tokens/phases"; const stopWatchingIfUpdateShouldHappenOnQuitInjectable = getInjectable({ id: "stop-watching-if-update-should-happen-on-quit", - instantiate: (di) => { - const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable); + instantiate: (di) => ({ + run: () => { + const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable); - return { - id: "stop-watching-if-update-should-happen-on-quit", - run: () => void watchIfUpdateShouldHappenOnQuit.stop(), - }; - }, + watchIfUpdateShouldHappenOnQuit.stop(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/features/catalog/entity-running.test.tsx b/packages/core/src/features/catalog/entity-running.test.tsx index e3a4438da5..cfe3b8bf92 100644 --- a/packages/core/src/features/catalog/entity-running.test.tsx +++ b/packages/core/src/features/catalog/entity-running.test.tsx @@ -12,8 +12,8 @@ import type { CatalogEntityActionContext } from "../../common/catalog"; import { CatalogCategory, categoryVersion, CatalogEntity } from "../../common/catalog"; import catalogCategoryRegistryInjectable from "../../common/catalog/category-registry.injectable"; import navigateToCatalogInjectable from "../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; -import { flushPromises } from "../../common/test-utils/flush-promises"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { flushPromises } from "@k8slens/test-utils"; +import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import type { CatalogEntityOnBeforeRun, CatalogEntityRegistry } from "../../renderer/api/catalog/entity/registry"; import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable"; import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; diff --git a/packages/core/src/features/catalog/opening-entity-details.test.tsx b/packages/core/src/features/catalog/opening-entity-details.test.tsx index 0bfde28a7c..a47f139e80 100644 --- a/packages/core/src/features/catalog/opening-entity-details.test.tsx +++ b/packages/core/src/features/catalog/opening-entity-details.test.tsx @@ -9,7 +9,7 @@ import { KubernetesCluster, WebLink } from "../../common/catalog-entities"; import getClusterByIdInjectable from "../../common/cluster-store/get-by-id.injectable"; import { Cluster } from "../../common/cluster/cluster"; import navigateToCatalogInjectable from "../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time"; import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable"; import showEntityDetailsInjectable from "../../renderer/components/+catalog/entity-details/show.injectable"; import { type ApplicationBuilder, getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; diff --git a/packages/core/src/features/certificate-authorities/main/channel-handler.global-override-for-injectable.ts b/packages/core/src/features/certificate-authorities/main/channel-handler.global-override-for-injectable.ts index d8346706bb..62882fb49f 100644 --- a/packages/core/src/features/certificate-authorities/main/channel-handler.global-override-for-injectable.ts +++ b/packages/core/src/features/certificate-authorities/main/channel-handler.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import { casChannel } from "../common/channel"; import certificateAuthoritiesChannelListenerInjectable from "./channel-handler.injectable"; diff --git a/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts b/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts index 300b69c383..206a68ba94 100644 --- a/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts +++ b/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts @@ -5,7 +5,7 @@ import { getRequestChannelListenerInjectable } from "../../../main/utils/channel/channel-listeners/listener-tokens"; import { casChannel } from "../common/channel"; import { globalAgent } from "https"; -import { isString } from "../../../common/utils"; +import { isString } from "@k8slens/utilities"; const certificateAuthoritiesChannelListenerInjectable = getRequestChannelListenerInjectable({ channel: casChannel, diff --git a/packages/core/src/features/certificate-authorities/main/request-system-cas.injectable.darwin.ts b/packages/core/src/features/certificate-authorities/main/request-system-cas.injectable.darwin.ts index 62cf75f6ff..66c24a1235 100644 --- a/packages/core/src/features/certificate-authorities/main/request-system-cas.injectable.darwin.ts +++ b/packages/core/src/features/certificate-authorities/main/request-system-cas.injectable.darwin.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import execFileInjectable from "../../../common/fs/exec-file.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import { requestSystemCAsInjectionToken } from "../common/request-system-cas-token"; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet#other_assertions @@ -17,7 +17,7 @@ const requestSystemCAsInjectable = getInjectable({ const execFile = di.inject(execFileInjectable); const logger = di.inject(loggerInjectable); - const execSecurity = async (...args: string[]): Promise> => { + const execSecurity = async (...args: string[]): AsyncResult => { const result = await execFile("/usr/bin/security", args); if (!result.callWasSuccessful) { diff --git a/packages/core/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx b/packages/core/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx index 000cc69432..46b84c44e3 100644 --- a/packages/core/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx +++ b/packages/core/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx @@ -14,7 +14,7 @@ import { Cluster } from "../../../common/cluster/cluster"; import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; -import { advanceFakeTime } from "../../../common/test-utils/use-fake-time"; +import { advanceFakeTime } from "../../../test-utils/use-fake-time"; const currentClusterServerUrl = "https://localhost"; const nonCurrentClusterServerUrl = "http://localhost"; diff --git a/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts b/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts index 5421bc952a..94caf169ba 100644 --- a/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts +++ b/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts @@ -8,8 +8,8 @@ import clusterStoreInjectable from "../../../../common/cluster-store/cluster-sto import directoryForLensLocalStorageInjectable from "../../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable"; import removePathInjectable from "../../../../common/fs/remove.injectable"; import joinPathsInjectable from "../../../../common/path/join-paths.injectable"; -import { noop } from "../../../../common/utils"; import clusterConnectionInjectable from "../../../../main/cluster/cluster-connection.injectable"; +import { noop } from "@k8slens/utilities"; import { getRequestChannelListenerInjectable } from "../../../../main/utils/channel/channel-listeners/listener-tokens"; import { deleteClusterChannel } from "../common/delete-channel"; diff --git a/packages/core/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx b/packages/core/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx index 49fe7f9efd..fde6a1b816 100644 --- a/packages/core/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx +++ b/packages/core/src/features/cluster/kube-object-status-icon/show-status-for-a-kube-object.test.tsx @@ -5,7 +5,6 @@ import { KubeObjectStatusLevel } from "../../../common/k8s-api/kube-object-status"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import React from "react"; -import { testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import type { DiContainer } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable"; import type { IAtom } from "mobx"; @@ -20,6 +19,7 @@ import { act } from "@testing-library/react"; import { observer } from "mobx-react"; import { kubeObjectStatusTextInjectionToken } from "../../../renderer/components/kube-object-status-icon/kube-object-status-text-injection-token"; import { KubeObjectStatusIcon } from "../../../renderer/components/kube-object-status-icon"; +import { testUsingFakeTime } from "../../../test-utils/use-fake-time"; describe("show status for a kube object", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx index a4995c38ae..bdac7d43b4 100644 --- a/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx +++ b/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx @@ -20,9 +20,9 @@ import writeJsonFileInjectable from "../../common/fs/write-json-file.injectable" import pathExistsInjectable from "../../common/fs/path-exists.injectable"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; -import { flushPromises } from "../../common/test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; +import { testUsingFakeTime, advanceFakeTime } from "../../test-utils/use-fake-time"; describe("cluster - sidebar and tab navigation for core", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index 9bde5663c2..2ccbb1ab1a 100644 --- a/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/packages/core/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -15,13 +15,13 @@ import pathExistsInjectable from "../../common/fs/path-exists.injectable"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; import assert from "assert"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; import type { IObservableValue } from "mobx"; import { runInAction, computed, observable } from "mobx"; import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; -import { flushPromises } from "../../common/test-utils/flush-promises"; import type { ClusterPageMenuRegistration } from "../../extensions/common-api/types"; +import { flushPromises } from "@k8slens/test-utils"; +import { testUsingFakeTime, advanceFakeTime } from "../../test-utils/use-fake-time"; describe("cluster - sidebar and tab navigation for extensions", () => { let applicationBuilder: ApplicationBuilder; diff --git a/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts b/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts index e61a805ee2..348450958d 100644 --- a/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts +++ b/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts @@ -14,7 +14,6 @@ import emitClusterStateUpdateInjectable from "./emit-update.injectable"; const setupClusterStateBroadcastingInjectable = getInjectable({ id: "setup-cluster-state-broadcasting", instantiate: (di) => ({ - id: "setup-cluster-state-broadcasting", run: () => { const emitClusterStateUpdate = di.inject(emitClusterStateUpdateInjectable); const clusterStore = di.inject(clusterStoreInjectable); @@ -36,7 +35,7 @@ const setupClusterStateBroadcastingInjectable = getInjectable({ } }); }, - runAfter: di.inject(initClusterStoreInjectable), + runAfter: initClusterStoreInjectable, }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/features/cluster/state-sync/renderer/setup-sync.injectable.ts b/packages/core/src/features/cluster/state-sync/renderer/setup-sync.injectable.ts index e4df4c7f8e..da43ace234 100644 --- a/packages/core/src/features/cluster/state-sync/renderer/setup-sync.injectable.ts +++ b/packages/core/src/features/cluster/state-sync/renderer/setup-sync.injectable.ts @@ -11,17 +11,16 @@ import requestInitialClusterStatesInjectable from "./request-initial.injectable" const setupClusterStateSyncInjectable = getInjectable({ id: "setup-cluster-state-sync", instantiate: (di) => ({ - id: "setup-cluster-state-sync", run: async () => { const requestInitialClusterStates = di.inject(requestInitialClusterStatesInjectable); const getClusterById = di.inject(getClusterByIdInjectable); - const initalStates = await requestInitialClusterStates(); + const initialStates = await requestInitialClusterStates(); - for (const { clusterId, state } of initalStates) { + for (const { clusterId, state } of initialStates) { getClusterById(clusterId)?.setState(state); } }, - runAfter: di.inject(initClusterStoreInjectable), + runAfter: initClusterStoreInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/features/cluster/store/main/init.injectable.ts b/packages/core/src/features/cluster/store/main/init.injectable.ts index 28fdb1aa9f..c7a6bc1c9a 100644 --- a/packages/core/src/features/cluster/store/main/init.injectable.ts +++ b/packages/core/src/features/cluster/store/main/init.injectable.ts @@ -9,17 +9,14 @@ import initUserStoreInjectable from "../../../../main/stores/init-user-store.inj const initClusterStoreInjectable = getInjectable({ id: "init-cluster-store", - instantiate: (di) => { - const clusterStore = di.inject(clusterStoreInjectable); + instantiate: (di) => ({ + run: () => { + const clusterStore = di.inject(clusterStoreInjectable); - return { - id: "init-cluster-store", - run: () => { - clusterStore.load(); - }, - runAfter: di.inject(initUserStoreInjectable), - }; - }, + clusterStore.load(); + }, + runAfter: initUserStoreInjectable, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/features/cluster/store/renderer/init.injectable.ts b/packages/core/src/features/cluster/store/renderer/init.injectable.ts index 66d2e31e09..f937796bae 100644 --- a/packages/core/src/features/cluster/store/renderer/init.injectable.ts +++ b/packages/core/src/features/cluster/store/renderer/init.injectable.ts @@ -10,13 +10,12 @@ import initUserStoreInjectable from "../../../../renderer/stores/init-user-store const initClusterStoreInjectable = getInjectable({ id: "init-cluster-store", instantiate: (di) => ({ - id: "init-cluster-store", run: () => { const clusterStore = di.inject(clusterStoreInjectable); clusterStore.load(); }, - runAfter: di.inject(initUserStoreInjectable), + runAfter: initUserStoreInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts b/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts index 1449a7fa4c..9b60f420b5 100644 --- a/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts +++ b/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts @@ -9,7 +9,6 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const initFileSystemProvisionerStoreInjectable = getInjectable({ id: "init-file-system-provisioner-store", instantiate: (di) => ({ - id: "init-file-system-provisioner-store", run: () => { const store = di.inject(fileSystemProvisionerStoreInjectable); diff --git a/packages/core/src/features/file-system-provisioner/renderer/init-store.injectable.ts b/packages/core/src/features/file-system-provisioner/renderer/init-store.injectable.ts index 0e64e49fd6..a133c54d20 100644 --- a/packages/core/src/features/file-system-provisioner/renderer/init-store.injectable.ts +++ b/packages/core/src/features/file-system-provisioner/renderer/init-store.injectable.ts @@ -9,7 +9,6 @@ import { beforeFrameStartsSecondInjectionToken } from "../../../renderer/before- const initFileSystemProvisionerStoreInjectable = getInjectable({ id: "init-file-system-provisioner-store", instantiate: (di) => ({ - id: "init-file-system-provisioner-store", run: () => { const store = di.inject(fileSystemProvisionerStoreInjectable); diff --git a/packages/core/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts b/packages/core/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts index 495d2e9fb3..13e73c5c28 100644 --- a/packages/core/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts +++ b/packages/core/src/features/helm-charts/add-custom-helm-repository-in-preferences.test.ts @@ -17,8 +17,8 @@ import requestPublicHelmRepositoriesInjectable from "./child-features/preference import isPathInjectable from "../../renderer/components/input/validators/is-path.injectable"; import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; -import { testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import type { AsyncResult } from "@k8slens/utilities"; +import { testUsingFakeTime } from "../../test-utils/use-fake-time"; describe("add custom helm repository in preferences", () => { let builder: ApplicationBuilder; @@ -26,7 +26,7 @@ describe("add custom helm repository in preferences", () => { let showErrorNotificationMock: jest.Mock; let rendered: RenderResult; let execFileMock: AsyncFnMock; - let getActiveHelmRepositoriesMock: AsyncFnMock<() => Promise>>; + let getActiveHelmRepositoriesMock: AsyncFnMock<() => AsyncResult>; beforeEach(async () => { jest.useFakeTimers(); diff --git a/packages/core/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts b/packages/core/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts index 8bdfb4e507..e24e3e09f1 100644 --- a/packages/core/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts +++ b/packages/core/src/features/helm-charts/add-helm-repository-from-list-in-preferences.test.ts @@ -15,7 +15,7 @@ import type { HelmRepo } from "../../common/helm/helm-repo"; import requestPublicHelmRepositoriesInjectable from "./child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.injectable"; import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; describe("add helm repository from list in preferences", () => { let builder: ApplicationBuilder; @@ -23,7 +23,7 @@ describe("add helm repository from list in preferences", () => { let showErrorNotificationMock: jest.Mock; let rendered: RenderResult; let execFileMock: AsyncFnMock; - let getActiveHelmRepositoriesMock: AsyncFnMock<() => Promise>>; + let getActiveHelmRepositoriesMock: AsyncFnMock<() => AsyncResult>; let callForPublicHelmRepositoriesMock: AsyncFnMock<() => Promise>; beforeEach(async () => { diff --git a/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts b/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts index 0a1304ac2d..f4fff46cce 100644 --- a/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts +++ b/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import requestPublicHelmRepositoriesInjectable from "./request-public-helm-repositories.injectable"; export default getGlobalOverrideForFunction(requestPublicHelmRepositoriesInjectable); diff --git a/packages/core/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts b/packages/core/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts index b63d08f904..a21d44cb92 100644 --- a/packages/core/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts +++ b/packages/core/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts @@ -30,7 +30,7 @@ import type { RequestDetailedHelmRelease } from "../../../renderer/components/+h import requestDetailedHelmReleaseInjectable from "../../../renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable"; import type { RequestHelmReleases } from "../../../common/k8s-api/endpoints/helm-releases.api/request-releases.injectable"; import requestHelmReleasesInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-releases.injectable"; -import { flushPromises } from "../../../common/test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; describe("installing helm chart from new tab", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts b/packages/core/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts index 3fd6a7deb7..e2fe7b9313 100644 --- a/packages/core/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts +++ b/packages/core/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts @@ -11,7 +11,7 @@ import { getApplicationBuilder } from "../../../renderer/components/test-utils/g import { HelmChart } from "../../../common/k8s-api/endpoints/helm-charts.api"; import getRandomInstallChartTabIdInjectable from "../../../renderer/components/dock/install-chart/get-random-install-chart-tab-id.injectable"; import requestCreateHelmReleaseInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-create.injectable"; -import { flushPromises } from "../../../common/test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable"; import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable"; import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable"; diff --git a/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts b/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts index 49a8d0c28e..fd2616817e 100644 --- a/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts +++ b/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts @@ -16,7 +16,7 @@ import loggerInjectable from "../../common/logger.injectable"; import type { Logger } from "../../common/logger"; import requestPublicHelmRepositoriesInjectable from "./child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; -import { noop } from "../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("listing active helm repositories in preferences", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts b/packages/core/src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts index 59743be36d..704dd8366f 100644 --- a/packages/core/src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts +++ b/packages/core/src/features/helm-charts/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts @@ -14,12 +14,12 @@ import helmBinaryPathInjectable from "../../main/helm/helm-binary-path.injectabl import getActiveHelmRepositoriesInjectable from "../../main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; import type { HelmRepo } from "../../common/helm/helm-repo"; import requestPublicHelmRepositoriesInjectable from "./child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; describe("remove helm repository from list of active repositories in preferences", () => { let builder: ApplicationBuilder; let rendered: RenderResult; - let getActiveHelmRepositoriesMock: AsyncFnMock<() => Promise>>; + let getActiveHelmRepositoriesMock: AsyncFnMock<() => AsyncResult>; let execFileMock: AsyncFnMock; beforeEach(async () => { diff --git a/packages/core/src/features/helm-charts/upgrade-chart/upgrade-chart-new-tab.test.ts b/packages/core/src/features/helm-charts/upgrade-chart/upgrade-chart-new-tab.test.ts index 7d46856fec..27f50d7f94 100644 --- a/packages/core/src/features/helm-charts/upgrade-chart/upgrade-chart-new-tab.test.ts +++ b/packages/core/src/features/helm-charts/upgrade-chart/upgrade-chart-new-tab.test.ts @@ -17,10 +17,10 @@ import type { RequestHelmReleaseConfiguration } from "../../../common/k8s-api/en import requestHelmReleaseConfigurationInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable"; import type { RequestHelmReleases } from "../../../common/k8s-api/endpoints/helm-releases.api/request-releases.injectable"; import requestHelmReleasesInjectable from "../../../common/k8s-api/endpoints/helm-releases.api/request-releases.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable"; import type { ApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../../renderer/components/test-utils/get-application-builder"; +import { testUsingFakeTime, advanceFakeTime } from "../../../test-utils/use-fake-time"; describe("New Upgrade Helm Chart Dock Tab", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/helm-releases/showing-details-for-helm-release.test.ts b/packages/core/src/features/helm-releases/showing-details-for-helm-release.test.ts index 88ec114eb0..3c90e6540b 100644 --- a/packages/core/src/features/helm-releases/showing-details-for-helm-release.test.ts +++ b/packages/core/src/features/helm-releases/showing-details-for-helm-release.test.ts @@ -15,7 +15,6 @@ import type { RequestHelmReleaseConfiguration } from "../../common/k8s-api/endpo import requestHelmReleaseConfigurationInjectable from "../../common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable"; import type { RequestHelmReleaseUpdate } from "../../common/k8s-api/endpoints/helm-releases.api/request-update.injectable"; import requestHelmReleaseUpdateInjectable from "../../common/k8s-api/endpoints/helm-releases.api/request-update.injectable"; -import { testUsingFakeTime } from "../../common/test-utils/use-fake-time"; import type { RequestDetailedHelmRelease } from "../../renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable"; import requestDetailedHelmReleaseInjectable from "../../renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable"; import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable"; @@ -30,6 +29,7 @@ import requestHelmChartVersionsInjectable from "../../common/k8s-api/endpoints/h import requestHelmChartReadmeInjectable from "../../common/k8s-api/endpoints/helm-charts.api/request-readme.injectable"; import requestHelmChartValuesInjectable from "../../common/k8s-api/endpoints/helm-charts.api/request-values.injectable"; import { HelmChart } from "../../common/k8s-api/endpoints/helm-charts.api"; +import { testUsingFakeTime } from "../../test-utils/use-fake-time"; describe("showing details for helm release", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/hotbar/store/main/init.injectable.ts b/packages/core/src/features/hotbar/store/main/init.injectable.ts index 5d0b5b0cf9..cb45c396ac 100644 --- a/packages/core/src/features/hotbar/store/main/init.injectable.ts +++ b/packages/core/src/features/hotbar/store/main/init.injectable.ts @@ -9,17 +9,14 @@ import setupSyncingOfGeneralCatalogEntitiesInjectable from "../../../../main/sta const initHotbarStoreInjectable = getInjectable({ id: "init-hotbar-store", - instantiate: (di) => { - const hotbarStore = di.inject(hotbarStoreInjectable); + instantiate: (di) => ({ + run: () => { + const hotbarStore = di.inject(hotbarStoreInjectable); - return { - id: "init-hotbar-store", - run: () => { - hotbarStore.load(); - }, - runAfter: di.inject(setupSyncingOfGeneralCatalogEntitiesInjectable), - }; - }, + hotbarStore.load(); + }, + runAfter: setupSyncingOfGeneralCatalogEntitiesInjectable, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/features/hotbar/store/renderer/init.injectable.ts b/packages/core/src/features/hotbar/store/renderer/init.injectable.ts index c17e3a4858..239807dfda 100644 --- a/packages/core/src/features/hotbar/store/renderer/init.injectable.ts +++ b/packages/core/src/features/hotbar/store/renderer/init.injectable.ts @@ -10,13 +10,12 @@ import initClusterStoreInjectable from "../../../cluster/store/renderer/init.inj const initHotbarStoreInjectable = getInjectable({ id: "init-hotbar-store", instantiate: (di) => ({ - id: "init-hotbar-store", run: () => { const hotbarStore = di.inject(hotbarStoreInjectable); hotbarStore.load(); }, - runAfter: di.inject(initClusterStoreInjectable), + runAfter: initClusterStoreInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/features/navigation/reload-page/renderer/register-listener.global-override-for-injectable.ts b/packages/core/src/features/navigation/reload-page/renderer/register-listener.global-override-for-injectable.ts index c0a43713b7..9953ddcbf9 100644 --- a/packages/core/src/features/navigation/reload-page/renderer/register-listener.global-override-for-injectable.ts +++ b/packages/core/src/features/navigation/reload-page/renderer/register-listener.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import { reloadPageChannel } from "../common/channel"; import reloadPageChannelListenerInjectable from "./register-listener.injectable"; diff --git a/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts b/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts index e4f3a65a93..33eef535af 100644 --- a/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts +++ b/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../../../common/catalog-entities/general-catalog-entities/general-catalog-entity-injection-token"; import { GeneralEntity } from "../../../common/catalog-entities"; -import { buildURL } from "../../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; import preferencesRouteInjectable from "./preferences-route.injectable"; const preferencesCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx b/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx index 94c326c9d3..77642f1082 100644 --- a/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx +++ b/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx @@ -8,7 +8,7 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import { Notice } from "../../../../../../renderer/components/+extensions/notice"; import type { UserStore } from "../../../../../../common/user-store"; -import { iter, tuple } from "../../../../../../renderer/utils"; +import { iter, tuple } from "@k8slens/utilities"; import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; import { PathPicker } from "../../../../../../renderer/components/path-picker/path-picker"; import { Spinner } from "../../../../../../renderer/components/spinner"; diff --git a/packages/core/src/features/preferences/renderer/preference-items/terminal/terminal-shell-path/default-shell/default-shell.global-override-for-injectable.ts b/packages/core/src/features/preferences/renderer/preference-items/terminal/terminal-shell-path/default-shell/default-shell.global-override-for-injectable.ts index 55a8d44fc2..3dfa798270 100644 --- a/packages/core/src/features/preferences/renderer/preference-items/terminal/terminal-shell-path/default-shell/default-shell.global-override-for-injectable.ts +++ b/packages/core/src/features/preferences/renderer/preference-items/terminal/terminal-shell-path/default-shell/default-shell.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import defaultShellInjectable from "./default-shell.injectable"; export default getGlobalOverride( diff --git a/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx b/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx index ee04f9d76c..4371c9c758 100644 --- a/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx +++ b/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx @@ -7,7 +7,7 @@ import styles from "./removable-item.module.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { cssNames } from "../../../../renderer/utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../../../../renderer/components/icon"; export interface RemovableItemProps extends DOMAttributes{ diff --git a/packages/core/src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts b/packages/core/src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts index a7a6e4ae60..bf34068f55 100644 --- a/packages/core/src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts +++ b/packages/core/src/features/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts @@ -9,7 +9,7 @@ import type { ClusterManager } from "../../main/cluster/manager"; import exitAppInjectable from "../../main/electron-app/features/exit-app.injectable"; import clusterManagerInjectable from "../../main/cluster/manager.injectable"; import stopServicesAndExitAppInjectable from "../../main/stop-services-and-exit-app.injectable"; -import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time"; +import { testUsingFakeTime, advanceFakeTime } from "../../test-utils/use-fake-time"; describe("quitting the app using application menu", () => { describe("given application has started", () => { diff --git a/packages/core/src/features/resolve-system-proxy/resolve-system-proxy.test.ts b/packages/core/src/features/resolve-system-proxy/resolve-system-proxy.test.ts index d2e021ef98..80f62fbd03 100644 --- a/packages/core/src/features/resolve-system-proxy/resolve-system-proxy.test.ts +++ b/packages/core/src/features/resolve-system-proxy/resolve-system-proxy.test.ts @@ -9,7 +9,7 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get- import type { ResolveSystemProxy } from "../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; import { resolveSystemProxyInjectionToken } from "../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; import resolveSystemProxyFromElectronInjectable from "../../main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable"; -import { getPromiseStatus } from "../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; describe("resolve-system-proxy", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/shell-sync/main/compute-shell-environment.global-override-for-injectable.ts b/packages/core/src/features/shell-sync/main/compute-shell-environment.global-override-for-injectable.ts index b4c9051729..9e19022f87 100644 --- a/packages/core/src/features/shell-sync/main/compute-shell-environment.global-override-for-injectable.ts +++ b/packages/core/src/features/shell-sync/main/compute-shell-environment.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import computeShellEnvironmentInjectable from "./compute-shell-environment.injectable"; export default getGlobalOverride(computeShellEnvironmentInjectable, () => async () => ({ diff --git a/packages/core/src/features/shell-sync/main/compute-shell-environment.injectable.ts b/packages/core/src/features/shell-sync/main/compute-shell-environment.injectable.ts index 88fcd0de84..36aa385d01 100644 --- a/packages/core/src/features/shell-sync/main/compute-shell-environment.injectable.ts +++ b/packages/core/src/features/shell-sync/main/compute-shell-environment.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import { getInjectable } from "@ogre-tools/injectable"; import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; import computeUnixShellEnvironmentInjectable from "./compute-unix-shell-environment.injectable"; export type EnvironmentVariables = Partial>; -export type ComputeShellEnvironment = (shell: string) => Promise>; +export type ComputeShellEnvironment = (shell: string) => AsyncResult; const computeShellEnvironmentInjectable = getInjectable({ id: "compute-shell-environment", diff --git a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.global-override-for-injectable.ts b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.global-override-for-injectable.ts index aac810aa62..b923d35d5c 100644 --- a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.global-override-for-injectable.ts +++ b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import computeUnixShellEnvironmentInjectable from "./compute-unix-shell-environment.injectable"; export default getGlobalOverride(computeUnixShellEnvironmentInjectable, () => async () => { diff --git a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts index fa6de94b57..7fd78f9f56 100644 --- a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts +++ b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts @@ -10,14 +10,14 @@ import randomUUIDInjectable from "../../../main/crypto/random-uuid.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import processExecPathInjectable from "./execPath.injectable"; import processEnvInjectable from "./env.injectable"; -import { object } from "../../../common/utils"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import { object } from "@k8slens/utilities"; +import type { AsyncResult } from "@k8slens/utilities"; export interface UnixShellEnvOptions { signal: AbortSignal; } -export type ComputeUnixShellEnvironment = (shell: string, opts: UnixShellEnvOptions) => Promise>; +export type ComputeUnixShellEnvironment = (shell: string, opts: UnixShellEnvOptions) => AsyncResult; /** * @param src The object containing the current environment variables @@ -36,9 +36,9 @@ const getResetProcessEnv = (src: Partial>, overrides: Par ...overrides, }, resetEnvPairs: (target) => { - for (const [name, orginalValue] of originals) { - if (typeof orginalValue === "string") { - target[name] = orginalValue; + for (const [name, originalValue] of originals) { + if (typeof originalValue === "string") { + target[name] = originalValue; } else { delete target[name]; } @@ -61,7 +61,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ const processExecPath = di.inject(processExecPathInjectable); const processEnv = di.inject(processEnvInjectable); - const getShellSpecifices = (shellName: string) => { + const getShellSpecifics = (shellName: string) => { const mark = randomUUID().replace(/-/g, ""); const regex = new RegExp(`${mark}(\\{.*\\})${mark}`); @@ -100,7 +100,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ TERM: "screen-256color-bce", // required for fish }); const shellName = getBasenameOfPath(shellPath); - const { command, shellArgs, regex } = getShellSpecifices(shellName); + const { command, shellArgs, regex } = getShellSpecifics(shellName); logger.info(`[UNIX-SHELL-ENV]: running against ${shellPath}`, { command, shellArgs }); @@ -143,7 +143,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ if (code || signal) { return resolve({ callWasSuccessful: false, - error: `Shell did not exit sucessfully: ${getErrorContext({ code, signal })}`, + error: `Shell did not exit successfully: ${getErrorContext({ code, signal })}`, }); } @@ -157,7 +157,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ if (!matchedOutput) { return resolve({ callWasSuccessful: false, - error: "Something has blocked the shell from producing the environement variables", + error: "Something has blocked the shell from producing the environment variables", }); } diff --git a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.test.ts b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.test.ts index a56473b474..731dc01509 100644 --- a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.test.ts +++ b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.test.ts @@ -6,7 +6,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; import type { ChildProcessWithoutNullStreams } from "child_process"; import EventEmitter from "events"; -import { flushPromises } from "../../../common/test-utils/flush-promises"; +import { flushPromises } from "@k8slens/test-utils"; import type { Spawn } from "../../../main/child-process/spawn.injectable"; import spawnInjectable from "../../../main/child-process/spawn.injectable"; import randomUUIDInjectable from "../../../main/crypto/random-uuid.injectable"; @@ -142,7 +142,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -155,7 +155,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -248,7 +248,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -261,7 +261,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -353,7 +353,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -366,7 +366,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -457,7 +457,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 1,\n "signal": null,\n "stdout": "",\n "stderr": ""\n}', }); }); }); @@ -470,7 +470,7 @@ describe("computeUnixShellEnvironment technical tests", () => { it("should resolve with a failed call", async () => { await expect(unixShellEnv).resolves.toEqual({ callWasSuccessful: false, - error: 'Shell did not exit sucessfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', + error: 'Shell did not exit successfully: {\n "code": 0,\n "signal": "SIGKILL",\n "stdout": "",\n "stderr": ""\n}', }); }); }); diff --git a/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts b/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts index 200356bb3d..3a763b7426 100644 --- a/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts +++ b/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts @@ -5,67 +5,66 @@ import { getInjectable } from "@ogre-tools/injectable"; import loggerInjectable from "../../../common/logger.injectable"; import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; -import { unionPATHs } from "../../../common/utils/union-env-path"; import isSnapPackageInjectable from "../../../common/vars/is-snap-package.injectable"; import electronAppInjectable from "../../../main/electron-app/electron-app.injectable"; import computeShellEnvironmentInjectable from "./compute-shell-environment.injectable"; import userShellSettingInjectable from "../../../common/user-store/shell-setting.injectable"; import emitShellSyncFailedInjectable from "./emit-failure.injectable"; +import { unionPATHs } from "@k8slens/utilities"; const setupShellInjectable = getInjectable({ id: "setup-shell", - instantiate: (di) => { - const logger = di.inject(loggerInjectable); - const isSnapPackage = di.inject(isSnapPackageInjectable); - const electronApp = di.inject(electronAppInjectable); - const resolvedUserShellSetting = di.inject(userShellSettingInjectable); - const computeShellEnvironment = di.inject(computeShellEnvironmentInjectable); - const emitShellSyncFailed = di.inject(emitShellSyncFailedInjectable); + instantiate: (di) => ({ + run: async () => { + const logger = di.inject(loggerInjectable); + const isSnapPackage = di.inject(isSnapPackageInjectable); + const electronApp = di.inject(electronAppInjectable); + const resolvedUserShellSetting = di.inject(userShellSettingInjectable); + const computeShellEnvironment = di.inject(computeShellEnvironmentInjectable); + const emitShellSyncFailed = di.inject(emitShellSyncFailedInjectable); - return { - id: "setup-shell", - run: async (): Promise => { - logger.info("🐚 Syncing shell environment"); + logger.info("🐚 Syncing shell environment"); - const result = await computeShellEnvironment(resolvedUserShellSetting.get()); + const result = await computeShellEnvironment(resolvedUserShellSetting.get()); - if (!result.callWasSuccessful) { - logger.error(`[SHELL-SYNC]: ${result.error}`); - emitShellSyncFailed(result.error); + if (!result.callWasSuccessful) { + logger.error(`[SHELL-SYNC]: ${result.error}`); + emitShellSyncFailed(result.error); - return; - } + return; + } - const env = result.response; + const env = result.response; - if (!env) { - return void logger.debug("[SHELL-SYNC]: nothing to do, env not special in shells"); - } + if (!env) { + logger.debug("[SHELL-SYNC]: nothing to do, env not special in shells"); - if (!env.LANG) { - // the LANG env var expects an underscore instead of electron's dash - env.LANG = `${electronApp.getLocale().replace("-", "_")}.UTF-8`; - } else if (!env.LANG.endsWith(".UTF-8")) { - env.LANG += ".UTF-8"; - } + return; + } - if (!isSnapPackage) { - // Prefer the synced PATH over the initial one - process.env.PATH = unionPATHs(env.PATH ?? "", process.env.PATH ?? ""); - } + if (!env.LANG) { + // the LANG env var expects an underscore instead of electron's dash + env.LANG = `${electronApp.getLocale().replace("-", "_")}.UTF-8`; + } else if (!env.LANG.endsWith(".UTF-8")) { + env.LANG += ".UTF-8"; + } - // The spread operator allows joining of objects. The precedence is last to first. - process.env = { - ...env, - ...process.env, - }; + if (!isSnapPackage) { + // Prefer the synced PATH over the initial one + process.env.PATH = unionPATHs(env.PATH ?? "", process.env.PATH ?? ""); + } - logger.info(`[SHELL-SYNC]: Synced shell env`); - logger.debug(`[SHELL-SYNC]: updated env`, process.env); - }, - }; - }, + // The spread operator allows joining of objects. The precedence is last to first. + process.env = { + ...env, + ...process.env, + }; + + logger.info(`[SHELL-SYNC]: Synced shell env`); + logger.debug(`[SHELL-SYNC]: updated env`, process.env); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/features/telemetry/renderer/telemetry-decorator.global-override-for-injectable.ts b/packages/core/src/features/telemetry/renderer/telemetry-decorator.global-override-for-injectable.ts index e163a53862..a1d707fb11 100644 --- a/packages/core/src/features/telemetry/renderer/telemetry-decorator.global-override-for-injectable.ts +++ b/packages/core/src/features/telemetry/renderer/telemetry-decorator.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { identity } from "lodash/fp"; -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import telemetryDecoratorInjectable from "./telemetry-decorator.injectable"; export default getGlobalOverride(telemetryDecoratorInjectable, () => ({ diff --git a/packages/core/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts b/packages/core/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts index 0d1b23bfde..b32ca32cb3 100644 --- a/packages/core/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts +++ b/packages/core/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import loadTerminalFontInjectable from "./load-font.injectable"; export default getGlobalOverride(loadTerminalFontInjectable, () => async () => {}); diff --git a/packages/core/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts b/packages/core/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts index 64c40247b7..afb0c969fd 100644 --- a/packages/core/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts +++ b/packages/core/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts @@ -10,7 +10,6 @@ import loadTerminalFontInjectable from "./load-font.injectable"; const preloadTerminalFontsInjectable = getInjectable({ id: "preload-terminal-fonts", instantiate: (di) => ({ - id: "preload-terminal-fonts", run: async () => { const terminalFonts = di.inject(terminalFontsInjectable); const loadTerminalFont = di.inject(loadTerminalFontInjectable); diff --git a/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts b/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts index 5416fda208..6f342f6480 100644 --- a/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts +++ b/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts @@ -10,23 +10,20 @@ import emitSystemThemeTypeUpdateInjectable from "./emit-update.injectable"; const setupSystemThemeTypeUpdaterEmitterInjectable = getInjectable({ id: "setup-system-theme-type-updater-emitter", - instantiate: (di) => { - const operatingSystemTheme = di.inject(operatingSystemThemeInjectable); - const emitSystemThemeTypeUpdate = di.inject(emitSystemThemeTypeUpdateInjectable); + instantiate: (di) => ({ + run: () => { + const operatingSystemTheme = di.inject(operatingSystemThemeInjectable); + const emitSystemThemeTypeUpdate = di.inject(emitSystemThemeTypeUpdateInjectable); - return { - id: "setup-system-theme-type-updater-emitter", - run: () => { - reaction( - () => operatingSystemTheme.get(), - emitSystemThemeTypeUpdate, - { - fireImmediately: true, - }, - ); - }, - }; - }, + reaction( + () => operatingSystemTheme.get(), + emitSystemThemeTypeUpdate, + { + fireImmediately: true, + }, + ); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/features/theme/system-type/renderer/initialize.injectable.ts b/packages/core/src/features/theme/system-type/renderer/initialize.injectable.ts index 849c8328b2..2e09f8e9d1 100644 --- a/packages/core/src/features/theme/system-type/renderer/initialize.injectable.ts +++ b/packages/core/src/features/theme/system-type/renderer/initialize.injectable.ts @@ -11,14 +11,13 @@ import requestInitialSystemThemeTypeInjectable from "./request-initial.injectabl const initializeSystemThemeTypeInjectable = getInjectable({ id: "initialize-system-theme-type", instantiate: (di) => ({ - id: "initialize-system-theme-type", run: async () => { const systemThemeConfiguration = di.inject(systemThemeConfigurationInjectable); const requestInitialSystemThemeType = di.inject(requestInitialSystemThemeTypeInjectable); systemThemeConfiguration.set(await requestInitialSystemThemeType()); }, - runAfter: di.inject(initUserStoreInjectable), + runAfter: initUserStoreInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/main/app-paths/directory-for-integration-testing/directory-for-integration-testing.global-override-for-injectable.ts b/packages/core/src/main/app-paths/directory-for-integration-testing/directory-for-integration-testing.global-override-for-injectable.ts index f4e7b5674e..92830fa621 100644 --- a/packages/core/src/main/app-paths/directory-for-integration-testing/directory-for-integration-testing.global-override-for-injectable.ts +++ b/packages/core/src/main/app-paths/directory-for-integration-testing/directory-for-integration-testing.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import directoryForIntegrationTestingInjectable from "./directory-for-integration-testing.injectable"; export default getGlobalOverride(directoryForIntegrationTestingInjectable, () => undefined); diff --git a/packages/core/src/main/app-paths/setup-app-paths.injectable.ts b/packages/core/src/main/app-paths/setup-app-paths.injectable.ts index c6f1c1e01e..34178547c3 100644 --- a/packages/core/src/main/app-paths/setup-app-paths.injectable.ts +++ b/packages/core/src/main/app-paths/setup-app-paths.injectable.ts @@ -18,38 +18,35 @@ import { beforeAnythingInjectionToken } from "@k8slens/application-for-electron- const setupAppPathsInjectable = getInjectable({ id: "setup-app-paths", - instantiate: (di) => { - const setElectronAppPath = di.inject(setElectronAppPathInjectable); - const appName = di.inject(appNameInjectable); - const getElectronAppPath = di.inject(getElectronAppPathInjectable); - const appPathsState = di.inject(appPathsStateInjectable); - const directoryForIntegrationTesting = di.inject(directoryForIntegrationTestingInjectable); - const joinPaths = di.inject(joinPathsInjectable); + instantiate: (di) => ({ + run: () => { + const setElectronAppPath = di.inject(setElectronAppPathInjectable); + const appName = di.inject(appNameInjectable); + const getElectronAppPath = di.inject(getElectronAppPathInjectable); + const appPathsState = di.inject(appPathsStateInjectable); + const directoryForIntegrationTesting = di.inject(directoryForIntegrationTestingInjectable); + const joinPaths = di.inject(joinPathsInjectable); - return { - id: "setup-app-paths", - run: () => { - if (directoryForIntegrationTesting) { - setElectronAppPath("appData", directoryForIntegrationTesting); - } + if (directoryForIntegrationTesting) { + setElectronAppPath("appData", directoryForIntegrationTesting); + } - const appDataPath = getElectronAppPath("appData"); + const appDataPath = getElectronAppPath("appData"); - setElectronAppPath("userData", joinPaths(appDataPath, appName)); + setElectronAppPath("userData", joinPaths(appDataPath, appName)); - const appPaths = pipeline( - pathNames, - map(name => [name, getElectronAppPath(name)]), - fromPairs, - ) as AppPaths; + const appPaths = pipeline( + pathNames, + map(name => [name, getElectronAppPath(name)]), + fromPairs, + ) as AppPaths; - appPathsState.set(appPaths); + appPathsState.set(appPaths); - // NOTE: this is the worse of two evils. This makes sure that `RunnableSync` always is sync - return undefined; - }, - }; - }, + // NOTE: this is the worse of two evils. This makes sure that `RunnableSync` always is sync + return undefined; + }, + }), injectionToken: beforeAnythingInjectionToken, }); diff --git a/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts b/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts index cfeaba0a65..42ffbedf30 100644 --- a/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts +++ b/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts @@ -10,7 +10,7 @@ import type { Cluster } from "../../../common/cluster/cluster"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForTempInjectable from "../../../common/app-paths/directory-for-temp/directory-for-temp.injectable"; -import { iter, strictGet } from "../../../common/utils"; +import { iter, strictGet } from "@k8slens/utilities"; import type { ComputeKubeconfigDiff } from "../kubeconfig-sync/compute-diff.injectable"; import computeKubeconfigDiffInjectable from "../kubeconfig-sync/compute-diff.injectable"; import type { ConfigToModels } from "../kubeconfig-sync/config-to-models.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts index f17293fc2d..ad03c2563d 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts @@ -10,8 +10,8 @@ import type { Readable } from "stream"; import type { CatalogEntity } from "../../../common/catalog"; import type { Cluster } from "../../../common/cluster/cluster"; import createReadFileStreamInjectable from "../../../common/fs/create-read-file-stream.injectable"; -import type { Disposer } from "../../../common/utils"; -import { bytesToUnits, noop } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { bytesToUnits, noop } from "@k8slens/utilities"; import computeKubeconfigDiffInjectable from "./compute-diff.injectable"; import kubeconfigSyncLoggerInjectable from "./logger.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts index cf05577ae7..77ef96b765 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts @@ -6,8 +6,8 @@ import type { IComputedValue, ObservableMap } from "mobx"; import { action, observable, computed, makeObservable, observe } from "mobx"; import type { CatalogEntity } from "../../../common/catalog"; -import type { Disposer } from "../../../common/utils"; -import { iter } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { iter } from "@k8slens/utilities"; import type { KubeconfigSyncValue } from "../../../common/user-store"; import type { Logger } from "../../../common/logger"; import type { WatchKubeconfigFileChanges } from "./watch-file-changes.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts index 244daeec69..a54db19390 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts @@ -13,8 +13,8 @@ import type { Cluster } from "../../../common/cluster/cluster"; import statInjectable from "../../../common/fs/stat.injectable"; import type { Watcher } from "../../../common/fs/watch/watch.injectable"; import watchInjectable from "../../../common/fs/watch/watch.injectable"; -import type { Disposer } from "../../../common/utils"; -import { getOrInsertWith, iter } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { getOrInsertWith, iter } from "@k8slens/utilities"; import diffChangedKubeconfigInjectable from "./diff-changed-kubeconfig.injectable"; import kubeconfigSyncLoggerInjectable from "./logger.injectable"; diff --git a/packages/core/src/main/catalog-sources/weblinks.ts b/packages/core/src/main/catalog-sources/weblinks.ts index 084654efc0..2ff2b645a1 100644 --- a/packages/core/src/main/catalog-sources/weblinks.ts +++ b/packages/core/src/main/catalog-sources/weblinks.ts @@ -8,7 +8,7 @@ import type { WeblinkStore } from "../../common/weblinks-store/weblink-store"; import { WebLink } from "../../common/catalog-entities"; import type { CatalogEntityRegistry } from "../catalog"; import got from "got"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { random } from "lodash"; async function validateLink(link: WebLink) { diff --git a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts index fce2e7d2eb..312af90dba 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/broadcaster.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import { debounce } from "lodash"; -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; export default getGlobalOverride(catalogSyncBroadcasterInjectable, () => debounce(() => {})); diff --git a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts index bdcd3034d3..cd77332185 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts @@ -6,10 +6,11 @@ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; import ipcMainInjectionToken from "../../common/ipc/ipc-main-injection-token"; import { catalogInitChannel } from "../../common/ipc/catalog"; -import { disposer, toJS } from "../../common/utils"; +import { disposer } from "@k8slens/utilities"; import { getStartableStoppable } from "../../common/utils/get-startable-stoppable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; +import { toJS } from "../../common/utils"; const catalogSyncToRendererInjectable = getInjectable({ id: "catalog-sync-to-renderer", diff --git a/packages/core/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts index ebe1f2a1ac..41db32b8f2 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts @@ -3,24 +3,21 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { afterRootFrameIsReadyInjectionToken } from "../start-main-application/runnable-tokens/after-root-frame-is-ready-injection-token"; +import { afterRootFrameIsReadyInjectionToken } from "../start-main-application/runnable-tokens/phases"; import catalogSyncToRendererInjectable from "./catalog-sync-to-renderer.injectable"; const startCatalogSyncInjectable = getInjectable({ id: "start-catalog-sync", - instantiate: (di) => { - const catalogSyncToRenderer = di.inject(catalogSyncToRendererInjectable); + instantiate: (di) => ({ + run: () => { + const catalogSyncToRenderer = di.inject(catalogSyncToRendererInjectable); - return { - id: "start-catalog-sync", - run: () => { - if (!catalogSyncToRenderer.started) { - catalogSyncToRenderer.start(); - } - }, - }; - }, + if (!catalogSyncToRenderer.started) { + catalogSyncToRenderer.start(); + } + }, + }), injectionToken: afterRootFrameIsReadyInjectionToken, }); diff --git a/packages/core/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.ts index 353790d8b2..faf5013a5f 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.ts @@ -4,25 +4,22 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import catalogSyncToRendererInjectable from "./catalog-sync-to-renderer.injectable"; -import { beforeQuitOfFrontEndInjectionToken } from "../start-main-application/runnable-tokens/before-quit-of-front-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken } from "../start-main-application/runnable-tokens/phases"; const stopCatalogSyncInjectable = getInjectable({ id: "stop-catalog-sync", - instantiate: (di) => { - const catalogSyncToRenderer = di.inject(catalogSyncToRendererInjectable); + instantiate: (di) => ({ + run: () => { + const catalogSyncToRenderer = di.inject(catalogSyncToRendererInjectable); - return { - id: "stop-catalog-sync", - run: () => { - if (catalogSyncToRenderer.started) { - catalogSyncToRenderer.stop(); - } + if (catalogSyncToRenderer.started) { + catalogSyncToRenderer.stop(); + } - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfFrontEndInjectionToken, }); diff --git a/packages/core/src/main/catalog/entity-registry.ts b/packages/core/src/main/catalog/entity-registry.ts index 972da73132..99b7a4ccb3 100644 --- a/packages/core/src/main/catalog/entity-registry.ts +++ b/packages/core/src/main/catalog/entity-registry.ts @@ -6,7 +6,7 @@ import { action, computed, type IComputedValue, type IObservableArray, makeObservable, observable } from "mobx"; import type { CatalogEntity } from "../../common/catalog"; import type { HasCategoryForEntity } from "../../common/catalog/has-category-for-entity.injectable"; -import { iter } from "../../common/utils"; +import { iter } from "@k8slens/utilities"; interface Dependencies { readonly hasCategoryForEntity: HasCategoryForEntity; diff --git a/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts b/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts index cfc492942f..8bb362baa9 100644 --- a/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts +++ b/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts @@ -8,7 +8,7 @@ import { groupBy, reduce } from "lodash"; import { filter, map } from "lodash/fp"; import type { ClusterMetadata } from "../../common/cluster-types"; import type { Cluster } from "../../common/cluster/cluster"; -import { hasDefinedTupleValue, isDefined, object } from "../../common/utils"; +import { hasDefinedTupleValue, isDefined, object } from "@k8slens/utilities"; import type { ClusterDetectionResult, ClusterMetadataDetector } from "./token"; import { clusterMetadataDetectorInjectionToken } from "./token"; diff --git a/packages/core/src/main/cluster/cluster-connection.injectable.ts b/packages/core/src/main/cluster/cluster-connection.injectable.ts index 8154953d78..433a9f5f23 100644 --- a/packages/core/src/main/cluster/cluster-connection.injectable.ts +++ b/packages/core/src/main/cluster/cluster-connection.injectable.ts @@ -15,8 +15,7 @@ import { clusterListNamespaceForbiddenChannel } from "../../common/ipc/cluster"; import type { Logger } from "../../common/logger"; import type { KubeApiResource } from "../../common/rbac"; import { formatKubeApiResource } from "../../common/rbac"; -import { disposer, isDefined, isRequestError } from "../../common/utils"; -import { withConcurrencyLimit } from "../../common/utils/with-concurrency-limit"; +import { disposer, isDefined, isRequestError, withConcurrencyLimit } from "@k8slens/utilities"; import type { ClusterPrometheusHandler } from "./prometheus-handler/prometheus-handler"; import type { BroadcastConnectionUpdate } from "./broadcast-connection-update.injectable"; import type { KubeAuthProxyServer } from "./kube-auth-proxy-server.injectable"; diff --git a/packages/core/src/main/cluster/initialize-manager.injectable.ts b/packages/core/src/main/cluster/initialize-manager.injectable.ts index 895355e232..28541a0ca1 100644 --- a/packages/core/src/main/cluster/initialize-manager.injectable.ts +++ b/packages/core/src/main/cluster/initialize-manager.injectable.ts @@ -8,16 +8,13 @@ import clusterManagerInjectable from "./manager.injectable"; const initializeClusterManagerInjectable = getInjectable({ id: "initialize-cluster-manager", - instantiate: (di) => { - const clusterManager = di.inject(clusterManagerInjectable); + instantiate: (di) => ({ + run: () => { + const clusterManager = di.inject(clusterManagerInjectable); - return { - id: "initialize-cluster-manager", - run: () => { - clusterManager.init(); - }, - }; - }, + clusterManager.init(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, causesSideEffects: true, }); diff --git a/packages/core/src/main/cluster/manager.ts b/packages/core/src/main/cluster/manager.ts index 6dd4b97881..bc270b79f1 100644 --- a/packages/core/src/main/cluster/manager.ts +++ b/packages/core/src/main/cluster/manager.ts @@ -7,7 +7,7 @@ import "../../common/ipc/cluster"; import type { IObservableValue, ObservableSet } from "mobx"; import { action, makeObservable, observe, reaction, toJS } from "mobx"; import type { Cluster } from "../../common/cluster/cluster"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import { isKubernetesCluster, KubernetesCluster, LensKubernetesClusterStatus } from "../../common/catalog-entities/kubernetes-cluster"; import { ipcMainOn } from "../../common/ipc"; import { once } from "lodash"; diff --git a/packages/core/src/main/cluster/request-api-resources.injectable.ts b/packages/core/src/main/cluster/request-api-resources.injectable.ts index fee8c0e3aa..d6a21e3ce4 100644 --- a/packages/core/src/main/cluster/request-api-resources.injectable.ts +++ b/packages/core/src/main/cluster/request-api-resources.injectable.ts @@ -8,13 +8,12 @@ import loggerInjectable from "../../common/logger.injectable"; import type { KubeApiResource } from "../../common/rbac"; import type { Cluster } from "../../common/cluster/cluster"; import { requestApiVersionsInjectionToken } from "./request-api-versions"; -import { withConcurrencyLimit } from "../../common/utils/with-concurrency-limit"; +import { backoffCaller, withConcurrencyLimit } from "@k8slens/utilities"; import requestKubeApiResourcesForInjectable from "./request-kube-api-resources-for.injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; -import { backoffCaller } from "../../common/utils/backoff-caller"; +import type { AsyncResult } from "@k8slens/utilities"; import broadcastConnectionUpdateInjectable from "./broadcast-connection-update.injectable"; -export type RequestApiResources = (cluster: Cluster) => Promise>; +export type RequestApiResources = (cluster: Cluster) => AsyncResult; export interface KubeResourceListGroup { group: string; diff --git a/packages/core/src/main/cluster/request-api-versions.ts b/packages/core/src/main/cluster/request-api-versions.ts index ac5a08e675..a9b5074549 100644 --- a/packages/core/src/main/cluster/request-api-versions.ts +++ b/packages/core/src/main/cluster/request-api-versions.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export interface KubeResourceListGroup { group: string; @@ -15,7 +15,7 @@ export interface ClusterData { readonly id: string; } -export type RequestApiVersions = (cluster: ClusterData) => Promise>; +export type RequestApiVersions = (cluster: ClusterData) => AsyncResult; export const requestApiVersionsInjectionToken = getInjectionToken({ id: "request-api-versions-token", diff --git a/packages/core/src/main/cluster/request-kube-api-resources-for.injectable.ts b/packages/core/src/main/cluster/request-kube-api-resources-for.injectable.ts index 681f4ac013..65e326eed7 100644 --- a/packages/core/src/main/cluster/request-kube-api-resources-for.injectable.ts +++ b/packages/core/src/main/cluster/request-kube-api-resources-for.injectable.ts @@ -6,11 +6,11 @@ import type { V1APIResourceList } from "@kubernetes/client-node"; import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../common/cluster/cluster"; import type { KubeApiResource } from "../../common/rbac"; -import type { AsyncResult } from "../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import k8sRequestInjectable from "../k8s-request.injectable"; import type { KubeResourceListGroup } from "./request-api-versions"; -export type RequestKubeApiResources = (grouping: KubeResourceListGroup) => Promise>; +export type RequestKubeApiResources = (grouping: KubeResourceListGroup) => AsyncResult; export type RequestKubeApiResourcesFor = (cluster: Cluster) => RequestKubeApiResources; diff --git a/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts b/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts index 25f8676c2a..84e62f6b80 100644 --- a/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts +++ b/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts @@ -4,7 +4,7 @@ */ import type { V1APIGroupList } from "@kubernetes/client-node"; import { getInjectable } from "@ogre-tools/injectable"; -import { chain } from "../../common/utils/iter"; +import { iter } from "@k8slens/utilities"; import k8sRequestInjectable from "../k8s-request.injectable"; import { requestApiVersionsInjectionToken } from "./request-api-versions"; @@ -19,7 +19,7 @@ const requestNonCoreApiVersionsInjectable = getInjectable({ return { callWasSuccessful: true, - response: chain(groups.values()) + response: iter.chain(groups.values()) .flatMap(group => group.versions.map(version => ({ group: group.name, path: `/apis/${version.groupVersion}`, diff --git a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts index fdd1ecdc80..026ded3d1b 100644 --- a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts +++ b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts @@ -8,7 +8,7 @@ import { clusterStoreMigrationInjectionToken } from "../../../common/cluster-sto import type { ClusterModel } from "../../../common/cluster-types"; import readJsonSyncInjectable from "../../../common/fs/read-json-sync.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; -import { isErrnoException } from "../../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; interface Pre500WorkspaceStoreModel { workspaces: { diff --git a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts index 4ac06fee60..9137c81fed 100644 --- a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts +++ b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts @@ -6,7 +6,7 @@ import type { ClusterModel, ClusterPreferences, ClusterPrometheusPreferences } from "../../../common/cluster-types"; import { moveSync, removeSync } from "fs-extra"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { isDefined } from "../../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import { getInjectable } from "@ogre-tools/injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/packages/core/src/main/crypto/random-uuid.global-override-for-injectable.ts b/packages/core/src/main/crypto/random-uuid.global-override-for-injectable.ts index 63e5364a8a..936e30c709 100644 --- a/packages/core/src/main/crypto/random-uuid.global-override-for-injectable.ts +++ b/packages/core/src/main/crypto/random-uuid.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import randomUUIDInjectable from "./random-uuid.injectable"; export default getGlobalOverride(randomUUIDInjectable, () => () => { diff --git a/packages/core/src/main/electron-app/electron-app.global-override-for-injectable.ts b/packages/core/src/main/electron-app/electron-app.global-override-for-injectable.ts index e225745ca3..919303dd08 100644 --- a/packages/core/src/main/electron-app/electron-app.global-override-for-injectable.ts +++ b/packages/core/src/main/electron-app/electron-app.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import { kebabCase } from "lodash"; -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import electronAppInjectable from "./electron-app.injectable"; export default getGlobalOverride(electronAppInjectable, () => { diff --git a/packages/core/src/main/electron-app/features/electron-dialog.global-override-for-injectable.ts b/packages/core/src/main/electron-app/features/electron-dialog.global-override-for-injectable.ts index 8ccafcfe7a..117c8a3fbd 100644 --- a/packages/core/src/main/electron-app/features/electron-dialog.global-override-for-injectable.ts +++ b/packages/core/src/main/electron-app/features/electron-dialog.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import electronDialogInjectable from "./electron-dialog.injectable"; export default getGlobalOverride(electronDialogInjectable, () => ({ diff --git a/packages/core/src/main/electron-app/features/native-theme.global-override-for-injectable.ts b/packages/core/src/main/electron-app/features/native-theme.global-override-for-injectable.ts index 47c957c722..7e18ea6f15 100644 --- a/packages/core/src/main/electron-app/features/native-theme.global-override-for-injectable.ts +++ b/packages/core/src/main/electron-app/features/native-theme.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import EventEmitter from "events"; -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import nativeThemeInjectable from "./native-theme.injectable"; export default getGlobalOverride(nativeThemeInjectable, () => Object.assign(new EventEmitter(), { diff --git a/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts b/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts index 94e9afbeb4..5015b2c07f 100644 --- a/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts +++ b/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import showOpenDialogInjectable from "./show-open-dialog.injectable"; export default getGlobalOverrideForFunction(showOpenDialogInjectable); diff --git a/packages/core/src/main/electron-app/runnables/clean-up-deep-linking.injectable.ts b/packages/core/src/main/electron-app/runnables/clean-up-deep-linking.injectable.ts index b5088a667a..19fb7e1143 100644 --- a/packages/core/src/main/electron-app/runnables/clean-up-deep-linking.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/clean-up-deep-linking.injectable.ts @@ -3,20 +3,21 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; import lensProtocolRouterMainInjectable from "../../protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable"; const cleanUpDeepLinkingInjectable = getInjectable({ id: "clean-up-deep-linking", - instantiate: (di) => { - const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); + instantiate: (di) => ({ + run: () => { + const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); - return { - id: "clean-up-deep-linking", - run: () => void lensProtocolRouterMain.cleanup(), - }; - }, + lensProtocolRouterMain.cleanup(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.ts b/packages/core/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.ts index 5586c93586..e61af65da4 100644 --- a/packages/core/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeQuitOfFrontEndInjectionToken } from "../../../start-main-application/runnable-tokens/before-quit-of-front-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken } from "../../../start-main-application/runnable-tokens/phases"; import electronAppInjectable from "../../electron-app.injectable"; import { isEmpty } from "lodash/fp"; import getVisibleWindowsInjectable from "../../../start-main-application/lens-window/get-visible-windows.injectable"; @@ -11,23 +11,19 @@ import getVisibleWindowsInjectable from "../../../start-main-application/lens-wi const hideDockForLastClosedWindowInjectable = getInjectable({ id: "hide-dock-when-there-are-no-windows", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); - const getVisibleWindows = di.inject(getVisibleWindowsInjectable); + instantiate: (di) => ({ + run: () => { + const app = di.inject(electronAppInjectable); + const getVisibleWindows = di.inject(getVisibleWindowsInjectable); + const visibleWindows = getVisibleWindows(); - return { - id: "hide-dock-when-there-are-no-windows", - run: () => { - const visibleWindows = getVisibleWindows(); + if (isEmpty(visibleWindows)) { + app.dock?.hide(); + } - if (isEmpty(visibleWindows)) { - app.dock?.hide(); - } - - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfFrontEndInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.ts b/packages/core/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.ts index b47e511c14..9f52dcab42 100644 --- a/packages/core/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.ts @@ -4,21 +4,18 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import electronAppInjectable from "../../electron-app.injectable"; -import { afterWindowIsOpenedInjectionToken } from "../../../start-main-application/runnable-tokens/after-window-is-opened-injection-token"; +import { afterWindowIsOpenedInjectionToken } from "../../../start-main-application/runnable-tokens/phases"; const showDockForFirstOpenedWindowInjectable = getInjectable({ id: "show-dock-for-first-opened-window", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); + instantiate: (di) => ({ + run: () => { + const app = di.inject(electronAppInjectable); - return { - id: "show-dock-for-first-opened-window", - run: () => { - app.dock?.show(); - }, - }; - }, + app.dock?.show(); + }, + }), injectionToken: afterWindowIsOpenedInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts b/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts index 1868f61a8a..3dfe63430d 100644 --- a/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts @@ -10,21 +10,18 @@ import exitAppInjectable from "../features/exit-app.injectable"; const enforceSingleApplicationInstanceInjectable = getInjectable({ id: "enforce-single-application-instance", - instantiate: (di) => { - const requestSingleInstanceLock = di.inject(requestSingleInstanceLockInjectable); - const exitApp = di.inject(exitAppInjectable); + instantiate: (di) => ({ + run: () => { + const requestSingleInstanceLock = di.inject(requestSingleInstanceLockInjectable); + const exitApp = di.inject(exitAppInjectable); - return { - id: "enforce-single-application-instance", - run: () => { - if (!requestSingleInstanceLock()) { - exitApp(); - } + if (!requestSingleInstanceLock()) { + exitApp(); + } - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts index fe86f6d0e2..5935aec41c 100644 --- a/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts @@ -10,19 +10,16 @@ import electronAppInjectable from "../electron-app.injectable"; const setupApplicationNameInjectable = getInjectable({ id: "setup-application-name", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); - const appName = di.inject(appNameInjectable); + instantiate: (di) => ({ + run: () => { + const app = di.inject(electronAppInjectable); + const appName = di.inject(appNameInjectable); - return { - id: "setup-application-name", - run: () => { - app.setName(appName); + app.setName(appName); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts index f4a7f8eccd..a7a4c7b34c 100644 --- a/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts @@ -7,68 +7,63 @@ import electronAppInjectable from "../electron-app.injectable"; import openDeepLinkInjectable from "../../protocol-handler/lens-protocol-router-main/open-deep-link-for-url/open-deep-link.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import commandLineArgumentsInjectable from "../../utils/command-line-arguments.injectable"; -import { pipeline } from "@ogre-tools/fp"; -import { find, startsWith, toLower, map } from "lodash/fp"; +import { startsWith, toLower } from "lodash/fp"; import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import showApplicationWindowInjectable from "../../start-main-application/lens-window/show-application-window.injectable"; const setupDeepLinkingInjectable = getInjectable({ id: "setup-deep-linking", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); - const logger = di.inject(loggerInjectable); - const openDeepLinkForUrl = di.inject(openDeepLinkInjectable); - const showApplicationWindow = di.inject(showApplicationWindowInjectable); + instantiate: (di) => ({ + run: async () => { + const app = di.inject(electronAppInjectable); + const logger = di.inject(loggerInjectable); + const openDeepLinkForUrl = di.inject(openDeepLinkInjectable); + const showApplicationWindow = di.inject(showApplicationWindowInjectable); + const firstInstanceCommandLineArguments = di.inject(commandLineArgumentsInjectable); - const firstInstanceCommandLineArguments = di.inject( - commandLineArgumentsInjectable, - ); + logger.info(`📟 Setting protocol client for lens://`); - return { - id: "setup-deep-linking", - run: async () => { - logger.info(`📟 Setting protocol client for lens://`); + if (app.setAsDefaultProtocolClient("lens")) { + logger.info("📟 Protocol client register succeeded ✅"); + } else { + logger.info("📟 Protocol client register failed ❗"); + } - if (app.setAsDefaultProtocolClient("lens")) { - logger.info("📟 Protocol client register succeeded ✅"); - } else { - logger.info("📟 Protocol client register failed ❗"); - } + const url = getDeepLinkUrl(firstInstanceCommandLineArguments); - const url = getDeepLinkUrl(firstInstanceCommandLineArguments); + if (url) { + await openDeepLinkForUrl(url); + } - if (url) { - await openDeepLinkForUrl(url); - } + app.on("open-url", async (event, url) => { + event.preventDefault(); - app.on("open-url", async (event, url) => { - event.preventDefault(); + await openDeepLinkForUrl(url); + }); - await openDeepLinkForUrl(url); - }); + app.on( + "second-instance", + async (_, secondInstanceCommandLineArguments) => { + const url = getDeepLinkUrl(secondInstanceCommandLineArguments); - app.on( - "second-instance", + await showApplicationWindow(); - async (_, secondInstanceCommandLineArguments) => { - const url = getDeepLinkUrl(secondInstanceCommandLineArguments); - - await showApplicationWindow(); - - if (url) { - await openDeepLinkForUrl(url); - } - }, - ); - }, - }; - }, + if (url) { + await openDeepLinkForUrl(url); + } + }, + ); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); export default setupDeepLinkingInjectable; -const getDeepLinkUrl = (commandLineArguments: string[]) => - pipeline(commandLineArguments, map(toLower), find(startsWith("lens://"))); +const getDeepLinkUrl = (commandLineArguments: string[]) => ( + commandLineArguments + .map(toLower) + .find(startsWith("lens://")) +); diff --git a/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts index 5272494a94..06b1f39f33 100644 --- a/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts @@ -10,32 +10,33 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupDeveloperToolsInDevelopmentEnvironmentInjectable = getInjectable({ id: "setup-developer-tools-in-development-environment", - instantiate: (di) => { - const logger = di.inject(loggerInjectable); - const nodeEnv = di.inject(nodeEnvInjectionToken); + instantiate: (di) => ({ + run: () => { + const logger = di.inject(loggerInjectable); + const nodeEnv = di.inject(nodeEnvInjectionToken); - return { - id: "setup-developer-tools-in-development-environment", - run: () => { - if (nodeEnv !== "development") { - return; + if (nodeEnv !== "development") { + return; + } + + logger.info("🤓 Installing developer tools"); + + void (async () => { + try { + const { + default: devToolsInstaller, + REACT_DEVELOPER_TOOLS, + } = await import("electron-devtools-installer"); + + const name = await devToolsInstaller([REACT_DEVELOPER_TOOLS]); + + logger.info(`[DEVTOOLS-INSTALLER]: installed ${name}`); + } catch (error) { + logger.error(`[DEVTOOLS-INSTALLER]: failed`, { error }); } - - logger.info("🤓 Installing developer tools"); - - import("electron-devtools-installer") - .then(({ default: devToolsInstaller, REACT_DEVELOPER_TOOLS }) => - devToolsInstaller([REACT_DEVELOPER_TOOLS]), - ) - .then((name) => - logger.info(`[DEVTOOLS-INSTALLER]: installed ${name}`), - ) - .catch((error) => - logger.error(`[DEVTOOLS-INSTALLER]: failed`, { error }), - ); - }, - }; - }, + })(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts index 2c907909af..c1ddeae175 100644 --- a/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts @@ -10,19 +10,14 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupDeviceShutdownInjectable = getInjectable({ id: "setup-device-shutdown", - instantiate: (di) => { - const powerMonitor = di.inject(powerMonitorInjectable); - const exitApp = di.inject(exitAppInjectable); + instantiate: (di) => ({ + run: () => { + const powerMonitor = di.inject(powerMonitorInjectable); + const exitApp = di.inject(exitAppInjectable); - return { - id: "setup-device-shutdown", - run: () => { - powerMonitor.on("shutdown", async () => { - exitApp(); - }); - }, - }; - }, + powerMonitor.on("shutdown", exitApp); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts index 903389a018..932e80c61f 100644 --- a/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts @@ -16,30 +16,27 @@ import clusterConnectionInjectable from "../../../cluster/cluster-connection.inj const setupIpcMainHandlersInjectable = getInjectable({ id: "setup-ipc-main-handlers", - instantiate: (di) => { - const logger = di.inject(loggerInjectable); - const applicationMenuItemComposite = di.inject(applicationMenuItemCompositeInjectable); - const pushCatalogToRenderer = di.inject(pushCatalogToRendererInjectable); - const clusterStore = di.inject(clusterStoreInjectable); - const emitAppEvent = di.inject(emitAppEventInjectable); - const getClusterById = di.inject(getClusterByIdInjectable); + instantiate: (di) => ({ + run: () => { + const logger = di.inject(loggerInjectable); + const applicationMenuItemComposite = di.inject(applicationMenuItemCompositeInjectable); + const pushCatalogToRenderer = di.inject(pushCatalogToRendererInjectable); + const clusterStore = di.inject(clusterStoreInjectable); + const emitAppEvent = di.inject(emitAppEventInjectable); + const getClusterById = di.inject(getClusterByIdInjectable); - return { - id: "setup-ipc-main-handlers", - run: () => { - logger.debug("[APP-MAIN] initializing ipc main handlers"); + logger.debug("[APP-MAIN] initializing ipc main handlers"); - setupIpcMainHandlers({ - applicationMenuItemComposite, - pushCatalogToRenderer, - clusterStore, - emitAppEvent, - getClusterById, - getClusterConnection: (cluster) => di.inject(clusterConnectionInjectable, cluster), - }); - }, - }; - }, + setupIpcMainHandlers({ + applicationMenuItemComposite, + pushCatalogToRenderer, + clusterStore, + emitAppEvent, + getClusterById, + getClusterConnection: (cluster) => di.inject(clusterConnectionInjectable, cluster), + }); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, causesSideEffects: true, diff --git a/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts index 49c2293397..4752599dcc 100644 --- a/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts @@ -11,24 +11,21 @@ import showApplicationWindowInjectable from "../../start-main-application/lens-w const setupMainWindowVisibilityAfterActivationInjectable = getInjectable({ id: "setup-main-window-visibility-after-activation", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); - const showApplicationWindow = di.inject(showApplicationWindowInjectable); - const logger = di.inject(loggerInjectable); + instantiate: (di) => ({ + run: () => { + const app = di.inject(electronAppInjectable); + const showApplicationWindow = di.inject(showApplicationWindowInjectable); + const logger = di.inject(loggerInjectable); - return { - id: "setup-main-window-visibility-after-activation", - run: () => { - app.on("activate", async (_, windowIsVisible) => { - logger.info("APP:ACTIVATE", { hasVisibleWindows: windowIsVisible }); + app.on("activate", (_, windowIsVisible) => { + logger.info("APP:ACTIVATE", { hasVisibleWindows: windowIsVisible }); - if (!windowIsVisible) { - await showApplicationWindow(); - } - }); - }, - }; - }, + if (!windowIsVisible) { + void showApplicationWindow(); + } + }); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts index 1131efad95..5370c0e303 100644 --- a/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts @@ -4,28 +4,25 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; +import { afterWindowIsOpenedInjectionToken } from "../../start-main-application/runnable-tokens/phases"; import electronAppInjectable from "../electron-app.injectable"; -import { runManyFor } from "../../../common/runnable/run-many-for"; -import { afterWindowIsOpenedInjectionToken } from "../../start-main-application/runnable-tokens/after-window-is-opened-injection-token"; +import { runManyFor } from "@k8slens/run-many"; const setupRunnablesAfterWindowIsOpenedInjectable = getInjectable({ id: "setup-runnables-after-window-is-opened", - instantiate: (di) => { - const afterWindowIsOpened = runManyFor(di)(afterWindowIsOpenedInjectionToken); - const app = di.inject(electronAppInjectable); + instantiate: (di) => ({ + run: () => { + const afterWindowIsOpened = runManyFor(di)(afterWindowIsOpenedInjectionToken); + const app = di.inject(electronAppInjectable); - return { - id: "setup-runnables-after-window-is-opened", - run: () => { - app.on("browser-window-created", () => { - afterWindowIsOpened(); - }); + app.on("browser-window-created", () => { + afterWindowIsOpened(); + }); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts index 4090f3f9c6..0ba1b68137 100644 --- a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts @@ -4,50 +4,45 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; -import { beforeQuitOfFrontEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-front-end-injection-token"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken, beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; import electronAppInjectable from "../electron-app.injectable"; import isIntegrationTestingInjectable from "../../../common/vars/is-integration-testing.injectable"; import autoUpdaterInjectable from "../features/auto-updater.injectable"; -import { runManySyncFor } from "../../../common/runnable/run-many-sync-for"; +import { runManySyncFor } from "@k8slens/run-many"; const setupRunnablesBeforeClosingOfApplicationInjectable = getInjectable({ id: "setup-closing-of-application", - instantiate: (di) => { - const runManySync = runManySyncFor(di); - const runRunnablesBeforeQuitOfFrontEnd = runManySync(beforeQuitOfFrontEndInjectionToken); - const runRunnablesBeforeQuitOfBackEnd = runManySync(beforeQuitOfBackEndInjectionToken); - const app = di.inject(electronAppInjectable); - const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); - const autoUpdater = di.inject(autoUpdaterInjectable); + instantiate: (di) => ({ + run: () => { + const runManySync = runManySyncFor(di); + const runRunnablesBeforeQuitOfFrontEnd = runManySync(beforeQuitOfFrontEndInjectionToken); + const runRunnablesBeforeQuitOfBackEnd = runManySync(beforeQuitOfBackEndInjectionToken); + const app = di.inject(electronAppInjectable); + const isIntegrationTesting = di.inject(isIntegrationTestingInjectable); + const autoUpdater = di.inject(autoUpdaterInjectable); + let isAutoUpdating = false; - return { - id: "setup-closing-of-application", - run: () => { - let isAutoUpdating = false; + autoUpdater.on("before-quit-for-update", () => { + isAutoUpdating = true; + }); - autoUpdater.on("before-quit-for-update", () => { - isAutoUpdating = true; - }); + app.on("will-quit", (event) => { + runRunnablesBeforeQuitOfFrontEnd(); - app.on("will-quit", (event) => { - runRunnablesBeforeQuitOfFrontEnd(); + const shouldQuitBackEnd = isIntegrationTesting || isAutoUpdating; - const shouldQuitBackEnd = isIntegrationTesting || isAutoUpdating; + if (shouldQuitBackEnd) { + runRunnablesBeforeQuitOfBackEnd(); + } else { + // IMPORTANT: This cannot be destructured as it would break binding of "this" for the Electron event + event.preventDefault(); + } + }); - if (shouldQuitBackEnd) { - runRunnablesBeforeQuitOfBackEnd(); - } else { - // IMPORTANT: This cannot be destructured as it would break binding of "this" for the Electron event - event.preventDefault(); - } - }); - - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/get-metrics.injectable.ts b/packages/core/src/main/get-metrics.injectable.ts index 3731435f6b..9a9141cb9b 100644 --- a/packages/core/src/main/get-metrics.injectable.ts +++ b/packages/core/src/main/get-metrics.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../common/cluster/cluster"; import { FormData } from "@k8slens/node-fetch"; import type { RequestMetricsParams } from "../common/k8s-api/endpoints/metrics.api/request-metrics.injectable"; -import { object } from "../common/utils"; +import { object } from "@k8slens/utilities"; import k8sRequestInjectable from "./k8s-request.injectable"; export type GetMetrics = (cluster: Cluster, prometheusPath: string, queryParams: RequestMetricsParams & { query: string }) => Promise; diff --git a/packages/core/src/main/getDiForUnitTesting.ts b/packages/core/src/main/getDiForUnitTesting.ts index 9720dcfda3..c4dd2a0d52 100644 --- a/packages/core/src/main/getDiForUnitTesting.ts +++ b/packages/core/src/main/getDiForUnitTesting.ts @@ -26,7 +26,7 @@ import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-qui import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable"; import electronInjectable from "./utils/resolve-system-proxy/electron.injectable"; import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable"; -import type { GlobalOverride } from "../common/test-utils/get-global-override"; +import type { GlobalOverride } from "@k8slens/test-utils"; import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes"; import { setLegacyGlobalDiForExtensionApi, @@ -53,7 +53,7 @@ export function getDiForUnitTesting() { }); for (const globalOverridePath of global.injectablePaths.main.globalOverridePaths) { - const globalOverride = require(globalOverridePath).default as GlobalOverride; + const globalOverride = require(globalOverridePath).default as GlobalOverride; di.override(globalOverride.injectable, globalOverride.overridingInstantiate); } diff --git a/packages/core/src/main/helm/__tests__/helm-service.test.ts b/packages/core/src/main/helm/__tests__/helm-service.test.ts index 7c9a5a9d02..7740533570 100644 --- a/packages/core/src/main/helm/__tests__/helm-service.test.ts +++ b/packages/core/src/main/helm/__tests__/helm-service.test.ts @@ -6,14 +6,14 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import listHelmChartsInjectable from "../helm-service/list-helm-charts.injectable"; import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { HelmRepo } from "../../../common/helm/helm-repo"; -import { sortBySemverVersion } from "../../../common/utils"; +import { sortBySemverVersion } from "@k8slens/utilities"; import helmChartManagerInjectable from "../helm-chart-manager.injectable"; describe("Helm Service tests", () => { let listHelmCharts: () => Promise; - let getActiveHelmRepositoriesMock: jest.Mock>>; + let getActiveHelmRepositoriesMock: jest.Mock>; beforeEach(() => { const di = getDiForUnitTesting(); diff --git a/packages/core/src/main/helm/exec-helm/exec-env.global-override-for-injectable.ts b/packages/core/src/main/helm/exec-helm/exec-env.global-override-for-injectable.ts index 59c376cffd..f44e92d394 100644 --- a/packages/core/src/main/helm/exec-helm/exec-env.global-override-for-injectable.ts +++ b/packages/core/src/main/helm/exec-helm/exec-env.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import { computed } from "mobx"; -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import execHelmEnvInjectable from "./exec-env.injectable"; export default getGlobalOverride(execHelmEnvInjectable, () => computed(() => ({}))); diff --git a/packages/core/src/main/helm/exec-helm/exec-helm.injectable.ts b/packages/core/src/main/helm/exec-helm/exec-helm.injectable.ts index 034ab43248..5fc610f97f 100644 --- a/packages/core/src/main/helm/exec-helm/exec-helm.injectable.ts +++ b/packages/core/src/main/helm/exec-helm/exec-helm.injectable.ts @@ -5,11 +5,11 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ExecFileException } from "child_process"; import execFileInjectable from "../../../common/fs/exec-file.injectable"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import helmBinaryPathInjectable from "../helm-binary-path.injectable"; import execHelmEnvInjectable from "./exec-env.injectable"; -export type ExecHelm = (args: string[]) => Promise>; +export type ExecHelm = (args: string[]) => AsyncResult; const execHelmInjectable = getInjectable({ id: "exec-helm", diff --git a/packages/core/src/main/helm/get-helm-env/get-helm-env.injectable.ts b/packages/core/src/main/helm/get-helm-env/get-helm-env.injectable.ts index bb74c53f99..e3a9969ffc 100644 --- a/packages/core/src/main/helm/get-helm-env/get-helm-env.injectable.ts +++ b/packages/core/src/main/helm/get-helm-env/get-helm-env.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import execHelmInjectable from "../exec-helm/exec-helm.injectable"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export type HelmEnv = Record & { HELM_REPOSITORY_CACHE?: string; @@ -17,7 +17,7 @@ const getHelmEnvInjectable = getInjectable({ instantiate: (di) => { const execHelm = di.inject(execHelmInjectable); - return async (): Promise> => { + return async (): AsyncResult => { const result = await execHelm(["env"]); if (!result.callWasSuccessful) { diff --git a/packages/core/src/main/helm/helm-chart-manager.ts b/packages/core/src/main/helm/helm-chart-manager.ts index cccf40cbc6..6419e5fc92 100644 --- a/packages/core/src/main/helm/helm-chart-manager.ts +++ b/packages/core/src/main/helm/helm-chart-manager.ts @@ -4,7 +4,7 @@ */ import * as yaml from "js-yaml"; -import { iter, put, sortBySemverVersion } from "../../common/utils"; +import { iter, put, sortBySemverVersion } from "@k8slens/utilities"; import type { HelmRepo } from "../../common/helm/helm-repo"; import type { HelmChartManagerCache } from "./helm-chart-manager-cache.injectable"; import type { Logger } from "../../common/logger"; diff --git a/packages/core/src/main/helm/helm-service/get-helm-chart-readme.global-override-for-injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-chart-readme.global-override-for-injectable.ts index 6d2c016251..5368a51953 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-chart-readme.global-override-for-injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-chart-readme.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getHelmChartReadmeInjectable from "./get-helm-chart-readme.injectable"; export default getGlobalOverride(getHelmChartReadmeInjectable, () => () => { diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts index b5176b25b9..75115b4c27 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import execHelmInjectable from "../../../exec-helm/exec-helm.injectable"; import yaml from "js-yaml"; import type { KubeJsonApiData, KubeJsonApiDataList } from "../../../../../common/k8s-api/kube-json-api"; @@ -18,7 +18,7 @@ const callForHelmManifestInjectable = getInjectable({ name: string, namespace: string, kubeconfigPath: string, - ): Promise> => { + ): AsyncResult<(KubeJsonApiData | KubeJsonApiDataList)[]> => { const result = await execHelm([ "get", "manifest", diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts index 71a38abf6b..637a4788a8 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts @@ -4,7 +4,6 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { JsonObject } from "type-fest"; -import { json } from "../../../../../common/utils"; import yaml from "js-yaml"; import execFileWithInputInjectable from "./exec-file-with-input/exec-file-with-input.injectable"; import { getErrorMessage } from "../../../../../common/utils/get-error-message"; @@ -60,7 +59,7 @@ const callForKubeResourcesByManifestInjectable = getInjectable({ throw new Error(errorMessage); } - const output = json.parse(result.response) as { items: JsonObject[] }; + const output = JSON.parse(result.response) as { items: JsonObject[] }; return output.items; }; diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.global-override-for-injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.global-override-for-injectable.ts index 70b4771468..a359147036 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.global-override-for-injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import execFileWithInputInjectable from "./exec-file-with-input.injectable"; export default getGlobalOverride(execFileWithInputInjectable, () => () => { diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts index 49a1c644f2..031c95cdb6 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts @@ -3,9 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import nonPromiseExecFileInjectable from "./non-promise-exec-file.injectable"; -import { isNumber } from "../../../../../../common/utils"; +import { isNumber } from "@k8slens/utilities"; import assert from "assert"; import type { ChildProcess } from "child_process"; @@ -13,7 +13,7 @@ export type ExecFileWithInput = (options: { filePath: string; commandArguments: string[]; input: string; -}) => Promise>; +}) => AsyncResult; const execFileWithInputInjectable = getInjectable({ id: "exec-file-with-input", diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.test.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.test.ts index 68a49c0cf6..d7b08d7a2f 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.test.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.test.ts @@ -5,9 +5,9 @@ import { getDiForUnitTesting } from "../../../../../getDiForUnitTesting"; import type { ExecFileWithInput } from "./exec-file-with-input.injectable"; import execFileWithInputInjectable from "./exec-file-with-input.injectable"; -import type { AsyncResult } from "../../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import nonPromiseExecFileInjectable from "./non-promise-exec-file.injectable"; -import { getPromiseStatus } from "../../../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import EventEmitter from "events"; describe("exec-file-with-input", () => { @@ -56,7 +56,7 @@ describe("exec-file-with-input", () => { }); describe("when called", () => { - let actualPromise: Promise>; + let actualPromise: AsyncResult; beforeEach(() => { actualPromise = execFileWithInput({ diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.injectable.ts index ce5c60d6b3..cef66508be 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.injectable.ts @@ -5,13 +5,13 @@ import { getInjectable } from "@ogre-tools/injectable"; import callForHelmManifestInjectable from "./call-for-helm-manifest/call-for-helm-manifest.injectable"; import type { KubeJsonApiData, KubeJsonApiDataList } from "../../../../common/k8s-api/kube-json-api"; -import type { AsyncResult } from "../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export type GetHelmReleaseResources = ( name: string, namespace: string, kubeconfigPath: string, -) => Promise>; +) => AsyncResult; const getHelmReleaseResourcesInjectable = getInjectable({ id: "get-helm-release-resources", diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.test.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.test.ts index cb1abe7f11..7f2f194a75 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.test.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/get-helm-release-resources.test.ts @@ -12,7 +12,7 @@ import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import type { ExecFileWithInput } from "./call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable"; import execFileWithInputInjectable from "./call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable"; -import type { AsyncResult } from "../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { KubeJsonApiData } from "../../../../common/k8s-api/kube-json-api"; describe("get helm release resources", () => { @@ -37,7 +37,7 @@ describe("get helm release resources", () => { }); describe("when called", () => { - let actualPromise: Promise>; + let actualPromise: AsyncResult; beforeEach(() => { actualPromise = getHelmReleaseResources( diff --git a/packages/core/src/main/helm/helm-service/get-helm-release.global-override-for-injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release.global-override-for-injectable.ts index 0d124468f2..d2ae62843f 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release.global-override-for-injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import getHelmReleaseInjectable from "./get-helm-release.injectable"; export default getGlobalOverride(getHelmReleaseInjectable, () => () => { diff --git a/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts index 6dfed7c6b7..8a9144999f 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts @@ -5,8 +5,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import loggerInjectable from "../../../common/logger.injectable"; -import { isObject, json } from "../../../common/utils"; import kubeconfigManagerInjectable from "../../kubeconfig-manager/kubeconfig-manager.injectable"; +import { isObject, json } from "@k8slens/utilities"; import execHelmInjectable from "../exec-helm/exec-helm.injectable"; import getHelmReleaseResourcesInjectable from "./get-helm-release-resources/get-helm-release-resources.injectable"; diff --git a/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts b/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts index 93a57e7aff..53918baef1 100644 --- a/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts +++ b/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { object } from "../../../common/utils"; +import { object } from "@k8slens/utilities"; import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; import type { HelmRepo } from "../../../common/helm/helm-repo"; import helmChartManagerInjectable from "../helm-chart-manager.injectable"; diff --git a/packages/core/src/main/helm/helm-service/update-helm-release.global-override-for-injectable.ts b/packages/core/src/main/helm/helm-service/update-helm-release.global-override-for-injectable.ts index dc2d8b596f..1d04e393a8 100644 --- a/packages/core/src/main/helm/helm-service/update-helm-release.global-override-for-injectable.ts +++ b/packages/core/src/main/helm/helm-service/update-helm-release.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import updateHelmReleaseInjectable from "./update-helm-release.injectable"; export default getGlobalOverride(updateHelmReleaseInjectable, () => () => { diff --git a/packages/core/src/main/helm/list-helm-releases.injectable.ts b/packages/core/src/main/helm/list-helm-releases.injectable.ts index ff362eb3d2..f12cd2ffd2 100644 --- a/packages/core/src/main/helm/list-helm-releases.injectable.ts +++ b/packages/core/src/main/helm/list-helm-releases.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import execHelmInjectable from "./exec-helm/exec-helm.injectable"; -import { isObject, json, toCamelCase } from "../../common/utils"; +import { toCamelCase, isObject } from "@k8slens/utilities"; export type ListHelmReleases = (pathToKubeconfig: string, namespace?: string) => Promise[]>; @@ -34,7 +34,7 @@ const listHelmReleasesInjectable = getInjectable({ throw result.error; } - const output = json.parse(result.response); + const output = JSON.parse(result.response); if (!Array.isArray(output) || output.length == 0) { return []; diff --git a/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts b/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts index bd05b950d7..fe0690b59d 100644 --- a/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts +++ b/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts @@ -9,7 +9,7 @@ import readYamlFileInjectable from "../../../../common/fs/read-yaml-file.injecta import getHelmEnvInjectable from "../../get-helm-env/get-helm-env.injectable"; import execHelmInjectable from "../../exec-helm/exec-helm.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; -import type { AsyncResult } from "../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; interface HelmRepositoryFromYaml { name: string; @@ -38,7 +38,7 @@ const getActiveHelmRepositoriesInjectable = getInjectable({ const getRepositories = getRepositoriesFor(readYamlFile); - return async (): Promise> => { + return async (): AsyncResult => { const envResult = await getHelmEnv(); if (!envResult.callWasSuccessful) { diff --git a/packages/core/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts b/packages/core/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts index a662603a96..a7811c006d 100644 --- a/packages/core/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts +++ b/packages/core/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import execHelmInjectable from "../../exec-helm/exec-helm.injectable"; import type { HelmRepo } from "../../../../common/helm/helm-repo"; import loggerInjectable from "../../../../common/logger.injectable"; -import type { AsyncResult } from "../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; const removeHelmRepositoryInjectable = getInjectable({ id: "remove-helm-repository", @@ -15,7 +15,7 @@ const removeHelmRepositoryInjectable = getInjectable({ const execHelm = di.inject(execHelmInjectable); const logger = di.inject(loggerInjectable); - return async (repo: HelmRepo): Promise> => { + return async (repo: HelmRepo): AsyncResult => { logger.info(`[HELM]: removing repo ${repo.name} (${repo.url})`); const result = await execHelm([ diff --git a/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts b/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts index a331ebf106..b327085aa6 100644 --- a/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts +++ b/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts @@ -9,7 +9,7 @@ import { defaultHotbarCells, getEmptyHotbar } from "../../../common/hotbars/type import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import catalogCatalogEntityInjectable from "../../../common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable"; -import { isDefined, isErrnoException } from "../../../common/utils"; +import { isDefined, isErrnoException } from "@k8slens/utilities"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import { getInjectable } from "@ogre-tools/injectable"; import { hotbarStoreMigrationInjectionToken } from "../../../common/hotbars/migrations-token"; diff --git a/packages/core/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.global-override-for-injectable.ts b/packages/core/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.global-override-for-injectable.ts index 86f1e374cd..d360d62666 100644 --- a/packages/core/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.global-override-for-injectable.ts +++ b/packages/core/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import waitUntilPortIsUsedInjectable from "./wait-until-port-is-used.injectable"; export default getGlobalOverride( diff --git a/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts b/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts index 8860ffd3c1..9d28306bbf 100644 --- a/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts +++ b/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts @@ -5,7 +5,7 @@ import type { KubeConfig } from "@kubernetes/client-node"; import { dumpConfigYaml } from "../../common/kube-helpers"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import type { PartialDeep } from "type-fest"; import type { Logger } from "../../common/logger"; import type { JoinPaths } from "../../common/path/join-paths.injectable"; diff --git a/packages/core/src/main/kubectl/create-kubectl.injectable.ts b/packages/core/src/main/kubectl/create-kubectl.injectable.ts index c3df378e13..5d7b19162c 100644 --- a/packages/core/src/main/kubectl/create-kubectl.injectable.ts +++ b/packages/core/src/main/kubectl/create-kubectl.injectable.ts @@ -18,6 +18,8 @@ import getDirnameOfPathInjectable from "../../common/path/get-dirname.injectable import joinPathsInjectable from "../../common/path/join-paths.injectable"; import getBasenameOfPathInjectable from "../../common/path/get-basename.injectable"; import loggerInjectable from "../../common/logger.injectable"; +import execFileInjectable from "../../common/fs/exec-file.injectable"; +import unlinkInjectable from "../../common/fs/unlink.injectable"; export type CreateKubectl = (version: string) => Kubectl; @@ -39,6 +41,8 @@ const createKubectlInjectable = getInjectable({ getDirnameOfPath: di.inject(getDirnameOfPathInjectable), joinPaths: di.inject(joinPathsInjectable), getBasenameOfPath: di.inject(getBasenameOfPathInjectable), + execFile: di.inject(execFileInjectable), + unlink: di.inject(unlinkInjectable), }; return (version) => new Kubectl(dependencies, version); diff --git a/packages/core/src/main/kubectl/kubectl.ts b/packages/core/src/main/kubectl/kubectl.ts index 15773a2ef7..ca0fac16e2 100644 --- a/packages/core/src/main/kubectl/kubectl.ts +++ b/packages/core/src/main/kubectl/kubectl.ts @@ -4,7 +4,6 @@ */ import fs from "fs"; -import { promiseExecFile } from "../../common/utils/promise-exec"; import { ensureDir, pathExists } from "fs-extra"; import * as lockFile from "proper-lockfile"; import { SemVer, coerce } from "semver"; @@ -18,6 +17,9 @@ import type { GetDirnameOfPath } from "../../common/path/get-dirname.injectable" import type { GetBasenameOfPath } from "../../common/path/get-basename.injectable"; import type { NormalizedPlatform } from "../../common/vars/normalized-platform.injectable"; import type { Logger } from "../../common/logger"; +import type { ExecFile } from "../../common/fs/exec-file.injectable"; +import { hasTypedProperty, isObject, isString, json } from "@k8slens/utilities"; +import type { Unlink } from "../../common/fs/unlink.injectable"; const initScriptVersionString = "# lens-initscript v3"; @@ -40,6 +42,8 @@ export interface KubectlDependencies { joinPaths: JoinPaths; getDirnameOfPath: GetDirnameOfPath; getBasenameOfPath: GetBasenameOfPath; + execFile: ExecFile; + unlink: Unlink; } export class Kubectl { @@ -145,38 +149,64 @@ export class Kubectl { public async checkBinary(path: string, checkVersion = true) { const exists = await pathExists(path); - if (exists) { - try { - const args = [ - "version", - "--client", - "--output", "json", - ]; - const { stdout } = await promiseExecFile(path, args); - const output = JSON.parse(stdout); - - if (!checkVersion) { - return true; - } - let version: string = output.clientVersion.gitVersion; - - if (version[0] === "v") { - version = version.slice(1); - } - - if (version === this.kubectlVersion) { - this.dependencies.logger.debug(`Local kubectl is version ${this.kubectlVersion}`); - - return true; - } - this.dependencies.logger.error(`Local kubectl is version ${version}, expected ${this.kubectlVersion}, unlinking`); - } catch (error) { - this.dependencies.logger.error(`Local kubectl failed to run properly (${error}), unlinking`); - } - await fs.promises.unlink(this.path); + if (!exists) { + return false; } - return false; + const args = [ + "version", + "--client", + "--output", "json", + ]; + const execResult = await this.dependencies.execFile(path, args); + + if (!execResult.callWasSuccessful) { + this.dependencies.logger.error(`Local kubectl failed to run properly (${execResult.error}), unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + const parseResult = json.parse(execResult.response); + + if (!parseResult.callWasSuccessful) { + this.dependencies.logger.error(`Local kubectl failed to run properly (${parseResult.error}), unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + if (!checkVersion) { + return true; + } + + const { response: output } = parseResult; + + if ( + !isObject(output) + || !hasTypedProperty(output, "clientVersion", isObject) + || !hasTypedProperty(output.clientVersion, "gitVersion", isString) + ) { + this.dependencies.logger.error(`Local kubectl failed to return correct shaped response, unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + const version = output.clientVersion.gitVersion; + + switch (output.clientVersion.gitVersion) { + case this.kubectlVersion: + case `v${this.kubectlVersion}`: + this.dependencies.logger.debug(`Local kubectl is version ${this.kubectlVersion}`); + + return true; + default: + this.dependencies.logger.error(`Local kubectl is version ${version}, expected ${this.kubectlVersion}, unlinking`); + await this.dependencies.unlink(this.path); + + return false; + } } protected async checkBundled(): Promise { @@ -266,7 +296,7 @@ export class Kubectl { await fs.promises.chmod(this.path, 0o755); this.dependencies.logger.debug("kubectl binary download finished"); } catch (error) { - await fs.promises.unlink(this.path).catch(noop); + await this.dependencies.unlink(this.path).catch(noop); throw error; } } diff --git a/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts b/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts index ab5e46eb77..91d4161164 100644 --- a/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts +++ b/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getOrInsertMap } from "../../../../common/utils"; +import { getOrInsertMap } from "@k8slens/utilities"; import type { ClusterId } from "../../../../common/cluster-types"; import { ipcMainHandle } from "../../../../common/ipc"; import crypto from "crypto"; diff --git a/packages/core/src/main/library.ts b/packages/core/src/main/library.ts index cb396cf448..cf651cb091 100644 --- a/packages/core/src/main/library.ts +++ b/packages/core/src/main/library.ts @@ -4,12 +4,10 @@ */ // @experimental -export type { - Environments, -} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; - +export type { Environments } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; export { registerLensCore } from "./register-lens-core"; export { nodeEnvInjectionToken } from "../common/vars/node-env-injection-token"; + export * as Mobx from "mobx"; export * as mainExtensionApi from "../extensions/main-api"; export * as commonExtensionApi from "../extensions/common-api"; diff --git a/packages/core/src/main/logger/level.global-override-for-injectable.ts b/packages/core/src/main/logger/level.global-override-for-injectable.ts index ac29c9ee1a..fe280b1d31 100644 --- a/packages/core/src/main/logger/level.global-override-for-injectable.ts +++ b/packages/core/src/main/logger/level.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import logLevelInjectable from "./level.injectable"; export default getGlobalOverride(logLevelInjectable, () => "error"); diff --git a/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts b/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts index e097bf1569..6615d976f1 100644 --- a/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts +++ b/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { navigateToUrlInjectionToken } from "../../common/front-end-routing/navigate-to-url-injection-token"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; -import { buildURL } from "../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; const navigateToRouteInjectable = getInjectable({ id: "navigate-to-route", diff --git a/packages/core/src/main/prometheus/provider.ts b/packages/core/src/main/prometheus/provider.ts index 8944c4c0ed..5bd9588a06 100644 --- a/packages/core/src/main/prometheus/provider.ts +++ b/packages/core/src/main/prometheus/provider.ts @@ -5,7 +5,7 @@ import type { CoreV1Api } from "@kubernetes/client-node"; import { getInjectionToken } from "@ogre-tools/injectable"; -import { isRequestError } from "../../common/utils"; +import { isRequestError } from "@k8slens/utilities"; export interface PrometheusService extends PrometheusServiceInfo { kind: string; diff --git a/packages/core/src/main/protocol-handler/__test__/router.test.ts b/packages/core/src/main/protocol-handler/__test__/router.test.ts index beb40116ed..7919e3f596 100644 --- a/packages/core/src/main/protocol-handler/__test__/router.test.ts +++ b/packages/core/src/main/protocol-handler/__test__/router.test.ts @@ -6,7 +6,7 @@ import * as uuid from "uuid"; import { ProtocolHandlerExtension, ProtocolHandlerInternal, ProtocolHandlerInvalid } from "../../../common/protocol-handler"; -import { delay, noop } from "../../../common/utils"; +import { delay, noop } from "@k8slens/utilities"; import type { ExtensionsStore, IsEnabledExtensionDescriptor } from "../../../extensions/extensions-store/extensions-store"; import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; diff --git a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts index 3beb596e4e..fb0ad71892 100644 --- a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts +++ b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts @@ -9,7 +9,7 @@ import type { LensExtension } from "../../../extensions/lens-extension"; import { observable, when, makeObservable } from "mobx"; import type { LensProtocolRouterDependencies, RouteAttempt } from "../../../common/protocol-handler"; import { ProtocolHandlerInvalid } from "../../../common/protocol-handler"; -import { disposer, noop } from "../../../common/utils"; +import { disposer, noop } from "@k8slens/utilities"; import type { BroadcastMessage } from "../../../common/ipc/broadcast-message.injectable"; export interface FallbackHandler { diff --git a/packages/core/src/main/resource-applier/resource-applier.ts b/packages/core/src/main/resource-applier/resource-applier.ts index 1015f204d2..6df02debc8 100644 --- a/packages/core/src/main/resource-applier/resource-applier.ts +++ b/packages/core/src/main/resource-applier/resource-applier.ts @@ -14,9 +14,9 @@ import type { WriteFile } from "../../common/fs/write-file.injectable"; import type { RemovePath } from "../../common/fs/remove.injectable"; import type { ExecFile } from "../../common/fs/exec-file.injectable"; import type { JoinPaths } from "../../common/path/join-paths.injectable"; -import type { AsyncResult } from "../../common/utils/async-result"; import type { CreateKubectl } from "../kubectl/create-kubectl.injectable"; import type { KubeconfigManager } from "../kubeconfig-manager/kubeconfig-manager"; +import type { AsyncResult } from "@k8slens/utilities"; export interface ResourceApplierDependencies { emitAppEvent: EmitAppEvent; @@ -81,13 +81,13 @@ export class ResourceApplier { throw result.error.stderr || result.error.message; } - async create(resource: string): Promise> { + async create(resource: string): AsyncResult { this.dependencies.emitAppEvent({ name: "resource", action: "apply" }); return this.kubectlApply(this.sanitizeObject(resource)); } - protected async kubectlApply(content: string): Promise> { + protected async kubectlApply(content: string): AsyncResult { const kubectlPath = await this.getKubectlPath(); const proxyKubeconfigPath = await this.dependencies.proxyKubeconfigManager.ensurePath(); const fileName = tempy.file({ name: "resource.yaml" }); @@ -125,15 +125,15 @@ export class ResourceApplier { } } - public async kubectlApplyAll(resources: string[], extraArgs = ["-o", "json"]): Promise> { + public async kubectlApplyAll(resources: string[], extraArgs = ["-o", "json"]): AsyncResult { return this.kubectlCmdAll("apply", resources, extraArgs); } - public async kubectlDeleteAll(resources: string[], extraArgs?: string[]): Promise> { + public async kubectlDeleteAll(resources: string[], extraArgs?: string[]): AsyncResult { return this.kubectlCmdAll("delete", resources, extraArgs); } - protected async kubectlCmdAll(subCmd: string, resources: string[], parentArgs: string[] = []): Promise> { + protected async kubectlCmdAll(subCmd: string, resources: string[], parentArgs: string[] = []): AsyncResult { const kubectlPath = await this.getKubectlPath(); const proxyKubeconfigPath = await this.dependencies.proxyKubeconfigManager.ensurePath(); const tmpDir = tempy.directory(); diff --git a/packages/core/src/main/router/create-handler-for-route.injectable.ts b/packages/core/src/main/router/create-handler-for-route.injectable.ts index 60f62fd282..d007172294 100644 --- a/packages/core/src/main/router/create-handler-for-route.injectable.ts +++ b/packages/core/src/main/router/create-handler-for-route.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ServerResponse } from "http"; import loggerInjectable from "../../common/logger.injectable"; -import { object } from "../../common/utils"; +import { object } from "@k8slens/utilities"; import type { LensApiRequest, Route } from "./route"; import { contentTypes } from "./router-content-types"; diff --git a/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts b/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts index 22e36da8d4..fe3d2b01fa 100644 --- a/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts +++ b/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts @@ -10,7 +10,7 @@ import { ClusterMetadataKey } from "../../../common/cluster-types"; import type { Cluster } from "../../../common/cluster/cluster"; import { clusterRoute } from "../../router/route"; import { isObject } from "lodash"; -import { isRequestError, object } from "../../../common/utils"; +import { isRequestError, object } from "@k8slens/utilities"; import type { GetMetrics } from "../../get-metrics.injectable"; import getMetricsInjectable from "../../get-metrics.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts b/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts index 559dbcf645..908ee8bd30 100644 --- a/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts +++ b/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import type { ClusterId } from "../../../common/cluster-types"; -import { isDefined } from "../../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import mainExtensionsInjectable from "../../../extensions/main-extensions.injectable"; import catalogEntityRegistryInjectable from "../../catalog/entity-registry.injectable"; diff --git a/packages/core/src/main/shell-session/shell-session.ts b/packages/core/src/main/shell-session/shell-session.ts index d4dc3efac7..ae1434287a 100644 --- a/packages/core/src/main/shell-session/shell-session.ts +++ b/packages/core/src/main/shell-session/shell-session.ts @@ -10,7 +10,7 @@ import { clearKubeconfigEnvVars } from "../utils/clear-kube-env-vars"; import path from "path"; import os from "os"; import type * as pty from "node-pty"; -import { getOrInsertWith } from "../../common/utils"; +import { getOrInsertWith } from "@k8slens/utilities"; import { type TerminalMessage, TerminalChannels } from "../../common/terminal/channels"; import type { Logger } from "../../common/logger"; import type { ComputeShellEnvironment } from "../../features/shell-sync/main/compute-shell-environment.injectable"; diff --git a/packages/core/src/main/shell-session/spawn-pty.global-override-for-injectable.ts b/packages/core/src/main/shell-session/spawn-pty.global-override-for-injectable.ts index 239f7c5e47..e382981bc7 100644 --- a/packages/core/src/main/shell-session/spawn-pty.global-override-for-injectable.ts +++ b/packages/core/src/main/shell-session/spawn-pty.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import spawnPtyInjectable from "./spawn-pty.injectable"; export default getGlobalOverride(spawnPtyInjectable, () => () => { diff --git a/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.global-override-for-injectable.ts b/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.global-override-for-injectable.ts index ef33b43c8e..6a1469bec2 100644 --- a/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.global-override-for-injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import createElectronWindowInjectable from "./create-electron-window.injectable"; export default getGlobalOverride(createElectronWindowInjectable, () => () => ({ diff --git a/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts b/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts index 4046db5d9d..b08ae197d4 100644 --- a/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; import { bundledExtensionsLoaded } from "../../../../common/ipc/extension-handling"; -import { delay } from "../../../../common/utils"; +import { delay } from "@k8slens/utilities"; const waitUntilBundledExtensionsAreLoadedInjectable = getInjectable({ id: "wait-until-bundled-extensions-are-loaded", diff --git a/packages/core/src/main/start-main-application/lens-window/get-visible-windows.injectable.ts b/packages/core/src/main/start-main-application/lens-window/get-visible-windows.injectable.ts index f8e1ceb562..f22e064ca4 100644 --- a/packages/core/src/main/start-main-application/lens-window/get-visible-windows.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/get-visible-windows.injectable.ts @@ -2,23 +2,16 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { pipeline } from "@ogre-tools/fp"; import { getInjectable } from "@ogre-tools/injectable"; -import { filter } from "lodash/fp"; import { applicationWindowInjectionToken } from "./application-window/application-window-injection-token"; const getVisibleWindowsInjectable = getInjectable({ id: "get-visible-windows", - instantiate: (di) => { - const getAllLensWindows = () => di.injectMany(applicationWindowInjectionToken); - - return () => - pipeline( - getAllLensWindows(), - filter((lensWindow) => !!lensWindow.isVisible), - ); - }, + instantiate: (di) => () => ( + di.injectMany(applicationWindowInjectionToken) + .filter(window => window.isVisible) + ), }); export default getVisibleWindowsInjectable; diff --git a/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts b/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts index 0a0661148b..dfec478f7d 100644 --- a/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { iter } from "../../../common/utils"; +import { iter } from "@k8slens/utilities"; import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; import showApplicationWindowInjectable from "./show-application-window.injectable"; import getCurrentApplicationWindowInjectable from "./application-window/get-current-application-window.injectable"; diff --git a/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts b/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts index 7bcd14072b..8ebfa40303 100644 --- a/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { iter } from "../../../common/utils"; +import { iter } from "@k8slens/utilities"; import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import showApplicationWindowInjectable from "./show-application-window.injectable"; diff --git a/packages/core/src/main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token.ts deleted file mode 100644 index f89f445ecf..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; - -export const afterApplicationIsLoadedInjectionToken = getInjectionToken({ - id: "after-application-is-loaded", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/after-root-frame-is-ready-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/after-root-frame-is-ready-injection-token.ts deleted file mode 100644 index f066c124ba..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/after-root-frame-is-ready-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; - -export const afterRootFrameIsReadyInjectionToken = getInjectionToken({ - id: "after-root-frame-is-ready", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/after-window-is-opened-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/after-window-is-opened-injection-token.ts deleted file mode 100644 index d5f33bceff..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/after-window-is-opened-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; - -export const afterWindowIsOpenedInjectionToken = getInjectionToken({ - id: "after-window-is-opened", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/before-application-is-loading-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/before-application-is-loading-injection-token.ts deleted file mode 100644 index 7cda9e6aee..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/before-application-is-loading-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; - -export const beforeApplicationIsLoadingInjectionToken = getInjectionToken({ - id: "before-application-is-loading", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token.ts deleted file mode 100644 index d11ecf57d2..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { RunnableSync } from "../../../common/runnable/run-many-sync-for"; - -export const beforeQuitOfBackEndInjectionToken = getInjectionToken({ - id: "before-quit-of-back-end", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-front-end-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-front-end-injection-token.ts deleted file mode 100644 index 0a45a684cd..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/before-quit-of-front-end-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { RunnableSync } from "../../../common/runnable/run-many-sync-for"; - -export const beforeQuitOfFrontEndInjectionToken = getInjectionToken({ - id: "before-quit-of-front-end", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/on-load-of-application-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/on-load-of-application-injection-token.ts deleted file mode 100644 index 35b7a6c0ff..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/on-load-of-application-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; - -export const onLoadOfApplicationInjectionToken = getInjectionToken({ - id: "on-load-of-application", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/phases.ts b/packages/core/src/main/start-main-application/runnable-tokens/phases.ts new file mode 100644 index 0000000000..5808062fb2 --- /dev/null +++ b/packages/core/src/main/start-main-application/runnable-tokens/phases.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { Runnable, RunnableSync } from "@k8slens/run-many"; + +export const beforeQuitOfFrontEndInjectionToken = getInjectionToken({ + id: "before-quit-of-front-end", +}); + +export const beforeQuitOfBackEndInjectionToken = getInjectionToken({ + id: "before-quit-of-back-end", +}); + +export const afterWindowIsOpenedInjectionToken = getInjectionToken({ + id: "after-window-is-opened", +}); + +export const afterRootFrameIsReadyInjectionToken = getInjectionToken({ + id: "after-root-frame-is-ready", +}); + +export const afterApplicationIsLoadedInjectionToken = getInjectionToken({ + id: "after-application-is-loaded", +}); diff --git a/packages/core/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.ts b/packages/core/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.ts index 46afa5e692..2388f0fa73 100644 --- a/packages/core/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.ts @@ -3,14 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../runnable-tokens/phases"; import { ShellSession } from "../../shell-session/shell-session"; const cleanUpShellSessionsInjectable = getInjectable({ id: "clean-up-shell-sessions", instantiate: () => ({ - id: "clean-up-shell-sessions", run: () => void ShellSession.cleanup(), }), diff --git a/packages/core/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.ts b/packages/core/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.ts index e1da8c1d67..cbd7a2d289 100644 --- a/packages/core/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.ts @@ -4,23 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; -import { beforeQuitOfFrontEndInjectionToken } from "../runnable-tokens/before-quit-of-front-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken } from "../runnable-tokens/phases"; const emitCloseToEventBusInjectable = getInjectable({ id: "emit-close-to-event-bus", - instantiate: (di) => { - const emitAppEvent = di.inject(emitAppEventInjectable); + instantiate: (di) => ({ + run: () => { + const emitAppEvent = di.inject(emitAppEventInjectable); - return { - id: "emit-close-to-event-bus", - run: () => { - emitAppEvent({ name: "app", action: "close" }); + emitAppEvent({ name: "app", action: "close" }); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfFrontEndInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts b/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts index e21256c716..acc4d7a7d5 100644 --- a/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts @@ -9,16 +9,13 @@ import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const emitServiceStartToEventBusInjectable = getInjectable({ id: "emit-service-start-to-event-bus", - instantiate: (di) => { - const emitAppEvent = di.inject(emitAppEventInjectable); + instantiate: (di) => ({ + run: () => { + const emitAppEvent = di.inject(emitAppEventInjectable); - return { - id: "emit-service-start-to-event-bus", - run: () => { - emitAppEvent({ name: "service", action: "start" }); - }, - }; - }, + emitAppEvent({ name: "service", action: "start" }); + }, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.ts b/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.ts index 2bb05cfb52..2fe71ed7d5 100644 --- a/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.ts @@ -3,26 +3,23 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { afterRootFrameIsReadyInjectionToken } from "../../runnable-tokens/after-root-frame-is-ready-injection-token"; +import { afterRootFrameIsReadyInjectionToken } from "../../runnable-tokens/phases"; import lensProtocolRouterMainInjectable from "../../../protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable"; import { runInAction } from "mobx"; const flagRendererAsLoadedInjectable = getInjectable({ id: "flag-renderer-as-loaded", - instantiate: (di) => { - const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); + instantiate: (di) => ({ + run: () => { + const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); - return { - id: "flag-renderer-as-loaded", - run: () => { - runInAction(() => { - // Todo: remove this kludge which enables out-of-place temporal dependency. - lensProtocolRouterMain.rendererLoaded = true; - }); - }, - }; - }, + runInAction(() => { + // Todo: remove this kludge which enables out-of-place temporal dependency. + lensProtocolRouterMain.rendererLoaded = true; + }); + }, + }), injectionToken: afterRootFrameIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.ts b/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.ts index d5f7444232..899b234f39 100644 --- a/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.ts @@ -5,26 +5,23 @@ import { getInjectable } from "@ogre-tools/injectable"; import { runInAction } from "mobx"; import lensProtocolRouterMainInjectable from "../../../protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable"; -import { beforeQuitOfFrontEndInjectionToken } from "../../runnable-tokens/before-quit-of-front-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken } from "../../runnable-tokens/phases"; const flagRendererAsNotLoadedInjectable = getInjectable({ id: "stop-deep-linking", - instantiate: (di) => { - const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); + instantiate: (di) => ({ + run: () => { + const lensProtocolRouterMain = di.inject(lensProtocolRouterMainInjectable); - return { - id: "stop-deep-linking", - run: () => { - runInAction(() => { - // Todo: remove this kludge which enables out-of-place temporal dependency. - lensProtocolRouterMain.rendererLoaded = false; - }); + runInAction(() => { + // Todo: remove this kludge which enables out-of-place temporal dependency. + lensProtocolRouterMain.rendererLoaded = false; + }); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfFrontEndInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts b/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts index 7815ecc2a7..d9c1aed473 100644 --- a/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts @@ -14,51 +14,46 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const initializeExtensionsInjectable = getInjectable({ id: "initialize-extensions", - instantiate: (di) => { - const logger = di.inject(loggerInjectable); - const extensionDiscovery = di.inject(extensionDiscoveryInjectable); - const extensionLoader = di.inject(extensionLoaderInjectable); - const showErrorPopup = di.inject(showErrorPopupInjectable); + instantiate: (di) => ({ + run: async () => { + const logger = di.inject(loggerInjectable); + const extensionDiscovery = di.inject(extensionDiscoveryInjectable); + const extensionLoader = di.inject(extensionLoaderInjectable); + const showErrorPopup = di.inject(showErrorPopupInjectable); - return { - id: "initialize-extensions", - run: async () => { - logger.info("🧩 Initializing extensions"); + logger.info("🧩 Initializing extensions"); - await extensionDiscovery.init(); + await extensionDiscovery.init(); - await extensionLoader.init(); + await extensionLoader.init(); - try { - const extensions = await extensionDiscovery.load(); + try { + const extensions = await extensionDiscovery.load(); - // Start watching after bundled extensions are loaded - extensionDiscovery.watchExtensions(); + // Start watching after bundled extensions are loaded + extensionDiscovery.watchExtensions(); - // Subscribe to extensions that are copied or deleted to/from the extensions folder - extensionDiscovery.events - .on("add", (extension: InstalledExtension) => { - extensionLoader.addExtension(extension); - }) - .on("remove", (lensExtensionId: LensExtensionId) => { - extensionLoader.removeExtension(lensExtensionId); - }); + // Subscribe to extensions that are copied or deleted to/from the extensions folder + extensionDiscovery.events + .on("add", (extension: InstalledExtension) => { + extensionLoader.addExtension(extension); + }) + .on("remove", (lensExtensionId: LensExtensionId) => { + extensionLoader.removeExtension(lensExtensionId); + }); - extensionLoader.initExtensions(extensions); - } catch (error: any) { - showErrorPopup( - "Lens Error", - `Could not load extensions${ - error?.message ? `: ${error.message}` : "" - }`, - ); + extensionLoader.initExtensions(extensions); + } catch (error: any) { + showErrorPopup( + "Lens Error", + `Could not load extensions${error?.message ? `: ${error.message}` : ""}`, + ); - console.error(error); - console.trace(); - } - }, - }; - }, + console.error(error); + console.trace(); + } + }, + }), causesSideEffects: true, diff --git a/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts b/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts index b7ba895c37..5844c7ed96 100644 --- a/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts @@ -9,17 +9,14 @@ import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const addKubeconfigSyncAsEntitySourceInjectable = getInjectable({ id: "add-kubeconfig-sync-as-entity-source", - instantiate: (di) => { - const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); - const entityRegistry = di.inject(catalogEntityRegistryInjectable); + instantiate: (di) => ({ + run: () => { + const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); + const entityRegistry = di.inject(catalogEntityRegistryInjectable); - return { - id: "add-kubeconfig-sync-as-entity-source", - run: () => { - entityRegistry.addComputedSource("kubeconfig-sync", kubeConfigSyncManager.source); - }, - }; - }, + entityRegistry.addComputedSource("kubeconfig-sync", kubeConfigSyncManager.source); + }, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts b/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts index 6ae5ccca40..b617791722 100644 --- a/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts @@ -12,21 +12,18 @@ import addKubeconfigSyncAsEntitySourceInjectable from "./add-source.injectable"; const startKubeConfigSyncInjectable = getInjectable({ id: "start-kubeconfig-sync", - instantiate: (di) => { - const directoryForKubeConfigs = di.inject(directoryForKubeConfigsInjectable); - const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); - const ensureDir = di.inject(ensureDirInjectable); + instantiate: (di) => ({ + run: async () => { + const directoryForKubeConfigs = di.inject(directoryForKubeConfigsInjectable); + const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); + const ensureDir = di.inject(ensureDirInjectable); - return { - id: "start-kubeconfig-sync", - run: async () => { - await ensureDir(directoryForKubeConfigs); + await ensureDir(directoryForKubeConfigs); - kubeConfigSyncManager.startSync(); - }, - runAfter: di.inject(addKubeconfigSyncAsEntitySourceInjectable), - }; - }, + kubeConfigSyncManager.startSync(); + }, + runAfter: addKubeconfigSyncAsEntitySourceInjectable, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.ts b/packages/core/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.ts index 4cb5a98a3f..118dac2ed4 100644 --- a/packages/core/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.ts @@ -3,20 +3,21 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../runnable-tokens/phases"; import kubeconfigSyncManagerInjectable from "../../../catalog-sources/kubeconfig-sync/manager.injectable"; const stopKubeConfigSyncInjectable = getInjectable({ id: "stop-kube-config-sync", - instantiate: (di) => { - const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); + instantiate: (di) => ({ + run: () => { + const kubeConfigSyncManager = di.inject(kubeconfigSyncManagerInjectable); - return { - id: "stop-kube-config-sync", - run: () => void kubeConfigSyncManager.stopSync(), - }; - }, + kubeConfigSyncManager.stopSync(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/root-frame-has-rendered/channel-listener.injectable.ts b/packages/core/src/main/start-main-application/runnables/root-frame-has-rendered/channel-listener.injectable.ts index 40f5ceb788..8b906c79e9 100644 --- a/packages/core/src/main/start-main-application/runnables/root-frame-has-rendered/channel-listener.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/root-frame-has-rendered/channel-listener.injectable.ts @@ -4,8 +4,8 @@ */ import { getMessageChannelListenerInjectable } from "../../../../common/utils/channel/message-channel-listener-injection-token"; import { rootFrameHasRenderedChannel } from "../../../../common/root-frame/root-frame-rendered-channel"; -import { runManyFor } from "../../../../common/runnable/run-many-for"; -import { afterRootFrameIsReadyInjectionToken } from "../../runnable-tokens/after-root-frame-is-ready-injection-token"; +import { runManyFor } from "@k8slens/run-many"; +import { afterRootFrameIsReadyInjectionToken } from "../../runnable-tokens/phases"; const rootFrameRenderedChannelListenerInjectable = getMessageChannelListenerInjectable({ id: "action", diff --git a/packages/core/src/main/start-main-application/runnables/sentry/initialize-on-main.global-override-for-injectable.ts b/packages/core/src/main/start-main-application/runnables/sentry/initialize-on-main.global-override-for-injectable.ts index 3850c736a0..6781ef7023 100644 --- a/packages/core/src/main/start-main-application/runnables/sentry/initialize-on-main.global-override-for-injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/sentry/initialize-on-main.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import initializeSentryOnMainInjectable from "./initialize-on-main.injectable"; export default getGlobalOverride(initializeSentryOnMainInjectable, () => () => {}); diff --git a/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts b/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts index 79141c8d66..841d669fa4 100644 --- a/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts @@ -9,15 +9,16 @@ import initializeSentryOnMainInjectable from "./initialize-on-main.injectable"; const setupSentryInjectable = getInjectable({ id: "setup-sentry", - instantiate: (di) => { - const initializeSentryReportingWith = di.inject(initializeSentryReportingWithInjectable); - const initializeSentryOnMain = di.inject(initializeSentryOnMainInjectable); + instantiate: (di) => ({ + run: () => { + const initializeSentryReportingWith = di.inject(initializeSentryReportingWithInjectable); + const initializeSentryOnMain = di.inject(initializeSentryOnMainInjectable); - return { - id: "setup-sentry", - run: () => void initializeSentryReportingWith(initializeSentryOnMain), - }; - }, + initializeSentryReportingWith(initializeSentryOnMain); + + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts index c57e35d822..0acadbb852 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts @@ -10,21 +10,18 @@ import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-el const setupHardwareAccelerationInjectable = getInjectable({ id: "setup-hardware-acceleration", - instantiate: (di) => { - const hardwareAccelerationShouldBeDisabled = di.inject(hardwareAccelerationShouldBeDisabledInjectable); - const disableHardwareAcceleration = di.inject(disableHardwareAccelerationInjectable); + instantiate: (di) => ({ + run: () => { + const hardwareAccelerationShouldBeDisabled = di.inject(hardwareAccelerationShouldBeDisabledInjectable); + const disableHardwareAcceleration = di.inject(disableHardwareAccelerationInjectable); - return { - id: "setup-hardware-acceleration", - run: () => { - if (hardwareAccelerationShouldBeDisabled) { - disableHardwareAcceleration(); - } + if (hardwareAccelerationShouldBeDisabled) { + disableHardwareAcceleration(); + } - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts index 26d85283d5..44c0a26ddd 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts @@ -9,22 +9,19 @@ import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-el const setupHostnamesInjectable = getInjectable({ id: "setup-hostnames", - instantiate: (di) => { - const app = di.inject(electronAppInjectable); + instantiate: (di) => ({ + run: () => { + const app = di.inject(electronAppInjectable); - return { - id: "setup-hostnames", - run: () => { - app.commandLine.appendSwitch("host-rules", [ - "MAP localhost 127.0.0.1", - "MAP lens.app 127.0.0.1", - "MAP *.lens.app 127.0.0.1", - ].join()); + app.commandLine.appendSwitch("host-rules", [ + "MAP localhost 127.0.0.1", + "MAP lens.app 127.0.0.1", + "MAP *.lens.app 127.0.0.1", + ].join()); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts index e847578d01..7dfcbba39d 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts @@ -3,19 +3,18 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import * as Immer from "immer"; +import { setAutoFreeze, enableMapSet } from "immer"; import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupImmerInjectable = getInjectable({ id: "setup-immer", instantiate: () => ({ - id: "setup-immer", run: () => { // Docs: https://immerjs.github.io/immer/ // Required in `utils/storage-helper.ts` - Immer.setAutoFreeze(false); // allow to merge mobx observables - Immer.enableMapSet(); // allow to merge maps and sets + setAutoFreeze(false); // allow to merge mobx observables + enableMapSet(); // allow to merge maps and sets return undefined; }, diff --git a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts index 9d473f3182..d75ca643f8 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts @@ -10,42 +10,39 @@ import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-el const setupLensProxyCertificateInjectable = getInjectable({ id: "setup-lens-proxy-certificate", - instantiate: (di) => { - const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); + instantiate: (di) => ({ + run: () => { + const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); - return { - id: "setup-lens-proxy-certificate", - run: () => { - const cert = generate([ - { name: "commonName", value: "Lens Certificate Authority" }, - { name: "organizationName", value: "Lens" }, - ], { - keySize: 2048, - algorithm: "sha256", - days: 365, - extensions: [ - { - name: "basicConstraints", - cA: true, - }, - { - name: "subjectAltName", - altNames: [ - { type: 2, value: "*.lens.app" }, - { type: 2, value: "lens.app" }, - { type: 2, value: "localhost" }, - { type: 7, ip: "127.0.0.1" }, - ], - }, - ], - }); + const cert = generate([ + { name: "commonName", value: "Lens Certificate Authority" }, + { name: "organizationName", value: "Lens" }, + ], { + keySize: 2048, + algorithm: "sha256", + days: 365, + extensions: [ + { + name: "basicConstraints", + cA: true, + }, + { + name: "subjectAltName", + altNames: [ + { type: 2, value: "*.lens.app" }, + { type: 2, value: "lens.app" }, + { type: 2, value: "localhost" }, + { type: 7, ip: "127.0.0.1" }, + ], + }, + ], + }); - lensProxyCertificate.set(cert); + lensProxyCertificate.set(cert); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts index dc63b8f7a3..c77a0470be 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts @@ -19,68 +19,65 @@ import { Agent } from "https"; const setupLensProxyInjectable = getInjectable({ id: "setup-lens-proxy", - instantiate: (di) => { - const lensProxy = di.inject(lensProxyInjectable); - const exitApp = di.inject(exitAppInjectable); - const logger = di.inject(loggerInjectable); - const lensProxyPort = di.inject(lensProxyPortInjectable); - const isWindows = di.inject(isWindowsInjectable); - const showErrorPopup = di.inject(showErrorPopupInjectable); - const buildVersion = di.inject(buildVersionInjectable); - const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); - const fetch = di.inject(fetchInjectable); + instantiate: (di) => ({ + run: async () => { + const lensProxy = di.inject(lensProxyInjectable); + const exitApp = di.inject(exitAppInjectable); + const logger = di.inject(loggerInjectable); + const lensProxyPort = di.inject(lensProxyPortInjectable); + const isWindows = di.inject(isWindowsInjectable); + const showErrorPopup = di.inject(showErrorPopupInjectable); + const buildVersion = di.inject(buildVersionInjectable); + const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); + const fetch = di.inject(fetchInjectable); - return { - id: "setup-lens-proxy", - run: async () => { - try { - logger.info("🔌 Starting LensProxy"); - await lensProxy.listen(); // lensProxy.port available - } catch (error: any) { - showErrorPopup("Lens Error", `Could not start proxy: ${error?.message || "unknown error"}`); + try { + logger.info("🔌 Starting LensProxy"); + await lensProxy.listen(); // lensProxy.port available + } catch (error: any) { + showErrorPopup("Lens Error", `Could not start proxy: ${error?.message || "unknown error"}`); + + return exitApp(); + } + + // test proxy connection + try { + logger.info("🔎 Testing LensProxy connection ..."); + const versionResponse = await fetch(`https://127.0.0.1:${lensProxyPort.get()}/version`, { + agent: new Agent({ + ca: lensProxyCertificate.get()?.cert, + }), + }); + + const { version: versionFromProxy } = await versionResponse.json() as { version: string }; + + if (buildVersion.get() !== versionFromProxy) { + logger.error("Proxy server responded with invalid response"); return exitApp(); } - // test proxy connection - try { - logger.info("🔎 Testing LensProxy connection ..."); - const versionResponse = await fetch(`https://127.0.0.1:${lensProxyPort.get()}/version`, { - agent: new Agent({ - ca: lensProxyCertificate.get()?.cert, - }), - }); + logger.info("⚡ LensProxy connection OK"); + } catch (error) { + logger.error(`🛑 LensProxy: failed connection test: ${error}`); - const { version: versionFromProxy } = await versionResponse.json() as { version: string }; + const hostsPath = isWindows + ? "C:\\windows\\system32\\drivers\\etc\\hosts" + : "/etc/hosts"; + const message = [ + `Failed connection test: ${error}`, + "Check to make sure that no other versions of Lens are running", + `Check ${hostsPath} to make sure that it is clean and that the localhost loopback is at the top and set to 127.0.0.1`, + "If you have HTTP_PROXY or http_proxy set in your environment, make sure that the localhost and the ipv4 loopback address 127.0.0.1 are added to the NO_PROXY environment variable.", + ]; - if (buildVersion.get() !== versionFromProxy) { - logger.error("Proxy server responded with invalid response"); + showErrorPopup("Lens Proxy Error", message.join("\n\n")); - return exitApp(); - } - - logger.info("⚡ LensProxy connection OK"); - } catch (error) { - logger.error(`🛑 LensProxy: failed connection test: ${error}`); - - const hostsPath = isWindows - ? "C:\\windows\\system32\\drivers\\etc\\hosts" - : "/etc/hosts"; - const message = [ - `Failed connection test: ${error}`, - "Check to make sure that no other versions of Lens are running", - `Check ${hostsPath} to make sure that it is clean and that the localhost loopback is at the top and set to 127.0.0.1`, - "If you have HTTP_PROXY or http_proxy set in your environment, make sure that the localhost and the ipv4 loopback address 127.0.0.1 are added to the NO_PROXY environment variable.", - ]; - - showErrorPopup("Lens Proxy Error", message.join("\n\n")); - - return exitApp(); - } - }, - runAfter: di.inject(initializeBuildVersionInjectable), - }; - }, + return exitApp(); + } + }, + runAfter: initializeBuildVersionInjectable, + }), causesSideEffects: true, diff --git a/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts index 8227c9ace6..a566a9da1b 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts @@ -10,7 +10,6 @@ const setupMobxInjectable = getInjectable({ id: "setup-mobx", instantiate: () => ({ - id: "setup-mobx", run: () => { // Docs: https://mobx.js.org/configuration.html Mobx.configure({ diff --git a/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts index 7553eeb7eb..dc74c892c8 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts @@ -9,36 +9,31 @@ import getCommandLineSwitchInjectable from "../../electron-app/features/get-comm const setupProxyEnvInjectable = getInjectable({ id: "setup-proxy-env", - instantiate: (di) => { - const getCommandLineSwitch = di.inject(getCommandLineSwitchInjectable); + instantiate: (di) => ({ + run: () => { + const getCommandLineSwitch = di.inject(getCommandLineSwitchInjectable); + const switchValue = getCommandLineSwitch("proxy-server"); - return { - id: "setup-proxy-env", - run: () => { - const switchValue = getCommandLineSwitch("proxy-server"); + let httpsProxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || ""; - let httpsProxy = - process.env.HTTPS_PROXY || process.env.HTTP_PROXY || ""; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; - delete process.env.HTTPS_PROXY; - delete process.env.HTTP_PROXY; + if (switchValue !== "") { + httpsProxy = switchValue; + } - if (switchValue !== "") { - httpsProxy = switchValue; - } + if (httpsProxy !== "") { + process.env.APP_HTTPS_PROXY = httpsProxy; + } - if (httpsProxy !== "") { - process.env.APP_HTTPS_PROXY = httpsProxy; - } + if (getCommandLineSwitch("proxy-server") !== "") { + process.env.HTTPS_PROXY = getCommandLineSwitch("proxy-server"); + } - if (getCommandLineSwitch("proxy-server") !== "") { - process.env.HTTPS_PROXY = getCommandLineSwitch("proxy-server"); - } - - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeElectronIsReadyInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts index 07b17dfa46..080a7d72aa 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts @@ -9,18 +9,13 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupSyncingOfGeneralCatalogEntitiesInjectable = getInjectable({ id: "setup-syncing-of-general-catalog-entities", - instantiate: (di) => { - const syncGeneralCatalogEntities = di.inject( - syncGeneralCatalogEntitiesInjectable, - ); + instantiate: (di) => ({ + run: () => { + const syncGeneralCatalogEntities = di.inject(syncGeneralCatalogEntitiesInjectable); - return { - id: "setup-syncing-of-general-catalog-entities", - run: () => { - syncGeneralCatalogEntities(); - }, - }; - }, + syncGeneralCatalogEntities(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts index 9259b44ab1..09a630db37 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts @@ -9,16 +9,13 @@ import syncWeblinksInjectable from "../../catalog-sources/sync-weblinks.injectab const setupSyncingOfWeblinksInjectable = getInjectable({ id: "setup-syncing-of-weblinks", - instantiate: (di) => { - const syncWeblinks = di.inject(syncWeblinksInjectable); + instantiate: (di) => ({ + run: () => { + const syncWeblinks = di.inject(syncWeblinksInjectable); - return { - id: "setup-syncing-of-weblinks", - run: () => { - syncWeblinks(); - }, - }; - }, + syncWeblinks(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts index ecffc60b6c..4d9b043540 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts @@ -9,8 +9,11 @@ import injectSystemCAsInjectable from "../../../features/certificate-authorities const setupSystemCaInjectable = getInjectable({ id: "setup-system-ca", instantiate: (di) => ({ - id: "setup-system-ca", - run: di.inject(injectSystemCAsInjectable), + run: async () => { + const injectSystemCAs = di.inject(injectSystemCAsInjectable); + + await injectSystemCAs(); + }, }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts b/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts index db1ea42610..1464022486 100644 --- a/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts @@ -18,33 +18,30 @@ const getDeepLinkUrl = (commandLineArguments: string[]) => ( const showInitialWindowInjectable = getInjectable({ id: "show-initial-window", - instantiate: (di) => { - const shouldStartHidden = di.inject(shouldStartHiddenInjectable); - const shouldStartWindow = !shouldStartHidden; - const createFirstApplicationWindow = di.inject(createFirstApplicationWindowInjectable); - const splashWindow = di.inject(splashWindowInjectable); - const openDeepLink = di.inject(openDeepLinkInjectable); - const commandLineArguments = di.inject(commandLineArgumentsInjectable); + instantiate: (di) => ({ + run: async () => { + const shouldStartHidden = di.inject(shouldStartHiddenInjectable); + const shouldStartWindow = !shouldStartHidden; + const createFirstApplicationWindow = di.inject(createFirstApplicationWindowInjectable); + const splashWindow = di.inject(splashWindowInjectable); + const openDeepLink = di.inject(openDeepLinkInjectable); + const commandLineArguments = di.inject(commandLineArgumentsInjectable); - return { - id: "show-initial-window", - run: async () => { - if (shouldStartWindow) { - const deepLinkUrl = getDeepLinkUrl(commandLineArguments); + if (shouldStartWindow) { + const deepLinkUrl = getDeepLinkUrl(commandLineArguments); - if (deepLinkUrl) { - await openDeepLink(deepLinkUrl); - } else { - const applicationWindow = createFirstApplicationWindow(); + if (deepLinkUrl) { + await openDeepLink(deepLinkUrl); + } else { + const applicationWindow = createFirstApplicationWindow(); - await applicationWindow.start(); - } - - splashWindow.close(); + await applicationWindow.start(); } - }, - }; - }, + + splashWindow.close(); + } + }, + }), injectionToken: afterApplicationIsLoadedInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts b/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts index f12dd3fe09..337084a7d2 100644 --- a/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts @@ -9,20 +9,18 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const showLoadingInjectable = getInjectable({ id: "show-loading", - instantiate: (di) => { - const shouldStartHidden = di.inject(shouldStartHiddenInjectable); - const shouldShowLoadingWindow = !shouldStartHidden; - const splashWindow = di.inject(splashWindowInjectable); - return { - id: "show-loading", - run: async () => { - if (shouldShowLoadingWindow) { - await splashWindow.start(); - } - }, - }; - }, + instantiate: (di) => ({ + run: async () => { + const shouldStartHidden = di.inject(shouldStartHiddenInjectable); + const shouldShowLoadingWindow = !shouldStartHidden; + const splashWindow = di.inject(splashWindowInjectable); + + if (shouldShowLoadingWindow) { + await splashWindow.start(); + } + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/start-main-application/runnables/stop-cluster-manager.injectable.ts b/packages/core/src/main/start-main-application/runnables/stop-cluster-manager.injectable.ts index c0a39c51ae..f26feb01d7 100644 --- a/packages/core/src/main/start-main-application/runnables/stop-cluster-manager.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/stop-cluster-manager.injectable.ts @@ -4,23 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import clusterManagerInjectable from "../../cluster/manager.injectable"; -import { beforeQuitOfFrontEndInjectionToken } from "../runnable-tokens/before-quit-of-front-end-injection-token"; +import { beforeQuitOfFrontEndInjectionToken } from "../runnable-tokens/phases"; const stopClusterManagerInjectable = getInjectable({ id: "stop-cluster-manager", - instantiate: (di) => { - const clusterManager = di.inject(clusterManagerInjectable); + instantiate: (di) => ({ + run: () => { + const clusterManager = di.inject(clusterManagerInjectable); - return { - id: "stop-cluster-manager", - run: () => { - clusterManager.stop(); + clusterManager.stop(); - return undefined; - }, - }; - }, + return undefined; + }, + }), injectionToken: beforeQuitOfFrontEndInjectionToken, }); diff --git a/packages/core/src/main/stores/init-user-store.injectable.ts b/packages/core/src/main/stores/init-user-store.injectable.ts index 58ac61f86d..b7d1dac33d 100644 --- a/packages/core/src/main/stores/init-user-store.injectable.ts +++ b/packages/core/src/main/stores/init-user-store.injectable.ts @@ -10,19 +10,16 @@ import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/i const initUserStoreInjectable = getInjectable({ id: "init-user-store", - instantiate: (di) => { - const userStore = di.inject(userStoreInjectable); - const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable); + instantiate: (di) => ({ + run: async () => { + const userStore = di.inject(userStoreInjectable); + const userStoreFileNameMigration = di.inject(userStoreFileNameMigrationInjectable); - return { - id: "init-user-store", - run: async () => { - await userStoreFileNameMigration(); - userStore.load(); - }, - runAfter: di.inject(initDefaultUpdateChannelInjectable), - }; - }, + await userStoreFileNameMigration(); + userStore.load(); + }, + runAfter: initDefaultUpdateChannelInjectable, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts b/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts index d037f539a7..4bed8c41e3 100644 --- a/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts +++ b/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts @@ -9,16 +9,13 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const startSyncingThemeFromOperatingSystemInjectable = getInjectable({ id: "start-syncing-theme-from-operating-system", - instantiate: (di) => { - const syncTheme = di.inject(syncThemeFromOperatingSystemInjectable); + instantiate: (di) => ({ + run: () => { + const syncTheme = di.inject(syncThemeFromOperatingSystemInjectable); - return { - id: "start-syncing-theme-from-operating-system", - run: () => { - syncTheme.start(); - }, - }; - }, + syncTheme.start(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.ts b/packages/core/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.ts index b45184a3bd..f50a298822 100644 --- a/packages/core/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.ts +++ b/packages/core/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.ts @@ -4,19 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import syncThemeFromOperatingSystemInjectable from "../../electron-app/features/sync-theme-from-operating-system.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; const stopSyncingThemeFromOperatingSystemInjectable = getInjectable({ id: "stop-syncing-theme-from-operating-system", - instantiate: (di) => { - const syncTheme = di.inject(syncThemeFromOperatingSystemInjectable); + instantiate: (di) => ({ + run: () => { + const syncTheme = di.inject(syncThemeFromOperatingSystemInjectable); - return { - id: "stop-syncing-theme-from-operating-system", - run: () => void syncTheme.stop(), - }; - }, + syncTheme.stop(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts b/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts index 3bd61a6997..5aa8eecc2f 100644 --- a/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts +++ b/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts @@ -9,16 +9,13 @@ import electronTrayInjectable from "./electron-tray.injectable"; const startTrayInjectable = getInjectable({ id: "start-tray", - instantiate: (di) => { - const electronTray = di.inject(electronTrayInjectable); + instantiate: (di) => ({ + run: () => { + const electronTray = di.inject(electronTrayInjectable); - return { - id: "start-tray", - run: () => { - electronTray.start(); - }, - }; - }, + electronTray.start(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/tray/electron-tray/stop-tray.injectable.ts b/packages/core/src/main/tray/electron-tray/stop-tray.injectable.ts index d2e58be039..4bd6bd6c3a 100644 --- a/packages/core/src/main/tray/electron-tray/stop-tray.injectable.ts +++ b/packages/core/src/main/tray/electron-tray/stop-tray.injectable.ts @@ -4,21 +4,22 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import electronTrayInjectable from "./electron-tray.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; import stopReactiveTrayMenuItemsInjectable from "../reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable"; const stopTrayInjectable = getInjectable({ id: "stop-tray", - instantiate: (di) => { - const electronTray = di.inject(electronTrayInjectable); + instantiate: (di) => ({ + run: () => { + const electronTray = di.inject(electronTrayInjectable); - return { - id: "stop-tray", - run: () => void electronTray.stop(), - runAfter: di.inject(stopReactiveTrayMenuItemsInjectable), - }; - }, + electronTray.stop(); + + return undefined; + }, + runAfter: stopReactiveTrayMenuItemsInjectable, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts b/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts index 0bb94b53af..74ee3c13a6 100644 --- a/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts +++ b/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts @@ -10,18 +10,15 @@ import reactiveTrayMenuIconInjectable from "./reactive.injectable"; const startReactiveTrayMenuIconInjectable = getInjectable({ id: "start-reactive-tray-menu-icon", - instantiate: (di) => { - const reactiveTrayMenuIcon = di.inject(reactiveTrayMenuIconInjectable); + instantiate: (di) => ({ + run: () => { + const reactiveTrayMenuIcon = di.inject(reactiveTrayMenuIconInjectable); - return { - id: "start-reactive-tray-menu-icon", - run: () => { - reactiveTrayMenuIcon.start(); - }, + reactiveTrayMenuIcon.start(); + }, - runAfter: di.inject(startTrayInjectable), - }; - }, + runAfter: startTrayInjectable, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/tray/menu-icon/stop-reactivity.injectable.ts b/packages/core/src/main/tray/menu-icon/stop-reactivity.injectable.ts index 94e91ec607..b5908104d2 100644 --- a/packages/core/src/main/tray/menu-icon/stop-reactivity.injectable.ts +++ b/packages/core/src/main/tray/menu-icon/stop-reactivity.injectable.ts @@ -3,20 +3,21 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; import reactiveTrayMenuIconInjectable from "./reactive.injectable"; const stopReactiveTrayMenuIconInjectable = getInjectable({ id: "stop-reactive-tray-menu-icon", - instantiate: (di) => { - const reactiveTrayMenuIcon = di.inject(reactiveTrayMenuIconInjectable); + instantiate: (di) => ({ + run: () => { + const reactiveTrayMenuIcon = di.inject(reactiveTrayMenuIconInjectable); - return { - id: "stop-reactive-tray-menu-icon", - run: () => void reactiveTrayMenuIcon.stop(), - }; - }, + reactiveTrayMenuIcon.stop(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts b/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts index 9164afee3b..d95abc222c 100644 --- a/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts +++ b/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts @@ -10,18 +10,14 @@ import startTrayInjectable from "../electron-tray/start-tray.injectable"; const startReactiveTrayMenuItemsInjectable = getInjectable({ id: "start-reactive-tray-menu-items", - instantiate: (di) => { - const reactiveTrayMenuItems = di.inject(reactiveTrayMenuItemsInjectable); + instantiate: (di) => ({ + run: () => { + const reactiveTrayMenuItems = di.inject(reactiveTrayMenuItemsInjectable); - return { - id: "start-reactive-tray-menu-items", - run: () => { - reactiveTrayMenuItems.start(); - }, - - runAfter: di.inject(startTrayInjectable), - }; - }, + reactiveTrayMenuItems.start(); + }, + runAfter: startTrayInjectable, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.ts b/packages/core/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.ts index 122e9c059a..d5e5063e92 100644 --- a/packages/core/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.ts +++ b/packages/core/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.ts @@ -4,19 +4,20 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import reactiveTrayMenuItemsInjectable from "./reactive-tray-menu-items.injectable"; -import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; +import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/phases"; const stopReactiveTrayMenuItemsInjectable = getInjectable({ id: "stop-reactive-tray-menu-items", - instantiate: (di) => { - const reactiveTrayMenuItems = di.inject(reactiveTrayMenuItemsInjectable); + instantiate: (di) => ({ + run: () => { + const reactiveTrayMenuItems = di.inject(reactiveTrayMenuItemsInjectable); - return { - id: "stop-reactive-tray-menu-items", - run: () => void reactiveTrayMenuItems.stop(), - }; - }, + reactiveTrayMenuItems.stop(); + + return undefined; + }, + }), injectionToken: beforeQuitOfBackEndInjectionToken, }); diff --git a/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts b/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts index 573af2f545..f1eb3e7e50 100644 --- a/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts +++ b/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts @@ -15,7 +15,7 @@ import { withErrorSuppression } from "../../../common/utils/with-error-suppressi import type { WithErrorLoggingFor } from "../../../common/utils/with-error-logging/with-error-logging.injectable"; import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; -import { isBoolean, isString } from "../../../common/utils"; +import { isBoolean, isString } from "@k8slens/utilities"; const trayMenuItemRegistratorInjectable = getInjectable({ id: "tray-menu-item-registrator", diff --git a/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts b/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts index 1367037c6d..7739c67e66 100644 --- a/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts +++ b/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts @@ -5,7 +5,7 @@ import type { ClusterStoreModel } from "../../../common/cluster-store/cluster-store"; import type { KubeconfigSyncEntry, UserPreferencesModel } from "../../../common/user-store"; -import { isErrnoException } from "../../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; diff --git a/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts b/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts index 2a92ac8c7a..a06d65163e 100644 --- a/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts +++ b/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts @@ -10,25 +10,22 @@ import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupSyncOpenAtLoginWithOsInjectable = getInjectable({ id: "setup-sync-open-at-login-with-os", - instantiate: (di) => { - const setLoginItemSettings = di.inject(setLoginItemSettingsInjectable); - const userStore = di.inject(userStoreInjectable); + instantiate: (di) => ({ + run: () => { + const setLoginItemSettings = di.inject(setLoginItemSettingsInjectable); + const userStore = di.inject(userStoreInjectable); - return { - id: "setup-sync-open-at-login-with-os", - run: () => { - reaction(() => userStore.openAtLogin, openAtLogin => { - setLoginItemSettings({ - openAtLogin, - openAsHidden: true, - args: ["--hidden"], - }); - }, { - fireImmediately: true, + reaction(() => userStore.openAtLogin, openAtLogin => { + setLoginItemSettings({ + openAtLogin, + openAsHidden: true, + args: ["--hidden"], }); - }, - }; - }, + }, { + fireImmediately: true, + }); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts index 1af1b6fb55..08a600297c 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { IpcMainInvokeEvent } from "electron"; -import type { Disposer } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; import type { RequestChannelListener } from "./listener-tokens"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; diff --git a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.test.ts b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.test.ts index 66b81c67d9..188a11866b 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.test.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.test.ts @@ -5,7 +5,7 @@ import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; import ipcMainInjectable from "../ipc-main/ipc-main.injectable"; import type { IpcMain, IpcMainInvokeEvent } from "electron"; -import { getPromiseStatus } from "../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; diff --git a/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts index 80b94fbe0e..1e6d0f296c 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { disposer } from "../../../../common/utils"; +import { disposer } from "@k8slens/utilities"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; import { getStartableStoppable } from "../../../../common/utils/get-startable-stoppable"; import enlistRequestChannelListenerInjectable from "./enlist-request-channel-listener.injectable"; diff --git a/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts index 5e029a16d6..c83425109c 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts @@ -10,18 +10,15 @@ import listeningOnRequestChannelsInjectable from "./listening-on-request-channel const startListeningOnChannelsInjectable = getInjectable({ id: "start-listening-on-channels-main", - instantiate: (di) => { - const listeningOnMessageChannels = di.inject(listeningOnMessageChannelsInjectable); - const listeningOnRequestChannels = di.inject(listeningOnRequestChannelsInjectable); + instantiate: (di) => ({ + run: () => { + const listeningOnMessageChannels = di.inject(listeningOnMessageChannelsInjectable); + const listeningOnRequestChannels = di.inject(listeningOnRequestChannelsInjectable); - return { - id: "start-listening-on-channels-main", - run: () => { - listeningOnMessageChannels.start(); - listeningOnRequestChannels.start(); - }, - }; - }, + listeningOnMessageChannels.start(); + listeningOnRequestChannels.start(); + }, + }), injectionToken: onLoadOfApplicationInjectionToken, }); diff --git a/packages/core/src/main/utils/channel/ipc-main/ipc-main.global-override-for-injectable.ts b/packages/core/src/main/utils/channel/ipc-main/ipc-main.global-override-for-injectable.ts index e770ccdf35..ccb773ab06 100644 --- a/packages/core/src/main/utils/channel/ipc-main/ipc-main.global-override-for-injectable.ts +++ b/packages/core/src/main/utils/channel/ipc-main/ipc-main.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { IpcMain } from "electron"; -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import ipcMainInjectable from "./ipc-main.injectable"; export default getGlobalOverride(ipcMainInjectable, () => ({ diff --git a/packages/core/src/main/utils/command-line-arguments.global-override-for-injectable.ts b/packages/core/src/main/utils/command-line-arguments.global-override-for-injectable.ts index edd33d824a..ffa52c8608 100644 --- a/packages/core/src/main/utils/command-line-arguments.global-override-for-injectable.ts +++ b/packages/core/src/main/utils/command-line-arguments.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import commandLineArgumentsInjectable from "./command-line-arguments.injectable"; export default getGlobalOverride(commandLineArgumentsInjectable, () => []); diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts index 9c395dca5b..c197566a10 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts @@ -9,7 +9,7 @@ import electronInjectable from "./electron.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import type electron from "electron"; -import { getPromiseStatus } from "../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import logErrorInjectable from "../../../common/log-error.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; diff --git a/packages/core/src/main/vars/build-version/init.injectable.ts b/packages/core/src/main/vars/build-version/init.injectable.ts index fc08dce920..509c0262d1 100644 --- a/packages/core/src/main/vars/build-version/init.injectable.ts +++ b/packages/core/src/main/vars/build-version/init.injectable.ts @@ -8,14 +8,13 @@ import buildVersionInjectable from "./build-version.injectable"; const initializeBuildVersionInjectable = getInjectable({ id: "initialize-build-version", - instantiate: (di) => { - const buildVersion = di.inject(buildVersionInjectable); + instantiate: (di) => ({ + run: async () => { + const buildVersion = di.inject(buildVersionInjectable); - return { - id: "initialize-build-version", - run: () => buildVersion.init(), - }; - }, + await buildVersion.init(); + }, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/main/vars/default-update-channel/init.injectable.ts b/packages/core/src/main/vars/default-update-channel/init.injectable.ts index 0a156e8dee..b0643149a4 100644 --- a/packages/core/src/main/vars/default-update-channel/init.injectable.ts +++ b/packages/core/src/main/vars/default-update-channel/init.injectable.ts @@ -9,15 +9,14 @@ import defaultUpdateChannelInjectable from "../../../features/application-update const initDefaultUpdateChannelInjectable = getInjectable({ id: "init-default-update-channel", - instantiate: (di) => { - const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); + instantiate: (di) => ({ + run: async () => { + const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); - return { - id: "init-default-update-channel", - run: () => defaultUpdateChannel.init(), - runAfter: di.inject(initReleaseChannelInjectable), - }; - }, + await defaultUpdateChannel.init(); + }, + runAfter: initReleaseChannelInjectable, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/main/vars/hardware-acceleration-should-be-disabled.global-override-for-injectable.ts b/packages/core/src/main/vars/hardware-acceleration-should-be-disabled.global-override-for-injectable.ts index 2f66f9fc18..53c6c692fd 100644 --- a/packages/core/src/main/vars/hardware-acceleration-should-be-disabled.global-override-for-injectable.ts +++ b/packages/core/src/main/vars/hardware-acceleration-should-be-disabled.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import hardwareAccelerationShouldBeDisabledInjectable from "./hardware-acceleration-should-be-disabled.injectable"; export default getGlobalOverride(hardwareAccelerationShouldBeDisabledInjectable, () => false); diff --git a/packages/core/src/main/vars/release-channel/init.injectable.ts b/packages/core/src/main/vars/release-channel/init.injectable.ts index fe8a838a89..4871025132 100644 --- a/packages/core/src/main/vars/release-channel/init.injectable.ts +++ b/packages/core/src/main/vars/release-channel/init.injectable.ts @@ -9,15 +9,14 @@ import initSemanticBuildVersionInjectable from "../semantic-build-version/init.i const initReleaseChannelInjectable = getInjectable({ id: "init-release-channel", - instantiate: (di) => { - const releaseChannel = di.inject(releaseChannelInjectable); + instantiate: (di) => ({ + run: async () => { + const releaseChannel = di.inject(releaseChannelInjectable); - return { - id: "init-release-channel", - run: () => releaseChannel.init(), - runAfter: di.inject(initSemanticBuildVersionInjectable), - }; - }, + await releaseChannel.init(); + }, + runAfter: initSemanticBuildVersionInjectable, + }), injectionToken: beforeApplicationIsLoadingInjectionToken, }); diff --git a/packages/core/src/main/vars/semantic-build-version/init.injectable.ts b/packages/core/src/main/vars/semantic-build-version/init.injectable.ts index c39c3b51a2..8f0dcb7387 100644 --- a/packages/core/src/main/vars/semantic-build-version/init.injectable.ts +++ b/packages/core/src/main/vars/semantic-build-version/init.injectable.ts @@ -10,12 +10,13 @@ import initializeBuildVersionInjectable from "../build-version/init.injectable"; const initSemanticBuildVersionInjectable = getInjectable({ id: "init-semantic-build-version", instantiate: (di) => { - const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); - return { - id: "init-semantic-build-version", - run: () => buildSemanticVersion.init(), - runAfter: di.inject(initializeBuildVersionInjectable), + run: async () => { + const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); + + await buildSemanticVersion.init(); + }, + runAfter: initializeBuildVersionInjectable, }; }, injectionToken: beforeApplicationIsLoadingInjectionToken, diff --git a/packages/core/src/renderer/api/catalog/entity/registry.ts b/packages/core/src/renderer/api/catalog/entity/registry.ts index ad23b2aa94..d3f205a094 100644 --- a/packages/core/src/renderer/api/catalog/entity/registry.ts +++ b/packages/core/src/renderer/api/catalog/entity/registry.ts @@ -7,8 +7,8 @@ import { computed, observable, makeObservable, action } from "mobx"; import { ipcRendererOn } from "../../../../common/ipc"; import type { CatalogCategory, CatalogEntity, CatalogEntityData, CatalogCategoryRegistry, CatalogEntityKindData } from "../../../../common/catalog"; import "../../../../common/catalog-entities"; -import { iter } from "../../../utils"; -import type { Disposer } from "../../../utils"; +import { iter } from "@k8slens/utilities"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { CatalogRunEvent } from "../../../../common/catalog/catalog-run-event"; import { ipcRenderer } from "electron"; diff --git a/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts b/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts index 0e73acfcd1..70b7a61eae 100644 --- a/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts +++ b/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts @@ -8,8 +8,8 @@ import type { GeneralEntity } from "../../../common/catalog-entities"; import generalCategoryInjectable from "../../../common/catalog/categories/general.injectable"; import isActiveRouteInjectable from "../../navigation/is-route-active.injectable"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; -import type { Disposer } from "../../utils"; -import { disposer } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer } from "@k8slens/utilities"; import catalogEntityRegistryInjectable from "../catalog/entity/registry.injectable"; export type WatchForGeneralEntityNavigation = () => Disposer; diff --git a/packages/core/src/renderer/api/websocket-api.ts b/packages/core/src/renderer/api/websocket-api.ts index b172655dab..eddeda0049 100644 --- a/packages/core/src/renderer/api/websocket-api.ts +++ b/packages/core/src/renderer/api/websocket-api.ts @@ -7,7 +7,7 @@ import { observable, makeObservable } from "mobx"; import EventEmitter from "events"; import type TypedEventEmitter from "typed-emitter"; import type { Arguments } from "typed-emitter"; -import type { Defaulted } from "../utils"; +import type { Defaulted } from "@k8slens/utilities"; import type { DefaultWebsocketApiParams } from "./default-websocket-api-params.injectable"; interface WebsocketApiParams { diff --git a/packages/core/src/renderer/app-paths/setup-app-paths.injectable.ts b/packages/core/src/renderer/app-paths/setup-app-paths.injectable.ts index d69d8dcbab..d80cc668ac 100644 --- a/packages/core/src/renderer/app-paths/setup-app-paths.injectable.ts +++ b/packages/core/src/renderer/app-paths/setup-app-paths.injectable.ts @@ -12,7 +12,6 @@ const setupAppPathsInjectable = getInjectable({ id: "setup-app-paths", instantiate: (di) => ({ - id: "setup-app-paths", run: async () => { const requestFromChannel = di.inject(requestFromChannelInjectionToken); const appPathsState = di.inject(appPathsStateInjectable); diff --git a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts index a1c8c5919a..0cf594062a 100644 --- a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts +++ b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { persistStateToConfigInjectionToken } from "../../common/base-store/save-to-file"; -import { noop } from "../utils"; +import { noop } from "@k8slens/utilities"; const persistStateToConfigInjectable = getInjectable({ id: "persist-state-to-config", diff --git a/packages/core/src/renderer/before-frame-starts/runnables/configure-immer.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/configure-immer.injectable.ts index 73ec9f99bc..a52ed6bc48 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/configure-immer.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/configure-immer.injectable.ts @@ -9,7 +9,6 @@ import { beforeFrameStartsFirstInjectionToken } from "../tokens"; const configureImmerInjectable = getInjectable({ id: "configure-immer", instantiate: () => ({ - id: "configure-immer", run: () => { // Docs: https://immerjs.github.io/immer/ // Required in `utils/storage-helper.ts` diff --git a/packages/core/src/renderer/before-frame-starts/runnables/configure-mobx.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/configure-mobx.injectable.ts index 20953b8a8a..9c91f76a6d 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/configure-mobx.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/configure-mobx.injectable.ts @@ -9,7 +9,6 @@ import { beforeFrameStartsFirstInjectionToken } from "../tokens"; const configureMobxInjectable = getInjectable({ id: "configure-mobx", instantiate: () => ({ - id: "configure-mobx", run: () => { // Docs: https://mobx.js.org/configuration.html configure({ diff --git a/packages/core/src/renderer/before-frame-starts/runnables/load-monaco-themes.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/load-monaco-themes.injectable.ts index ef85a84cd0..f8456bdca6 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/load-monaco-themes.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/load-monaco-themes.injectable.ts @@ -10,7 +10,6 @@ import { beforeFrameStartsSecondInjectionToken } from "../tokens"; const loadMonacoThemesInjectable = getInjectable({ id: "load-monaco-themes", instantiate: (di) => ({ - id: "load-monaco-themes", run: () => { const customThemes = di.injectMany(customMonacoThemeInjectionToken); const addNewMonacoTheme = di.inject(addNewMonacoThemeInjectable); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-auto-registration.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-auto-registration.injectable.ts index 64bc9dee58..dbc77a92b8 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-auto-registration.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-auto-registration.injectable.ts @@ -19,7 +19,6 @@ import maybeKubeApiInjectable from "../../../common/k8s-api/maybe-kube-api.injec const setupAutoRegistrationInjectable = getInjectable({ id: "setup-auto-registration", instantiate: (di) => ({ - id: "setup-auto-registration", run: () => { const autoRegistrationEmitter = di.inject(autoRegistrationEmitterInjectable); const beforeApiManagerInitializationCrds: CustomResourceDefinition[] = []; diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-current-cluster-broadcast.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-current-cluster-broadcast.injectable.ts index a89ba58ec2..0d9c8bc65a 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-current-cluster-broadcast.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-current-cluster-broadcast.injectable.ts @@ -12,7 +12,6 @@ import { beforeMainFrameStartsFirstInjectionToken } from "../tokens"; const setupCurrentClusterBroadcastInjectable = getInjectable({ id: "setup-current-cluster-broadcast", instantiate: (di) => ({ - id: "setup-current-cluster-broadcast", run: () => { const matchedClusterId = di.inject(matchedClusterIdInjectable); const sendMessageToChannel = di.inject(sendMessageToChannelInjectionToken); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts index 5d6efad5eb..e62fb6d830 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts @@ -14,7 +14,6 @@ import { beforeFrameStartsSecondInjectionToken } from "../tokens"; const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({ id: "setup-kubernetes-cluster-catalog-add-menu-listener", instantiate: (di) => ({ - id: "setup-kubernetes-cluster-catalog-add-menu-listener", run: () => { const navigateToAddCluster = di.inject(navigateToAddClusterInjectable); const addSyncEntries = di.inject(addSyncEntriesInjectable); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-context-menu-open.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-context-menu-open.injectable.ts index 6ab67a5286..0775b501b5 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-context-menu-open.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-context-menu-open.injectable.ts @@ -13,7 +13,6 @@ import { beforeFrameStartsSecondInjectionToken } from "../tokens"; const setupKubernetesClusterContextMenuOpenInjectable = getInjectable({ id: "setup-kubernetes-cluster-context-menu-open", instantiate: (di) => ({ - id: "setup-kubernetes-cluster-context-menu-open", run: () => { const catalogCategoryRegistry = di.inject(catalogCategoryRegistryInjectable); const openDeleteClusterDialog = di.inject(openDeleteClusterDialogInjectable); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-lens-proxy-certificate.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-lens-proxy-certificate.injectable.ts index e698eda6dd..d3a01a3eea 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-lens-proxy-certificate.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-lens-proxy-certificate.injectable.ts @@ -10,7 +10,6 @@ import requestLensProxyCertificateInjectable from "../../certificate/request-len const setupLensProxyCertificateInjectable = getInjectable({ id: "setup-lens-proxy-certificate", instantiate: (di) => ({ - id: "setup-lens-proxy-certificate", run: async () => { const requestLensProxyCertificate = di.inject(requestLensProxyCertificateInjectable); const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-root-mac-class.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-root-mac-class.injectable.ts index 56b9ce66fa..241628fe42 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-root-mac-class.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-root-mac-class.injectable.ts @@ -9,7 +9,6 @@ import { beforeFrameStartsSecondInjectionToken } from "../tokens"; const setupRootMacClassnameInjectable = getInjectable({ id: "setup-root-mac-classname", instantiate: (di) => ({ - id: "setup-root-mac-classname", run: () => { const isMac = di.inject(isMacInjectable); const rootElem = document.getElementById("app"); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-sentry.injectable.ts b/packages/core/src/renderer/before-frame-starts/runnables/setup-sentry.injectable.ts index c6af3b7614..0472144249 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-sentry.injectable.ts +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-sentry.injectable.ts @@ -10,7 +10,6 @@ import { init } from "@sentry/electron/renderer"; const setupSentryInjectable = getInjectable({ id: "setup-sentry", instantiate: (di) => ({ - id: "setup-sentry", run: () => { const initializeSentryReportingWith = di.inject(initializeSentryReportingWithInjectable); diff --git a/packages/core/src/renderer/before-frame-starts/runnables/setup-weblink-context-menu-open.injectable.tsx b/packages/core/src/renderer/before-frame-starts/runnables/setup-weblink-context-menu-open.injectable.tsx index 7bf8f29422..ce620894e1 100644 --- a/packages/core/src/renderer/before-frame-starts/runnables/setup-weblink-context-menu-open.injectable.tsx +++ b/packages/core/src/renderer/before-frame-starts/runnables/setup-weblink-context-menu-open.injectable.tsx @@ -9,10 +9,9 @@ import { WeblinkAddCommand } from "../../components/catalog-entities/weblink-add import commandOverlayInjectable from "../../components/command-palette/command-overlay.injectable"; import { beforeFrameStartsSecondInjectionToken } from "../tokens"; -const setupWeblickContextMenuOpenInjectable = getInjectable({ - id: "setup-weblick-context-menu-open", +const setupWeblinkContextMenuOpenInjectable = getInjectable({ + id: "setup-weblink-context-menu-open", instantiate: (di) => ({ - id: "setup-weblick-context-menu-open", run: () => { const catalogCategoryRegistry = di.inject(catalogCategoryRegistryInjectable); const commandOverlay = di.inject(commandOverlayInjectable); @@ -31,4 +30,4 @@ const setupWeblickContextMenuOpenInjectable = getInjectable({ injectionToken: beforeFrameStartsSecondInjectionToken, }); -export default setupWeblickContextMenuOpenInjectable; +export default setupWeblinkContextMenuOpenInjectable; diff --git a/packages/core/src/renderer/before-frame-starts/tokens.ts b/packages/core/src/renderer/before-frame-starts/tokens.ts index 460c44cde9..26cbce9133 100644 --- a/packages/core/src/renderer/before-frame-starts/tokens.ts +++ b/packages/core/src/renderer/before-frame-starts/tokens.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../common/runnable/run-many-for"; +import type { Runnable } from "@k8slens/run-many"; // NOTE: these are run before any other token, mostly to set up things that all other runnables need export const beforeFrameStartsFirstInjectionToken = getInjectionToken({ diff --git a/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts b/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts index a706ea765f..0e15e59078 100644 --- a/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts +++ b/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import bootstrapInjectable from "./bootstrap.injectable"; export default getGlobalOverride(bootstrapInjectable, () => ({ diff --git a/packages/core/src/renderer/bootstrap.injectable.ts b/packages/core/src/renderer/bootstrap.injectable.ts index 9bfb492aa9..7cc172e3f1 100644 --- a/packages/core/src/renderer/bootstrap.injectable.ts +++ b/packages/core/src/renderer/bootstrap.injectable.ts @@ -17,7 +17,7 @@ const bootstrapInjectable = getInjectable({ await bootstrap(di); }, - runAfter: di.inject(startFrameInjectable), + runAfter: startFrameInjectable, }), causesSideEffects: true, diff --git a/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx b/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx index 92fa0b7a03..4ec5ced863 100644 --- a/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx +++ b/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx @@ -14,7 +14,7 @@ import React from "react"; import * as uuid from "uuid"; import { loadConfigFromString, splitConfig } from "../../../common/kube-helpers"; import { docsUrl } from "../../../common/vars"; -import { isDefined, iter } from "../../utils"; +import { isDefined, iter } from "@k8slens/utilities"; import { Button } from "../button"; import type { ShowNotification } from "../notifications"; import { SettingLayout } from "../layout/setting-layout"; diff --git a/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts b/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts index 79deff6544..a18b13d311 100644 --- a/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts +++ b/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts @@ -10,9 +10,9 @@ import catalogCategoryRegistryInjectable from "../../../../common/catalog/catego import { CatalogCategory } from "../../../api/catalog-entity"; import catalogEntityRegistryInjectable from "../../../api/catalog/entity/registry.injectable"; import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; -import { noop } from "../../../utils"; import type { CatalogEntityStore } from "../catalog-entity-store.injectable"; import catalogEntityStoreInjectable from "../catalog-entity-store.injectable"; +import { noop } from "@k8slens/utilities"; class TestEntityOne extends CatalogEntity { public static readonly apiVersion: string = "entity.k8slens.dev/v1alpha1"; diff --git a/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx b/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx index ee7ca30757..0e4531077d 100644 --- a/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx @@ -9,7 +9,6 @@ import { SpeedDial, SpeedDialAction } from "@material-ui/lab"; import { Icon } from "../icon"; import { observer } from "mobx-react"; import { observable, makeObservable, action } from "mobx"; -import { autoBind } from "../../../common/utils"; import type { CatalogCategory, CatalogEntityAddMenu } from "../../api/catalog-entity"; import { EventEmitter } from "events"; import type { CatalogCategoryRegistry } from "../../../common/catalog"; @@ -17,6 +16,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable"; import type { Navigate } from "../../navigation/navigate.injectable"; import navigateInjectable from "../../navigation/navigate.injectable"; +import autoBindReact from "auto-bind/react"; export interface CatalogAddButtonProps { category: CatalogCategory; @@ -37,7 +37,7 @@ class NonInjectedCatalogAddButton extends React.Component; diff --git a/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx b/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx index 1f782d7b6f..0f7544ffc1 100644 --- a/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx +++ b/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import styles from "../catalog.module.scss"; import type { CatalogEntity } from "../../../../common/catalog"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Avatar } from "../../avatar"; import { Icon } from "../../icon"; import React from "react"; diff --git a/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx b/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx index 1c0d13964d..da0da81503 100644 --- a/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx +++ b/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { computed } from "mobx"; -import { getOrInsert, getOrInsertMap } from "../../utils"; +import { getOrInsert, getOrInsertMap } from "@k8slens/utilities"; import { customCatalogCategoryColumnInjectionToken } from "./columns/custom-token"; import type { RegisteredAdditionalCategoryColumn } from "./custom-category-columns"; diff --git a/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts b/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts index c6200f80c6..bccb4d75bf 100644 --- a/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts +++ b/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts @@ -8,7 +8,7 @@ import type { IComputedValue } from "mobx"; import { computed } from "mobx"; import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; -import { getOrInsert, getOrInsertMap } from "../../utils"; +import { getOrInsert, getOrInsertMap } from "@k8slens/utilities"; import type { CustomCategoryViewComponents } from "./custom-views"; interface Dependencies { diff --git a/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts b/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts index 02a6a7ed23..9dfb83cce0 100644 --- a/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts +++ b/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token"; import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension"; import type { CatalogEntity } from "../../../api/catalog-entity"; -import { getRandId } from "../../../utils"; +import * as uuid from "uuid"; import type { CatalogEntityDetailRegistration } from "./token"; import { catalogEntityDetailItemInjectionToken } from "./token"; @@ -28,7 +28,7 @@ const getRegistratorFor = (extension: LensRendererExtension) => ({ kind, priority, }: CatalogEntityDetailRegistration) => getInjectable({ - id: `catalog-entity-detail-item-for-${extension.sanitizedExtensionId}-${getRandId({ sep: "-" })}`, + id: `catalog-entity-detail-item-for-${extension.sanitizedExtensionId}-${uuid.v4()}`, instantiate: () => ({ apiVersions: new Set(apiVersions), components, diff --git a/packages/core/src/renderer/components/+catalog/entity-details/view.tsx b/packages/core/src/renderer/components/+catalog/entity-details/view.tsx index 6b9b92247d..b846e20009 100644 --- a/packages/core/src/renderer/components/+catalog/entity-details/view.tsx +++ b/packages/core/src/renderer/components/+catalog/entity-details/view.tsx @@ -10,7 +10,7 @@ import { Drawer, DrawerItem } from "../../drawer"; import type { CatalogCategory, CatalogEntity } from "../../../../common/catalog"; import { Icon } from "../../icon"; import { CatalogEntityDrawerMenu } from "../catalog-entity-drawer-menu"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Avatar } from "../../avatar"; import type { GetLabelBadges } from "../get-label-badges.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-issues.tsx b/packages/core/src/renderer/components/+cluster/cluster-issues.tsx index 829d7c5c54..d338f23f73 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-issues.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-issues.tsx @@ -12,7 +12,7 @@ import { computed, makeObservable } from "mobx"; import { Icon } from "../icon"; import { SubHeader } from "../layout/sub-header"; import { Table, TableCell, TableHead, TableRow } from "../table"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import type { ItemObject } from "../../../common/item.store"; import { Spinner } from "../spinner"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx b/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx index 028885e7f3..726e37d76e 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx @@ -11,7 +11,7 @@ import type { ChartOptions, ChartPoint } from "chart.js"; import type { ClusterOverviewStore } from "./cluster-overview-store/cluster-overview-store"; import { MetricType } from "./cluster-overview-store/cluster-overview-store"; import { BarChart } from "../chart"; -import { bytesToUnits, cssNames } from "../../utils"; +import { bytesToUnits, cssNames } from "@k8slens/utilities"; import { Spinner } from "../spinner"; import { ZebraStripesPlugin } from "../chart/zebra-stripes.plugin"; import { ClusterNoMetrics } from "./cluster-no-metrics"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx b/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx index ec039835fc..8e90c7f72f 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx @@ -7,7 +7,7 @@ import styles from "./cluster-no-metrics.module.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { NavigateToEntitySettings } from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import navigateToEntitySettingsInjectable from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts b/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts index 943b14dbf9..f417d3219e 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts +++ b/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts @@ -7,12 +7,12 @@ import { action, observable, reaction, when, makeObservable } from "mobx"; import type { KubeObjectStoreDependencies } from "../../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import type { Cluster, ClusterApi } from "../../../../common/k8s-api/endpoints"; -import type { StorageLayer } from "../../../utils"; -import { autoBind } from "../../../utils"; +import type { StorageLayer } from "../../../utils/storage-helper"; import type { NodeStore } from "../../+nodes/store"; import type { ClusterMetricData, RequestClusterMetricsByNodeNames } from "../../../../common/k8s-api/endpoints/metrics.api/request-cluster-metrics-by-node-names.injectable"; import type { RequestMetricsParams } from "../../../../common/k8s-api/endpoints/metrics.api/request-metrics.injectable"; import { normalizeMetrics } from "../../../../common/k8s-api/endpoints/metrics.api"; +import autoBind from "auto-bind"; export enum MetricType { MEMORY = "memory", diff --git a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx index 904311f09e..516a2f9114 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx @@ -11,7 +11,7 @@ import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import type { NodeStore } from "../+nodes/store"; import type { PodStore } from "../+workloads-pods/store"; -import { interval } from "../../utils"; +import { interval } from "@k8slens/utilities"; import { TabLayout } from "../layout/tab-layout"; import { Spinner } from "../spinner"; import { ClusterIssues } from "./cluster-issues"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx b/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx index e0203dd878..6ae370f052 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx @@ -15,7 +15,7 @@ import type { NodeStore } from "../+nodes/store"; import type { PieChartData } from "../chart"; import { PieChart } from "../chart"; import { ClusterNoMetrics } from "./cluster-no-metrics"; -import { bytesToUnits, cssNames } from "../../utils"; +import { bytesToUnits, cssNames } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { getMetricLastPoints } from "../../../common/k8s-api/endpoints/metrics.api"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx index 49130991a5..d57c8a3323 100644 --- a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx +++ b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; import type { KubeObjectDetailsProps } from "../kube-object-details"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { HorizontalPodAutoscalerMetricSpec, HorizontalPodAutoscalerMetricTarget } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { HorizontalPodAutoscaler, HpaMetricType } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Table, TableCell, TableHead, TableRow } from "../table"; diff --git a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx index e7a456b3f1..68ee6671d7 100644 --- a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx +++ b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { HorizontalPodAutoscaler } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Badge } from "../badge"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; diff --git a/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx b/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx index 4706fd0269..23a1dc6267 100644 --- a/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx +++ b/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx @@ -13,10 +13,10 @@ import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import priorityClassStoreInjectable from "./store.injectable"; import type { PriorityClassStore } from "./store"; +import autoBindReact from "auto-bind/react"; enum columnId { name = "name", @@ -36,7 +36,7 @@ interface Dependencies { class NonInjectedPriorityClasses extends React.Component { constructor(props: PriorityClassesProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } render() { diff --git a/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx b/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx index 55ae188cbf..c032de2a25 100644 --- a/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx +++ b/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx @@ -8,7 +8,7 @@ import React from "react"; import kebabCase from "lodash/kebabCase"; import { observer } from "mobx-react"; import { DrawerItem, DrawerTitle } from "../drawer"; -import { cpuUnitsToNumber, cssNames, unitsToBytes, metricUnitsToNumber, object, hasDefinedTupleValue } from "../../utils"; +import { cpuUnitsToNumber, cssNames, unitsToBytes, metricUnitsToNumber, object, hasDefinedTupleValue } from "@k8slens/utilities"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { ResourceQuota } from "../../../common/k8s-api/endpoints/resource-quota.api"; import { LineProgress } from "../line-progress"; diff --git a/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx b/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx index 990912f2d4..d66c9da92f 100644 --- a/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx +++ b/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx @@ -13,10 +13,10 @@ import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import runtimeClassStoreInjectable from "./store.injectable"; import type { RuntimeClassStore } from "./store"; +import autoBindReact from "auto-bind/react"; enum columnId { name = "name", @@ -35,7 +35,7 @@ interface Dependencies { class NonInjectedRuntimeClasses extends React.Component { constructor(props: RuntimeClassesProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } render() { diff --git a/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx b/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx index cf68db93be..e25fe172b6 100644 --- a/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx +++ b/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx @@ -20,9 +20,8 @@ import { SubTitle } from "../../layout/sub-title"; import { NamespaceSelect } from "../../+namespaces/namespace-select"; import { Select } from "../../select"; import { Icon } from "../../icon"; -import { base64, iter } from "../../../utils"; +import { base64, iter, object } from "@k8slens/utilities"; import upperFirst from "lodash/upperFirst"; -import { fromEntries } from "../../../../common/utils/objects"; import type { ShowDetails } from "../../kube-detail-params/show-details.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import closeAddSecretDialogInjectable from "./close.injectable"; @@ -96,7 +95,7 @@ class NonInjectedAddSecretDialog extends React.Component { diff --git a/packages/core/src/renderer/components/+config-secrets/secret-details.tsx b/packages/core/src/renderer/components/+config-secrets/secret-details.tsx index 6b4873f187..57a7a51063 100644 --- a/packages/core/src/renderer/components/+config-secrets/secret-details.tsx +++ b/packages/core/src/renderer/components/+config-secrets/secret-details.tsx @@ -12,7 +12,7 @@ import { DrawerItem, DrawerTitle } from "../drawer"; import { Input } from "../input"; import { Button } from "../button"; import type { ShowNotification } from "../notifications"; -import { base64, toggle } from "../../utils"; +import { base64, toggle } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { Secret } from "../../../common/k8s-api/endpoints"; diff --git a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx index f008fe3350..532ecf39aa 100644 --- a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx +++ b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx @@ -12,7 +12,7 @@ import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; import type { KubeObjectDetailsProps } from "../kube-object-details"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { ContainerScalingMode, ControlledValues, ResourceName, UpdateMode, VerticalPodAutoscaler } from "../../../common/k8s-api/endpoints/vertical-pod-autoscaler.api"; import type { PodUpdatePolicy, PodResourcePolicy, VerticalPodAutoscalerStatus } from "../../../common/k8s-api/endpoints/vertical-pod-autoscaler.api"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; @@ -165,7 +165,7 @@ class NonInjectedVpaDetails extends React.Component ); } - + render() { const { object: vpa, apiManager, getDetailsUrl, logger } = this.props; diff --git a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx index b2bdb4d249..05e3b8cc47 100644 --- a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx +++ b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { Badge } from "../badge"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; diff --git a/packages/core/src/renderer/components/+custom-resources/crd-list.tsx b/packages/core/src/renderer/components/+custom-resources/crd-list.tsx index 669ca3e374..3008ca175e 100644 --- a/packages/core/src/renderer/components/+custom-resources/crd-list.tsx +++ b/packages/core/src/renderer/components/+custom-resources/crd-list.tsx @@ -9,7 +9,7 @@ import React from "react"; import { computed, makeObservable, observable } from "mobx"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; -import { iter, stopPropagation } from "../../utils"; +import { iter, stopPropagation } from "@k8slens/utilities"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { Select } from "../select"; import { Icon } from "../icon"; diff --git a/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx b/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx index 149812f663..6b899563a9 100644 --- a/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx +++ b/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx @@ -7,14 +7,13 @@ import "./crd-resource-details.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames, safeJSONPathValue } from "@k8slens/utilities"; import { Badge } from "../badge"; import { DrawerItem } from "../drawer"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { Input } from "../input"; import type { AdditionalPrinterColumnsV1 } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; -import { safeJSONPathValue } from "../../utils/jsonPath"; import type { KubeObjectMetadata, KubeObjectStatus } from "../../../common/k8s-api/kube-object"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import type { Logger } from "../../../common/logger"; diff --git a/packages/core/src/renderer/components/+custom-resources/crd-resources.tsx b/packages/core/src/renderer/components/+custom-resources/crd-resources.tsx index 3cd0864c36..3f89254d2a 100644 --- a/packages/core/src/renderer/components/+custom-resources/crd-resources.tsx +++ b/packages/core/src/renderer/components/+custom-resources/crd-resources.tsx @@ -11,7 +11,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { IComputedValue } from "mobx"; import { computed, makeObservable } from "mobx"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; -import { formatJSONValue, safeJSONPathValue } from "../../utils/jsonPath"; +import { formatJSONValue, safeJSONPathValue } from "@k8slens/utilities"; import { TabLayout } from "../layout/tab-layout-2"; import { withInjectables } from "@ogre-tools/injectable-react"; import customResourcesRouteParametersInjectable from "./custom-resources-route-parameters.injectable"; diff --git a/packages/core/src/renderer/components/+custom-resources/definition.store.ts b/packages/core/src/renderer/components/+custom-resources/definition.store.ts index bef5c2323e..310e51709a 100644 --- a/packages/core/src/renderer/components/+custom-resources/definition.store.ts +++ b/packages/core/src/renderer/components/+custom-resources/definition.store.ts @@ -6,11 +6,11 @@ import { computed, reaction, makeObservable } from "mobx"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; import type { CustomResourceDefinition, CustomResourceDefinitionApi } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import type TypedEventEmitter from "typed-emitter"; import type { LegacyAutoRegistration } from "../../../common/k8s-api/api-manager/auto-registration-emitter.injectable"; +import autoBind from "auto-bind"; export interface CustomResourceDefinitionStoreDependencies extends KubeObjectStoreDependencies { readonly autoRegistration: TypedEventEmitter; diff --git a/packages/core/src/renderer/components/+events/event-details.tsx b/packages/core/src/renderer/components/+events/event-details.tsx index afe2af1dc5..1e825993c4 100644 --- a/packages/core/src/renderer/components/+events/event-details.tsx +++ b/packages/core/src/renderer/components/+events/event-details.tsx @@ -20,7 +20,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import loggerInjectable from "../../../common/logger.injectable"; export interface EventDetailsProps extends KubeObjectDetailsProps { diff --git a/packages/core/src/renderer/components/+events/events.tsx b/packages/core/src/renderer/components/+events/events.tsx index d68bb21a53..657e10436d 100644 --- a/packages/core/src/renderer/components/+events/events.tsx +++ b/packages/core/src/renderer/components/+events/events.tsx @@ -18,8 +18,8 @@ import type { TableSortCallbacks, TableSortParams } from "../table"; import type { HeaderCustomizer } from "../item-object-list"; import { Tooltip } from "../tooltip"; import { Link } from "react-router-dom"; -import type { IClassName } from "../../utils"; -import { cssNames, stopPropagation } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames, stopPropagation } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+events/kube-event-details.tsx b/packages/core/src/renderer/components/+events/kube-event-details.tsx index 80c6938630..76010a8e14 100644 --- a/packages/core/src/renderer/components/+events/kube-event-details.tsx +++ b/packages/core/src/renderer/components/+events/kube-event-details.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import { DrawerItem, DrawerTitle } from "../drawer"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { LocaleDate } from "../locale-date"; import type { EventStore } from "./store"; import type { Logger } from "../../../common/logger"; diff --git a/packages/core/src/renderer/components/+events/kube-event-icon.tsx b/packages/core/src/renderer/components/+events/kube-event-icon.tsx index 659a65ae39..7a68d951b4 100644 --- a/packages/core/src/renderer/components/+events/kube-event-icon.tsx +++ b/packages/core/src/renderer/components/+events/kube-event-icon.tsx @@ -8,7 +8,7 @@ import "./kube-event-icon.scss"; import React from "react"; import { Icon } from "../icon"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { KubeEvent } from "../../../common/k8s-api/endpoints/events.api"; import { KubeObjectAge } from "../kube-object/age"; import type { EventStore } from "./store"; diff --git a/packages/core/src/renderer/components/+events/store.ts b/packages/core/src/renderer/components/+events/store.ts index 3bb9e0b062..7e14110049 100644 --- a/packages/core/src/renderer/components/+events/store.ts +++ b/packages/core/src/renderer/components/+events/store.ts @@ -7,11 +7,11 @@ import groupBy from "lodash/groupBy"; import compact from "lodash/compact"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; import type { KubeEvent, KubeEventApi } from "../../../common/k8s-api/endpoints/events.api"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { Pod } from "../../../common/k8s-api/endpoints/pod.api"; import type { GetPodById } from "../+workloads-pods/get-pod-by-id.injectable"; +import autoBind from "auto-bind"; export interface EventStoreDependencies extends KubeObjectStoreDependencies { getPodById: GetPodById; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx index 1f3d65c802..523a91596e 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { isObject } from "../../../common/utils"; +import { isObject } from "@k8slens/utilities"; import React from "react"; import { SemVer } from "semver"; import URLParse from "url-parse"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx index 47b18a3772..589c4b704e 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx @@ -12,8 +12,8 @@ import getExtensionDestFolderInjectable from "./get-extension-dest-folder.inject import type { CreateTempFilesAndValidate } from "./create-temp-files-and-validate.injectable"; import createTempFilesAndValidateInjectable from "./create-temp-files-and-validate.injectable"; import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; -import type { Disposer } from "../../../../common/utils"; -import { disposer } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer } from "@k8slens/utilities"; import type { ShowNotification } from "../../notifications"; import { Button } from "../../button"; import type { ExtensionLoader } from "../../../../extensions/extension-loader"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx index c81a69f9b0..5317fbfc48 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx @@ -6,8 +6,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import extensionLoaderInjectable from "../../../../extensions/extension-loader/extension-loader.injectable"; import getExtensionDestFolderInjectable from "./get-extension-dest-folder.injectable"; import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; -import type { Disposer } from "../../../../common/utils"; -import { noop } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { noop } from "@k8slens/utilities"; import { extensionDisplayName } from "../../../../extensions/lens-extension"; import { getMessageFromError } from "../get-message-from-error/get-message-from-error"; import path from "path"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx index e9597b2d10..ee30bda6b4 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { LensExtensionManifest } from "../../../../extensions/lens-extension"; -import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "../../../../common/utils"; +import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "@k8slens/utilities"; import { manifestFilename } from "../../../../extensions/extension-discovery/extension-discovery"; import path from "path"; diff --git a/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts b/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts index ecbb4f9145..ecebfb6e80 100644 --- a/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts +++ b/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { hasTypedProperty, isDefined } from "../../../utils"; +import { hasTypedProperty, isDefined } from "@k8slens/utilities"; export function getMessageFromError(error: unknown): string { if (!error || typeof error !== "object") { diff --git a/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx b/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx index 3f9e5b0949..e879599299 100644 --- a/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; -import type { ExtendableDisposer } from "../../../common/utils"; +import type { ExtendableDisposer } from "@k8slens/utilities"; import { InputValidators } from "../input"; import { getMessageFromError } from "./get-message-from-error/get-message-from-error"; import { getInjectable } from "@ogre-tools/injectable"; diff --git a/packages/core/src/renderer/components/+extensions/install.tsx b/packages/core/src/renderer/components/+extensions/install.tsx index 7572063796..63c09f8b18 100644 --- a/packages/core/src/renderer/components/+extensions/install.tsx +++ b/packages/core/src/renderer/components/+extensions/install.tsx @@ -5,7 +5,7 @@ import styles from "./install.module.scss"; import React from "react"; -import { prevDefault } from "../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { observer } from "mobx-react"; diff --git a/packages/core/src/renderer/components/+extensions/installed-extensions.tsx b/packages/core/src/renderer/components/+extensions/installed-extensions.tsx index 60579ca3ec..8447f0656f 100644 --- a/packages/core/src/renderer/components/+extensions/installed-extensions.tsx +++ b/packages/core/src/renderer/components/+extensions/installed-extensions.tsx @@ -13,7 +13,7 @@ import { Icon } from "../icon"; import { List } from "../list/list"; import { MenuActions, MenuItem } from "../menu"; import { Spinner } from "../spinner"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import type { Row } from "react-table"; import type { LensExtensionId } from "../../../extensions/lens-extension"; diff --git a/packages/core/src/renderer/components/+extensions/notice.tsx b/packages/core/src/renderer/components/+extensions/notice.tsx index 6626a2233a..af4de297c2 100644 --- a/packages/core/src/renderer/components/+extensions/notice.tsx +++ b/packages/core/src/renderer/components/+extensions/notice.tsx @@ -6,7 +6,7 @@ import styles from "./notice.module.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface NoticeProps extends DOMAttributes { className?: string; diff --git a/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx b/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx index cf2b781e66..2004a8704c 100644 --- a/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx +++ b/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx @@ -9,7 +9,7 @@ import React, { Component } from "react"; import type { HelmChart } from "../../../common/k8s-api/endpoints/helm-charts.api"; import { observer } from "mobx-react"; import { Drawer, DrawerItem } from "../drawer"; -import { autoBind, stopPropagation } from "../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import { MarkdownViewer } from "../markdown-viewer"; import { Spinner } from "../spinner"; import { Button } from "../button"; @@ -25,6 +25,7 @@ import versionsOfSelectedHelmChartInjectable from "./details/versions-of-selecte import type { HelmChartDetailsVersionSelection } from "./details/versions/helm-chart-details-version-selection.injectable"; import helmChartDetailsVersionSelectionInjectable from "./details/versions/helm-chart-details-version-selection.injectable"; import assert from "assert"; +import autoBindReact from "auto-bind/react"; export interface HelmChartDetailsProps { hideDetails(): void; @@ -48,7 +49,7 @@ interface Dependencies { class NonInjectedHelmChartDetails extends Component { constructor(props: HelmChartDetailsProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } get chart() { diff --git a/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts b/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts index b49d94fb10..ab646d3b03 100644 --- a/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts +++ b/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { HelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api"; import requestHelmChartVersionsInjectable from "../../../../common/k8s-api/endpoints/helm-charts.api/request-versions.injectable"; import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api"; -import { sortBySemverVersion } from "../../../utils"; +import { sortBySemverVersion } from "@k8slens/utilities"; import type { HelmChartVersion } from "./versions"; /** diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx index ebfb51c6ef..5f7a3bda70 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx @@ -9,7 +9,7 @@ import React from "react"; import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../../drawer"; -import { stopPropagation } from "../../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { ConfigurationInput, MinimalResourceGroup, OnlyUserSuppliedValuesAreShownToggle, ReleaseDetailsModel } from "./release-details-model/release-details-model.injectable"; diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx index 67676ce337..dc740c4c41 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx @@ -8,7 +8,7 @@ import "./release-details.scss"; import React from "react"; import { Drawer } from "../../drawer"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { TargetHelmRelease } from "./target-helm-release.injectable"; diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable.ts b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable.ts index aa5a2e9121..43125a87b0 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable.ts +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/request-detailed-helm-release.injectable.ts @@ -7,7 +7,7 @@ import type { HelmReleaseDto } from "../../../../../common/k8s-api/endpoints/hel import requestHelmReleasesInjectable from "../../../../../common/k8s-api/endpoints/helm-releases.api/request-releases.injectable"; import type { HelmReleaseDetails } from "../../../../../common/k8s-api/endpoints/helm-releases.api/request-details.injectable"; import requestHelmReleaseDetailsInjectable from "../../../../../common/k8s-api/endpoints/helm-releases.api/request-details.injectable"; -import type { AsyncResult } from "../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export interface DetailedHelmRelease { release: HelmReleaseDto; @@ -17,7 +17,7 @@ export interface DetailedHelmRelease { export type RequestDetailedHelmRelease = ( name: string, namespace: string -) => Promise>; +) => AsyncResult; const requestDetailedHelmReleaseInjectable = getInjectable({ id: "request-detailed-helm-release", diff --git a/packages/core/src/renderer/components/+helm-releases/release-menu.tsx b/packages/core/src/renderer/components/+helm-releases/release-menu.tsx index 694dd69b3c..be40e59b11 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-menu.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-menu.tsx @@ -5,7 +5,7 @@ import React from "react"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { MenuActionsProps } from "../menu/menu-actions"; import { MenuActions } from "../menu/menu-actions"; import { MenuItem } from "../menu"; diff --git a/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts b/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts index d8b27625e6..d069eb5929 100644 --- a/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts +++ b/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts @@ -8,7 +8,7 @@ import { when } from "mobx"; import helmChartVersionsInjectable from "../+helm-charts/helm-charts/versions.injectable"; import type { HelmRelease, HelmReleaseDto } from "../../../common/k8s-api/endpoints/helm-releases.api"; import { getMillisecondsFromUnixEpoch } from "../../../common/utils/date/get-current-date-time"; -import { formatDuration } from "../../utils"; +import { formatDuration } from "@k8slens/utilities"; export type ToHelmRelease = (release: HelmReleaseDto) => HelmRelease; diff --git a/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx b/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx index 6f85253ce9..3dabbdf572 100644 --- a/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx +++ b/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx @@ -20,9 +20,9 @@ import namespaceStoreInjectable from "../store.injectable"; import addNamespaceDialogStateInjectable from "./state.injectable"; import type { NamespaceStore } from "../store"; -import { autoBind } from "../../../utils"; import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable"; import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable"; +import autoBindReact from "auto-bind/react"; export interface AddNamespaceDialogProps extends DialogProps { onSuccess?(ns: Namespace): void; @@ -42,7 +42,7 @@ class NonInjectedAddNamespaceDialog extends React.Component { id: string; diff --git a/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx b/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx index 700f1fdbf8..11b353536c 100644 --- a/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx +++ b/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx @@ -11,11 +11,11 @@ import type { EndpointSubset, Endpoints, EndpointAddress } from "../../../common import { Table, TableCell, TableHead, TableRow } from "../table"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; import { Link } from "react-router-dom"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; +import autoBindReact from "auto-bind/react"; export interface EndpointSubsetListProps { subset: Required; @@ -31,7 +31,7 @@ interface Dependencies { class NonInjectedEndpointSubsetList extends React.Component { constructor(props: EndpointSubsetListProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } getAddressTableRow(ip: string) { diff --git a/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx b/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx index 7b7fe8c0de..a4745e9a8f 100644 --- a/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx +++ b/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx @@ -13,7 +13,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { IngressClassStore } from "./ingress-class-store"; import ingressClassStoreInjectable from "./ingress-class-store.injectable"; import type { IngressClass } from "../../../common/k8s-api/endpoints/ingress-class.api"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; enum columnId { diff --git a/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx b/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx index ba59ad7c10..b36ce40ea1 100644 --- a/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx +++ b/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx @@ -10,7 +10,7 @@ import { Link } from "react-router-dom"; import type { PortForwardItem } from "../../port-forward"; import { portForwardAddress } from "../../port-forward"; import { Drawer, DrawerItem } from "../drawer"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PodApi, ServiceApi } from "../../../common/k8s-api/endpoints"; import { PortForwardMenu } from "./port-forward-menu"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx b/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx index 5fe46e1994..81e15b1746 100644 --- a/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx +++ b/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PortForwardItem, PortForwardStore } from "../../port-forward"; import type { MenuActionsProps } from "../menu/menu-actions"; import { MenuActions } from "../menu/menu-actions"; @@ -17,6 +17,7 @@ import portForwardStoreInjectable from "../../port-forward/port-forward-store/po import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable"; import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable"; import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable"; +import autoBindReact from "auto-bind/react"; export interface PortForwardMenuProps extends MenuActionsProps { portForward: PortForwardItem; @@ -33,7 +34,7 @@ interface Dependencies { class NonInjectedPortForwardMenu extends React.Component { constructor(props: Props) { super(props); - autoBind(this); + autoBindReact(this); } remove() { diff --git a/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx b/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx index 7e3eaaf34b..324f035fa7 100644 --- a/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx +++ b/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx @@ -6,7 +6,7 @@ import { observer } from "mobx-react"; import React from "react"; import { Table, TableHead, TableCell, TableRow } from "../table"; -import { prevDefault } from "../../utils"; +import { prevDefault } from "@k8slens/utilities"; import type { Logger } from "../../../common/logger"; import { Endpoints } from "../../../common/k8s-api/endpoints"; import type { ShowDetails } from "../kube-detail-params/show-details.injectable"; diff --git a/packages/core/src/renderer/components/+network-services/service-port-component.tsx b/packages/core/src/renderer/components/+network-services/service-port-component.tsx index b81ef1350d..7b2c5bdfba 100644 --- a/packages/core/src/renderer/components/+network-services/service-port-component.tsx +++ b/packages/core/src/renderer/components/+network-services/service-port-component.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import type { Service, ServicePort } from "../../../common/k8s-api/endpoints"; import { action, makeObservable, observable, reaction } from "mobx"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ShowNotification } from "../notifications"; import { Button } from "../button"; import type { ForwardedPort, PortForwardStore } from "../../port-forward"; diff --git a/packages/core/src/renderer/components/+nodes/route.tsx b/packages/core/src/renderer/components/+nodes/route.tsx index a868dda39b..99e5900c87 100644 --- a/packages/core/src/renderer/components/+nodes/route.tsx +++ b/packages/core/src/renderer/components/+nodes/route.tsx @@ -6,13 +6,12 @@ import "./nodes.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames, interval } from "../../utils"; +import { bytesToUnits, cssNames, interval } from "@k8slens/utilities"; import { TabLayout } from "../layout/tab-layout-2"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { Node } from "../../../common/k8s-api/endpoints/node.api"; import { formatNodeTaint } from "../../../common/k8s-api/endpoints/node.api"; import { LineProgress } from "../line-progress"; -import { bytesToUnits } from "../../../common/utils/convertMemory"; import { Tooltip, TooltipPosition } from "../tooltip"; import kebabCase from "lodash/kebabCase"; import upperFirst from "lodash/upperFirst"; diff --git a/packages/core/src/renderer/components/+nodes/store.ts b/packages/core/src/renderer/components/+nodes/store.ts index 87fafa9256..6cfedd7dfc 100644 --- a/packages/core/src/renderer/components/+nodes/store.ts +++ b/packages/core/src/renderer/components/+nodes/store.ts @@ -2,13 +2,13 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import autoBind from "auto-bind"; import { sum } from "lodash"; import { computed, makeObservable } from "mobx"; import type { Node, NodeApi } from "../../../common/k8s-api/endpoints"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; export class NodeStore extends KubeObjectStore { constructor(dependencies: KubeObjectStoreDependencies, api: NodeApi, opts?: KubeObjectStoreOptions) { diff --git a/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx b/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx index 954bad9bc5..6447faa4f4 100644 --- a/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx +++ b/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx @@ -19,7 +19,7 @@ import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.inject import type { PodStore } from "../+workloads-pods/store"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable"; -import { stopPropagation } from "../../../renderer/utils"; +import { stopPropagation } from "@k8slens/utilities"; import storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx index 39ec81f8de..0e04c92f49 100644 --- a/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx +++ b/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx @@ -9,8 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { unitsToBytes } from "../../../common/utils/convertMemory"; -import { stopPropagation } from "../../utils"; +import { unitsToBytes, stopPropagation } from "@k8slens/utilities"; import type { StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx b/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx index ebc471a933..2d2acfb615 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import type { PersistentVolume } from "../../../common/k8s-api/endpoints/persistent-volume.api"; import { TableRow } from "../table/table-row"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { TableCell } from "../table/table-cell"; import { Spinner } from "../spinner/spinner"; import { DrawerTitle } from "../drawer/drawer-title"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx b/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx index 93b3a40195..ab7e1e48b2 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx @@ -15,7 +15,7 @@ import type { PersistentVolumeClaimApi, StorageClassApi } from "../../../common/ import { PersistentVolume } from "../../../common/k8s-api/endpoints"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { Logger } from "../../../common/logger"; -import { stopPropagation } from "../../../renderer/utils"; +import { stopPropagation } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import loggerInjectable from "../../../common/logger.injectable"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volumes.tsx b/packages/core/src/renderer/components/+storage-volumes/volumes.tsx index ac3bf08e5a..c1cdd3d09a 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volumes.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volumes.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { stopPropagation } from "../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import type { PersistentVolumeClaimApi, StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; diff --git a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx index 87de375bed..8c0b39f590 100644 --- a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx +++ b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx @@ -10,7 +10,7 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import type { ClusterRoleBinding } from "../../../../common/k8s-api/endpoints"; -import { autoBind, ObservableHashSet, prevDefault } from "../../../utils"; +import { ObservableHashSet, prevDefault } from "@k8slens/utilities"; import { AddRemoveButtons } from "../../add-remove-buttons"; import { DrawerTitle } from "../../drawer"; import type { KubeObjectDetailsProps } from "../../kube-object-details"; @@ -23,6 +23,7 @@ import type { ClusterRoleBindingStore } from "./store"; import type { OpenClusterRoleBindingDialog } from "./dialog/open.injectable"; import openClusterRoleBindingDialogInjectable from "./dialog/open.injectable"; import clusterRoleBindingStoreInjectable from "./store.injectable"; +import autoBindReact from "auto-bind/react"; export interface ClusterRoleBindingDetailsProps extends KubeObjectDetailsProps { } @@ -39,7 +40,7 @@ class NonInjectedClusterRoleBindingDetails extends React.Component item.getName() === binding.roleRef.name); - const [saSubjects, uSubjects, gSubjects] = nFircate(binding.getSubjects(), "kind", ["ServiceAccount", "User", "Group"]); + const [saSubjects, uSubjects, gSubjects] = iter.nFircate(binding.getSubjects(), "kind", ["ServiceAccount", "User", "Group"]); const accountNames = new Set(saSubjects.map(acc => acc.name)); this.selectedAccounts.replace( diff --git a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/store.ts b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/store.ts index 01637aa815..e1e6a43fbf 100644 --- a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/store.ts +++ b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/store.ts @@ -6,7 +6,7 @@ import type { ClusterRoleBinding, ClusterRoleBindingApi, ClusterRoleBindingData } from "../../../../common/k8s-api/endpoints"; import type { Subject } from "../../../../common/k8s-api/endpoints/types/subject"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; -import { HashSet } from "../../../utils"; +import { HashSet } from "@k8slens/utilities"; import { hashSubject } from "../hashers"; export class ClusterRoleBindingStore extends KubeObjectStore { diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx b/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx index c83caddeec..474e071d86 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx @@ -9,12 +9,11 @@ import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import type { RoleBinding } from "../../../../common/k8s-api/endpoints"; -import { prevDefault } from "../../../utils"; +import { prevDefault, ObservableHashSet } from "@k8slens/utilities"; import { AddRemoveButtons } from "../../add-remove-buttons"; import { DrawerTitle } from "../../drawer"; import type { KubeObjectDetailsProps } from "../../kube-object-details"; import { Table, TableCell, TableHead, TableRow } from "../../table"; -import { ObservableHashSet } from "../../../../common/utils/hash-set"; import { hashSubject } from "../hashers"; import type { OpenConfirmDialog } from "../../confirm-dialog/open.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx b/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx index 77f1724708..ada6080c0d 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx @@ -20,7 +20,7 @@ import type { SelectOption } from "../../../select"; import { onMultiSelectFor, Select } from "../../../select"; import { Wizard, WizardStep } from "../../../wizard"; import { Input } from "../../../input"; -import { ObservableHashSet, nFircate } from "../../../../utils"; +import { ObservableHashSet, iter } from "@k8slens/utilities"; import type { Subject } from "../../../../../common/k8s-api/endpoints/types/subject"; import type { RoleBindingDialogState } from "./state.injectable"; import type { RoleBindingStore } from "../store"; @@ -147,7 +147,7 @@ class NonInjectedRoleBindingDialog extends React.Component acc.name)); this.selectedAccounts.replace( diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts b/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts index 937497113c..f3a4c1e54a 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts @@ -6,7 +6,7 @@ import type { RoleBinding, RoleBindingApi, RoleBindingData } from "../../../../common/k8s-api/endpoints"; import type { Subject } from "../../../../common/k8s-api/endpoints/types/subject"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; -import { HashSet } from "../../../utils"; +import { HashSet } from "@k8slens/utilities"; import { hashSubject } from "../hashers"; export class RoleBindingStore extends KubeObjectStore { diff --git a/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx b/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx index 49acaa9ca8..6e645abbf9 100644 --- a/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx +++ b/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx @@ -9,7 +9,7 @@ import moment from "moment"; import React from "react"; import type { Secret } from "../../../../common/k8s-api/endpoints/secret.api"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Icon } from "../../icon"; export interface ServiceAccountsSecretProps { diff --git a/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx b/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx index 48ff80dc28..f95d41fc27 100644 --- a/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx +++ b/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx @@ -14,7 +14,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import type { CronJob, JobApi } from "../../../../common/k8s-api/endpoints"; import type { ShowNotification } from "../../notifications"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Input } from "../../input"; import { systemName, maxLength } from "../../input/input_validators"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx b/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx index 655b810780..dae3de03bc 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import type { ReplicaSet } from "../../../common/k8s-api/endpoints"; import { KubeObjectMenu } from "../kube-object-menu"; import { Spinner } from "../spinner"; -import { prevDefault, stopPropagation } from "../../utils"; +import { prevDefault, stopPropagation } from "@k8slens/utilities"; import { DrawerTitle } from "../drawer"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx b/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx index 6fa9fff211..83b6ed1f82 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import type { Deployment } from "../../../common/k8s-api/endpoints"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import kebabCase from "lodash/kebabCase"; import orderBy from "lodash/orderBy"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx b/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx index d6c8b0fcaa..c4e7857a9b 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx @@ -15,7 +15,7 @@ import { Wizard, WizardStep } from "../../wizard"; import type { Deployment, DeploymentApi } from "../../../../common/k8s-api/endpoints"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import deploymentApiInjectable from "../../../../common/k8s-api/endpoints/deployment.api.injectable"; import deploymentScaleDialogStateInjectable from "./dialog-state.injectable"; diff --git a/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx b/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx index 41d947b326..145f6ee103 100644 --- a/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx +++ b/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx @@ -10,7 +10,7 @@ import capitalize from "lodash/capitalize"; import { observer } from "mobx-react"; import type { PieChartData } from "../chart"; import { PieChart } from "../chart"; -import { object } from "../../utils"; +import { object } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { PascalCase } from "type-fest"; diff --git a/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx b/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx index c7ca22c87f..a0c1751bbc 100644 --- a/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { displayMode } from "../../../../../utils"; +import { displayMode } from "@k8slens/utilities"; import { DrawerItem, DrawerTitle } from "../../../../drawer"; import type { VolumeVariantComponent } from "../variant-helpers"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx index 88a7667e6b..977c945f18 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx @@ -11,7 +11,7 @@ import type { Container, EnvVarKeySelector, Secret } from "../../../common/k8s-a import { DrawerItem } from "../drawer"; import { autorun } from "mobx"; import { Icon } from "../icon"; -import { base64, cssNames, object } from "../../utils"; +import { base64, cssNames, object } from "@k8slens/utilities"; import _ from "lodash"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { ConfigMapStore } from "../+config-maps/store"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx index eb2464f664..74bced05fb 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import type { ContainerPort, Pod } from "../../../common/k8s-api/endpoints"; import { action, makeObservable, observable, reaction } from "mobx"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ShowNotification } from "../notifications"; import { Button } from "../button"; import type { ForwardedPort, PortForwardStore } from "../../port-forward"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx index 01ee8eb6ee..00db1af71b 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx @@ -8,7 +8,7 @@ import "./pod-details-container.scss"; import React from "react"; import type { Container, PodContainerStatus, Pod } from "../../../common/k8s-api/endpoints"; import { DrawerItem } from "../drawer"; -import { cssNames, isDefined } from "../../utils"; +import { cssNames, isDefined } from "@k8slens/utilities"; import { StatusBrick } from "../status-brick"; import { Badge } from "../badge"; import { ContainerEnvironment } from "./pod-container-env"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx index 2eb291ac7c..06cfa5a2a7 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx @@ -10,7 +10,7 @@ import kebabCase from "lodash/kebabCase"; import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import type { Pod } from "../../../common/k8s-api/endpoints"; -import { autoBind, bytesToUnits, cssNames, interval, prevDefault } from "../../utils"; +import { bytesToUnits, cssNames, interval, prevDefault } from "@k8slens/utilities"; import { LineProgress } from "../line-progress"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { Table, TableCell, TableHead, TableRow } from "../table"; @@ -22,6 +22,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import podStoreInjectable from "./store.injectable"; import type { ShowDetails } from "../kube-detail-params/show-details.injectable"; import showDetailsInjectable from "../kube-detail-params/show-details.injectable"; +import autoBindReact from "auto-bind/react"; enum sortBy { name = "name", @@ -47,7 +48,7 @@ interface Dependencies { class NonInjectedPodDetailsList extends React.Component { constructor(props: PodDetailsListProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } private metricsWatcher = interval(120, () => { diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx index 604cec5cd5..7707dd6b1d 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx @@ -13,7 +13,7 @@ import { Pod } from "../../../common/k8s-api/endpoints"; import type { NodeApi, PriorityClassApi, RuntimeClassApi, ServiceAccountApi } from "../../../common/k8s-api/endpoints"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; -import { cssNames, stopPropagation, toJS } from "../../utils"; +import { cssNames, stopPropagation } from "@k8slens/utilities"; import { PodDetailsContainer } from "./pod-details-container"; import { PodDetailsAffinities } from "./pod-details-affinities"; import { PodDetailsTolerations } from "./pod-details-tolerations"; @@ -33,6 +33,7 @@ import priorityClassApiInjectable from "../../../common/k8s-api/endpoints/priori import loggerInjectable from "../../../common/logger.injectable"; import type { PodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable"; import podContainerMetricsInjectable from "./container-metrics.injectable"; +import { toJS } from "../../../common/utils"; export interface PodDetailsProps extends KubeObjectDetailsProps { } diff --git a/packages/core/src/renderer/components/+workloads-pods/pods.tsx b/packages/core/src/renderer/components/+workloads-pods/pods.tsx index ab793359b0..3f310c2b76 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pods.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pods.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { NodeApi, Pod } from "../../../common/k8s-api/endpoints"; import { StatusBrick } from "../status-brick"; -import { cssNames, getConvertedParts, object, stopPropagation } from "../../utils"; +import { cssNames, getConvertedParts, object, stopPropagation } from "@k8slens/utilities"; import startCase from "lodash/startCase"; import kebabCase from "lodash/kebabCase"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; diff --git a/packages/core/src/renderer/components/+workloads-pods/store.ts b/packages/core/src/renderer/components/+workloads-pods/store.ts index 5ce9dca041..18c98fc4ab 100644 --- a/packages/core/src/renderer/components/+workloads-pods/store.ts +++ b/packages/core/src/renderer/components/+workloads-pods/store.ts @@ -7,7 +7,7 @@ import countBy from "lodash/countBy"; import { observable } from "mobx"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { cpuUnitsToNumber, unitsToBytes } from "../../utils"; +import { cpuUnitsToNumber, unitsToBytes } from "@k8slens/utilities"; import type { Pod, PodMetrics, PodApi, PodMetricsApi } from "../../../common/k8s-api/endpoints"; import type { KubeObject, NamespaceScopedMetadata } from "../../../common/k8s-api/kube-object"; diff --git a/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx b/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx index 9999917bdb..bb060890e8 100644 --- a/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx @@ -14,7 +14,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ReplicaSet, ReplicaSetApi } from "../../../../common/k8s-api/endpoints"; import { withInjectables } from "@ogre-tools/injectable-react"; import replicaSetApiInjectable from "../../../../common/k8s-api/endpoints/replica-set.api.injectable"; diff --git a/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx b/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx index 39d8969e03..a7ebe915c6 100644 --- a/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx @@ -15,7 +15,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable"; import statefulSetDialogStateInjectable from "./dialog-state.injectable"; diff --git a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx index e38e0ffe67..b1d7b68d32 100644 --- a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx +++ b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx @@ -6,7 +6,7 @@ import "./add-remove-buttons.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; diff --git a/packages/core/src/renderer/components/animate/animate.tsx b/packages/core/src/renderer/components/animate/animate.tsx index aa0d673570..6a7870e336 100644 --- a/packages/core/src/renderer/components/animate/animate.tsx +++ b/packages/core/src/renderer/components/animate/animate.tsx @@ -5,7 +5,7 @@ import "./animate.scss"; import React, { useEffect, useState } from "react"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { RequestAnimationFrame } from "./request-animation-frame.injectable"; import requestAnimationFrameInjectable from "./request-animation-frame.injectable"; diff --git a/packages/core/src/renderer/components/avatar/avatar.tsx b/packages/core/src/renderer/components/avatar/avatar.tsx index a3b9837295..84892b081c 100644 --- a/packages/core/src/renderer/components/avatar/avatar.tsx +++ b/packages/core/src/renderer/components/avatar/avatar.tsx @@ -9,8 +9,8 @@ import type { ImgHTMLAttributes, MouseEventHandler } from "react"; import React from "react"; import randomColor from "randomcolor"; import GraphemeSplitter from "grapheme-splitter"; -import type { SingleOrMany } from "../../utils"; -import { cssNames, isDefined, iter } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames, isDefined, iter } from "@k8slens/utilities"; export interface AvatarProps { title: string; diff --git a/packages/core/src/renderer/components/badge/badge.tsx b/packages/core/src/renderer/components/badge/badge.tsx index f0efb701bd..5fe12ade09 100644 --- a/packages/core/src/renderer/components/badge/badge.tsx +++ b/packages/core/src/renderer/components/badge/badge.tsx @@ -8,7 +8,7 @@ import styles from "./badge.module.scss"; import React, { useEffect, useRef, useState } from "react"; import { action, observable } from "mobx"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils/cssNames"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface BadgeProps extends React.HTMLAttributes { diff --git a/packages/core/src/renderer/components/button/button.tsx b/packages/core/src/renderer/components/button/button.tsx index 8168c2abf3..e72a874641 100644 --- a/packages/core/src/renderer/components/button/button.tsx +++ b/packages/core/src/renderer/components/button/button.tsx @@ -6,7 +6,7 @@ import "./button.scss"; import type { ButtonHTMLAttributes } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface ButtonProps extends ButtonHTMLAttributes { diff --git a/packages/core/src/renderer/components/chart/bar-chart.tsx b/packages/core/src/renderer/components/chart/bar-chart.tsx index e5c0e901d8..49a656cbf7 100644 --- a/packages/core/src/renderer/components/chart/bar-chart.tsx +++ b/packages/core/src/renderer/components/chart/bar-chart.tsx @@ -11,7 +11,7 @@ import { observer } from "mobx-react"; import type { ChartOptions, ChartTooltipCallback, ChartTooltipItem, Scriptable } from "chart.js"; import type { ChartProps } from "./chart"; import { Chart, ChartKind } from "./chart"; -import { bytesToUnits, cssNames, isObject } from "../../utils"; +import { bytesToUnits, cssNames, isObject } from "@k8slens/utilities"; import { ZebraStripesPlugin } from "./zebra-stripes.plugin"; import type { LensTheme } from "../../themes/lens-theme"; import { NoMetrics } from "../resource-metrics/no-metrics"; diff --git a/packages/core/src/renderer/components/chart/chart.tsx b/packages/core/src/renderer/components/chart/chart.tsx index 3d54b90302..27ab820a19 100644 --- a/packages/core/src/renderer/components/chart/chart.tsx +++ b/packages/core/src/renderer/components/chart/chart.tsx @@ -9,7 +9,7 @@ import React from "react"; import type { PluginServiceRegistrationOptions } from "chart.js"; import ChartJS from "chart.js"; import { remove } from "lodash"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { StatusBrick } from "../status-brick"; import { Badge } from "../badge"; diff --git a/packages/core/src/renderer/components/chart/options.ts b/packages/core/src/renderer/components/chart/options.ts index 106664d26d..24a6dc5fd4 100644 --- a/packages/core/src/renderer/components/chart/options.ts +++ b/packages/core/src/renderer/components/chart/options.ts @@ -4,7 +4,7 @@ */ import type { ChartOptions, ChartPoint } from "chart.js"; -import { bytesToUnits, isDefined } from "../../utils"; +import { bytesToUnits, isDefined } from "@k8slens/utilities"; export type MetricsTab = "CPU" | "Memory" | "Disk" | "Pods" | "Network" | "Filesystem" | "Duration"; diff --git a/packages/core/src/renderer/components/chart/pie-chart.tsx b/packages/core/src/renderer/components/chart/pie-chart.tsx index de1461631a..9db4bca62f 100644 --- a/packages/core/src/renderer/components/chart/pie-chart.tsx +++ b/packages/core/src/renderer/components/chart/pie-chart.tsx @@ -10,7 +10,7 @@ import type { ChartOptions } from "chart.js"; import ChartJS from "chart.js"; import type { ChartProps } from "./chart"; import { Chart } from "./chart"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { IComputedValue } from "mobx"; diff --git a/packages/core/src/renderer/components/checkbox/checkbox.tsx b/packages/core/src/renderer/components/checkbox/checkbox.tsx index ecba55378e..4193f1d283 100644 --- a/packages/core/src/renderer/components/checkbox/checkbox.tsx +++ b/packages/core/src/renderer/components/checkbox/checkbox.tsx @@ -5,8 +5,8 @@ import "./checkbox.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames, noop } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; export interface CheckboxProps { className?: string; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts b/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts index ef526f9683..08a49bb496 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts +++ b/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts @@ -5,12 +5,13 @@ import { action, makeObservable, observable, when } from "mobx"; import type { ClusterId } from "../../../common/cluster-types"; -import type { Disposer } from "../../utils"; -import { getClusterFrameUrl, onceDefined } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { onceDefined } from "@k8slens/utilities"; import assert from "assert"; import type { Logger } from "../../../common/logger"; import type { GetClusterById } from "../../../common/cluster-store/get-by-id.injectable"; import type { EmitClusterVisibility } from "./emit-cluster-visibility.injectable"; +import { getClusterFrameUrl } from "../../../common/utils"; export interface LensView { isLoaded: boolean; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx b/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx index ab418ec827..68dea9a2d3 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx +++ b/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx @@ -17,11 +17,11 @@ import catalogPreviousActiveTabStorageInjectable from "../+catalog/catalog-previ import type { IComputedValue } from "mobx"; import currentRouteComponentInjectable from "../../routes/current-route-component.injectable"; import welcomeRouteInjectable from "../../../common/front-end-routing/routes/welcome/welcome-route.injectable"; -import { buildURL } from "../../../common/utils/buildUrl"; -import type { StorageLayer } from "../../utils"; +import { buildURL } from "@k8slens/utilities"; import type { WatchForGeneralEntityNavigation } from "../../api/helpers/watch-for-general-entity-navigation.injectable"; import watchForGeneralEntityNavigationInjectable from "../../api/helpers/watch-for-general-entity-navigation.injectable"; import currentPathInjectable from "../../routes/current-path.injectable"; +import type { StorageLayer } from "../../utils/storage-helper"; interface Dependencies { catalogPreviousActiveTabStorage: StorageLayer; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx b/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx index d16fb1dd56..36e5f2e37c 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx +++ b/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx @@ -10,8 +10,8 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import { ipcRendererOn } from "../../../common/ipc"; import type { Cluster } from "../../../common/cluster/cluster"; -import type { IClassName } from "../../utils"; -import { hasTypedProperty, isObject, isString, cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { hasTypedProperty, isObject, isString, cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { Spinner } from "../spinner"; diff --git a/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx b/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx index 55e4b21828..f5813368e8 100644 --- a/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx +++ b/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx @@ -5,13 +5,13 @@ import React from "react"; import type { Cluster } from "../../../common/cluster/cluster"; -import { autoBind } from "../../utils"; import { observable } from "mobx"; import { observer } from "mobx-react"; import type { KubernetesCluster } from "../../../common/catalog-entities"; import { FilePicker, OverSizeLimitStyle } from "../file-picker"; import { MenuActions, MenuItem } from "../menu"; import { Avatar } from "../avatar"; +import autoBindReact from "auto-bind/react"; enum GeneralInputStatus { CLEAN = "clean", @@ -30,7 +30,7 @@ export class ClusterIconSetting extends React.Component constructor(props: ClusterIconSettingProps) { super(props); - autoBind(this); + autoBindReact(this); } private element = React.createRef(); diff --git a/packages/core/src/renderer/components/command-palette/command-container.tsx b/packages/core/src/renderer/components/command-palette/command-container.tsx index ca3d36bb00..bc8f38141b 100644 --- a/packages/core/src/renderer/components/command-palette/command-container.tsx +++ b/packages/core/src/renderer/components/command-palette/command-container.tsx @@ -22,7 +22,7 @@ import matchedClusterIdInjectable from "../../navigation/matched-cluster-id.inje import hostedClusterIdInjectable from "../../cluster-frame-context/hosted-cluster-id.injectable"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; import legacyOnChannelListenInjectable from "../../ipc/legacy-channel-listen.injectable"; -import { onKeyboardShortcut } from "../../utils/on-keyboard-shortcut"; +import { onKeyboardShortcut } from "@k8slens/utilities"; interface Dependencies { addWindowEventListener: AddWindowEventListener; diff --git a/packages/core/src/renderer/components/command-palette/command-dialog.tsx b/packages/core/src/renderer/components/command-palette/command-dialog.tsx index ba4036f4c5..7a4a44651f 100644 --- a/packages/core/src/renderer/components/command-palette/command-dialog.tsx +++ b/packages/core/src/renderer/components/command-palette/command-dialog.tsx @@ -13,7 +13,7 @@ import type { CatalogEntity } from "../../../common/catalog"; import { broadcastMessage } from "../../../common/ipc"; import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import type { RegisteredCommand } from "./registered-commands/commands"; -import { iter } from "../../utils"; +import { iter } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import registeredCommandsInjectable from "./registered-commands/registered-commands.injectable"; import type { SingleValue } from "react-select"; diff --git a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx index d63b8dcc44..3524d33450 100644 --- a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx +++ b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx @@ -10,7 +10,7 @@ import React from "react"; import type { IObservableValue } from "mobx"; import { observable, makeObservable, computed } from "mobx"; import { observer } from "mobx-react"; -import { cssNames, noop, prevDefault } from "../../utils"; +import { cssNames, noop, prevDefault } from "@k8slens/utilities"; import type { ButtonProps } from "../button"; import { Button } from "../button"; import type { DialogProps } from "../dialog"; diff --git a/packages/core/src/renderer/components/countdown/countdown.test.tsx b/packages/core/src/renderer/components/countdown/countdown.test.tsx index 6a84e6970e..cdf46ce38e 100644 --- a/packages/core/src/renderer/components/countdown/countdown.test.tsx +++ b/packages/core/src/renderer/components/countdown/countdown.test.tsx @@ -10,10 +10,10 @@ import { renderFor } from "../test-utils/renderFor"; import { Countdown } from "./countdown"; import React from "react"; import type { RenderResult } from "@testing-library/react"; -import { advanceFakeTime, testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import type { IComputedValue } from "mobx"; import { observe } from "mobx"; -import { noop } from "../../../common/utils"; +import { noop } from "@k8slens/utilities"; +import { testUsingFakeTime, advanceFakeTime } from "../../../test-utils/use-fake-time"; describe("countdown", () => { let di: DiContainer; diff --git a/packages/core/src/renderer/components/delete-cluster-dialog/save-kubeconfig.global-override-for-injectable.ts b/packages/core/src/renderer/components/delete-cluster-dialog/save-kubeconfig.global-override-for-injectable.ts index 6fca6db49b..7fce77a2b1 100644 --- a/packages/core/src/renderer/components/delete-cluster-dialog/save-kubeconfig.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/delete-cluster-dialog/save-kubeconfig.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import saveKubeconfigInjectable from "./save-kubeconfig.injectable"; export default getGlobalOverride(saveKubeconfigInjectable, () => async () => { diff --git a/packages/core/src/renderer/components/dialog/dialog.tsx b/packages/core/src/renderer/components/dialog/dialog.tsx index 0d7bfb24c7..765d9b7317 100644 --- a/packages/core/src/renderer/components/dialog/dialog.tsx +++ b/packages/core/src/renderer/components/dialog/dialog.tsx @@ -10,7 +10,7 @@ import { createPortal } from "react-dom"; import { disposeOnUnmount, observer } from "mobx-react"; import { reaction } from "mobx"; import { Animate } from "../animate"; -import { cssNames, noop, stopPropagation } from "../../utils"; +import { cssNames, noop, stopPropagation } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; diff --git a/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts b/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts index 65b896f95d..d69b5b0772 100644 --- a/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts +++ b/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed, observable } from "mobx"; -import { delay, getOrInsert, isErrnoException, waitForPath } from "../../../utils"; +import { delay, getOrInsert, isErrnoException } from "@k8slens/utilities"; import { readFile } from "fs/promises"; import { hasCorrectExtension } from "./has-correct-extension"; import type { RawTemplates } from "./create-resource-templates.injectable"; @@ -15,6 +15,7 @@ import homeDirectoryPathInjectable from "../../../../common/os/home-directory-pa import getDirnameOfPathInjectable from "../../../../common/path/get-dirname.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; import parsePathInjectable from "../../../../common/path/parse.injectable"; +import { waitForPath } from "../../../../common/utils/wait-for-path"; const userCreateResourceTemplatesInjectable = getInjectable({ id: "user-create-resource-templates", diff --git a/packages/core/src/renderer/components/dock/create-resource/view.tsx b/packages/core/src/renderer/components/dock/create-resource/view.tsx index 63db3068ab..73d6989b82 100644 --- a/packages/core/src/renderer/components/dock/create-resource/view.tsx +++ b/packages/core/src/renderer/components/dock/create-resource/view.tsx @@ -16,7 +16,7 @@ import { InfoPanel } from "../info-panel"; import type { ShowNotification } from "../../notifications"; import type { Logger } from "../../../../common/logger"; import type { ApiManager } from "../../../../common/k8s-api/api-manager"; -import { isObject, prevDefault } from "../../../utils"; +import { isObject, prevDefault } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import createResourceTabStoreInjectable from "./store.injectable"; import createResourceTemplatesInjectable from "./create-resource-templates.injectable"; diff --git a/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts b/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts index d6ec705d2a..4a713a4a35 100644 --- a/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts +++ b/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts @@ -4,10 +4,11 @@ */ import { action, observable, reaction } from "mobx"; -import type { StorageLayer } from "../../../utils"; -import { autoBind, toJS } from "../../../utils"; +import type { StorageLayer } from "../../../utils/storage-helper"; import type { CreateStorage } from "../../../utils/create-storage/create-storage.injectable"; import type { TabId } from "../dock/store"; +import autoBind from "auto-bind"; +import { toJS } from "../../../../common/utils"; export interface DockTabStoreOptions { autoInit?: boolean; // load data from storage when `storageKey` is provided and bind events, default: true diff --git a/packages/core/src/renderer/components/dock/dock-tab.tsx b/packages/core/src/renderer/components/dock/dock-tab.tsx index 5a672e2fb3..c65ea76ac9 100644 --- a/packages/core/src/renderer/components/dock/dock-tab.tsx +++ b/packages/core/src/renderer/components/dock/dock-tab.tsx @@ -7,7 +7,7 @@ import styles from "./dock-tab.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import { autoBind, cssNames, prevDefault, isMiddleClick } from "../../utils"; +import { cssNames, prevDefault, isMiddleClick } from "@k8slens/utilities"; import type { DockStore, DockTab as DockTabModel } from "./dock/store"; import type { TabProps } from "../tabs"; import { Tab } from "../tabs"; @@ -18,6 +18,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import dockStoreInjectable from "./dock/store.injectable"; import { Tooltip, TooltipPosition } from "../tooltip"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; +import autoBindReact from "auto-bind/react"; export interface DockTabProps extends TabProps { moreActions?: React.ReactNode; @@ -34,7 +35,7 @@ class NonInjectedDockTab extends React.Component { constructor(props: DockTabProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } close(id: string) { diff --git a/packages/core/src/renderer/components/dock/dock-tabs.tsx b/packages/core/src/renderer/components/dock/dock-tabs.tsx index 87b4aa756b..1dd274c4db 100644 --- a/packages/core/src/renderer/components/dock/dock-tabs.tsx +++ b/packages/core/src/renderer/components/dock/dock-tabs.tsx @@ -11,7 +11,7 @@ import { DockTab } from "./dock-tab"; import type { DockTab as DockTabModel } from "./dock/store"; import { TabKind } from "./dock/store"; import { TerminalTab } from "./terminal/dock-tab"; -import { cssVar } from "../../utils"; +import { cssVar } from "@k8slens/utilities"; import { useResizeObserver } from "../../hooks"; export interface DockTabsProps { diff --git a/packages/core/src/renderer/components/dock/dock.tsx b/packages/core/src/renderer/components/dock/dock.tsx index ee4ff542b3..b0e2b010c6 100644 --- a/packages/core/src/renderer/components/dock/dock.tsx +++ b/packages/core/src/renderer/components/dock/dock.tsx @@ -6,7 +6,7 @@ import "./dock.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { MenuItem } from "../menu"; import { MenuActions } from "../menu/menu-actions"; diff --git a/packages/core/src/renderer/components/dock/dock/store.ts b/packages/core/src/renderer/components/dock/dock/store.ts index 48e04c3a76..b71f0e1093 100644 --- a/packages/core/src/renderer/components/dock/dock/store.ts +++ b/packages/core/src/renderer/components/dock/dock/store.ts @@ -5,9 +5,9 @@ import * as uuid from "uuid"; import { action, comparer, computed, makeObservable, observable, reaction, runInAction } from "mobx"; -import type { StorageLayer } from "../../../utils"; -import { autoBind } from "../../../utils"; import throttle from "lodash/throttle"; +import type { StorageLayer } from "../../../utils/storage-helper"; +import autoBind from "auto-bind"; export type TabId = string; diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.global-override-for-injectable.ts b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.global-override-for-injectable.ts index ca999211f5..c85ebb53cd 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import callForPatchResourceInjectable from "./call-for-patch-resource.injectable"; export default getGlobalOverride(callForPatchResourceInjectable, () => () => { diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.injectable.ts b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.injectable.ts index 097ef1ccf3..ddee1e6810 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.injectable.ts +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-patch-resource/call-for-patch-resource.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import apiManagerInjectable from "../../../../../../common/k8s-api/api-manager/manager.injectable"; import type { JsonPatch } from "../../../../../../common/k8s-api/kube-object.store"; import type { KubeObject } from "../../../../../../common/k8s-api/kube-object"; @@ -13,7 +13,7 @@ import { getErrorMessage } from "../../../../../../common/utils/get-error-messag export type CallForPatchResource = ( item: KubeObject, patch: JsonPatch -) => Promise>; +) => AsyncResult<{ name: string; kind: string }>; const callForPatchResourceInjectable = getInjectable({ id: "call-for-patch-resource", diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.global-override-for-injectable.ts b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.global-override-for-injectable.ts index a4e768da9a..6eca686d3f 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import callForResourceInjectable from "./call-for-resource.injectable"; export default getGlobalOverride(callForResourceInjectable, () => () => { diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts index a74da59c78..af9fd15a26 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts @@ -5,14 +5,14 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { KubeObject } from "../../../../../../common/k8s-api/kube-object"; import { parseKubeApi } from "../../../../../../common/k8s-api/kube-api-parse"; -import type { AsyncResult } from "../../../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import { getErrorMessage } from "../../../../../../common/utils/get-error-message"; import apiManagerInjectable from "../../../../../../common/k8s-api/api-manager/manager.injectable"; -import { waitUntilDefined } from "../../../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; export type CallForResource = ( selfLink: string -) => Promise>; +) => AsyncResult; const callForResourceInjectable = getInjectable({ id: "call-for-resource", diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx index a6ffe22423..7b2386e189 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import type { CallForResource } from "./call-for-resource/call-for-resource.injectable"; import callForResourceInjectable from "./call-for-resource/call-for-resource.injectable"; -import { waitUntilDefined } from "../../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import editResourceTabStoreInjectable from "../store.injectable"; import type { EditResourceTabStore } from "../store"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; diff --git a/packages/core/src/renderer/components/dock/editor-panel.tsx b/packages/core/src/renderer/components/dock/editor-panel.tsx index d9eca59159..1d009a356d 100644 --- a/packages/core/src/renderer/components/dock/editor-panel.tsx +++ b/packages/core/src/renderer/components/dock/editor-panel.tsx @@ -9,7 +9,7 @@ import React, { createRef, useEffect } from "react"; import { reaction } from "mobx"; import { observer } from "mobx-react"; import type { DockStore, TabId } from "./dock/store"; -import { cssNames, disposer } from "../../utils"; +import { cssNames, disposer } from "@k8slens/utilities"; import { MonacoEditor } from "../monaco-editor"; import type { MonacoEditorProps, MonacoEditorRef } from "../monaco-editor"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/dock/info-panel.tsx b/packages/core/src/renderer/components/dock/info-panel.tsx index 8f1ac32266..0b951d8722 100644 --- a/packages/core/src/renderer/components/dock/info-panel.tsx +++ b/packages/core/src/renderer/components/dock/info-panel.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from "react"; import React, { Component } from "react"; import { computed, observable, reaction, makeObservable } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { Spinner } from "../spinner"; diff --git a/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx b/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx index b0bfcfcacc..e9c7f6cbcb 100644 --- a/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx +++ b/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx @@ -4,7 +4,7 @@ */ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import installChartTabStoreInjectable from "./store.injectable"; -import { waitUntilDefined } from "../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import type { IChartInstallData, InstallChartTabStore } from "./store"; import type { HelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api"; import React from "react"; @@ -131,7 +131,7 @@ export class InstallChartModel { if (!chartValuesRequest.callWasSuccessful) { throw chartValuesRequest.error; } - + runInAction(() => { this.configuration.onChange(chartValuesRequest.response); this.configuration.isLoading.set(false); diff --git a/packages/core/src/renderer/components/dock/install-chart/view.tsx b/packages/core/src/renderer/components/dock/install-chart/view.tsx index 714259bd85..d478febd55 100644 --- a/packages/core/src/renderer/components/dock/install-chart/view.tsx +++ b/packages/core/src/renderer/components/dock/install-chart/view.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { InfoPanel } from "../info-panel"; import { Badge } from "../../badge"; import { NamespaceSelect } from "../../+namespaces/namespace-select"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Icon } from "../../icon"; import { Button } from "../../button"; import { LogsDialog } from "../../dialog/logs-dialog"; diff --git a/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx b/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx index 2aa43bb13b..9b864f1fed 100644 --- a/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx +++ b/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx @@ -6,7 +6,7 @@ import React from "react"; import "@testing-library/jest-dom/extend-expect"; import { fireEvent } from "@testing-library/react"; import { ToBottom } from "../to-bottom"; -import { noop } from "../../../../utils"; +import { noop } from "@k8slens/utilities"; import type { DiRender } from "../../../test-utils/renderFor"; import { renderFor } from "../../../test-utils/renderFor"; import { getDiForUnitTesting } from "../../../../getDiForUnitTesting"; diff --git a/packages/core/src/renderer/components/dock/logs/list.tsx b/packages/core/src/renderer/components/dock/logs/list.tsx index 0290049ccc..6b3eded365 100644 --- a/packages/core/src/renderer/components/dock/logs/list.tsx +++ b/packages/core/src/renderer/components/dock/logs/list.tsx @@ -16,7 +16,7 @@ import moment from "moment-timezone"; import type { Align, ListOnScrollProps } from "react-window"; import { SearchStore } from "../../../search-store/search-store"; import type { UserStore } from "../../../../common/user-store"; -import { array, autoBind, cssNames } from "../../../utils"; +import { array, cssNames } from "@k8slens/utilities"; import type { VirtualListRef } from "../../virtual-list"; import { VirtualList } from "../../virtual-list"; import { ToBottom } from "./to-bottom"; @@ -24,6 +24,7 @@ import type { LogTabViewModel } from "../logs/logs-view-model"; import { Spinner } from "../../spinner"; import { withInjectables } from "@ogre-tools/injectable-react"; import userStoreInjectable from "../../../../common/user-store/user-store.injectable"; +import autoBindReact from "auto-bind/react"; export interface LogListProps { model: LogTabViewModel; @@ -51,7 +52,7 @@ class NonForwardedLogList extends React.Component extends React.Component { constructor(props: Props) { super(props); - autoBind(this); + autoBindReact(this); } componentDidMount() { diff --git a/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts b/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts index 63902d34e1..c3fc64c7df 100644 --- a/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts +++ b/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts @@ -6,8 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { when } from "mobx"; import loggerInjectable from "../../../../common/logger.injectable"; import { TerminalChannels } from "../../../../common/terminal/channels"; -import { waitUntilDefined } from "../../../../common/utils/wait"; -import { noop } from "../../../utils"; +import { waitUntilDefined, noop } from "@k8slens/utilities"; import showSuccessNotificationInjectable from "../../notifications/show-success-notification.injectable"; import selectDockTabInjectable from "../dock/select-dock-tab.injectable"; import type { TabId } from "../dock/store"; @@ -21,7 +20,7 @@ export interface SendCommandOptions { enter?: boolean; /** - * @deprecated This option is ignored and infered to be `true` if `tabId` is not provided + * @deprecated This option is ignored and inferred to be `true` if `tabId` is not provided */ newTab?: any; diff --git a/packages/core/src/renderer/components/dock/terminal/terminal.ts b/packages/core/src/renderer/components/dock/terminal/terminal.ts index 5f49882f1c..9e307aa7dc 100644 --- a/packages/core/src/renderer/components/dock/terminal/terminal.ts +++ b/packages/core/src/renderer/components/dock/terminal/terminal.ts @@ -10,7 +10,7 @@ import { Terminal as XTerm } from "xterm"; import { FitAddon } from "xterm-addon-fit"; import type { TabId } from "../dock/store"; import type { TerminalApi } from "../../../api/terminal-api"; -import { disposer } from "../../../utils"; +import { disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { clipboard } from "electron"; import type { Logger } from "../../../../common/logger"; diff --git a/packages/core/src/renderer/components/dock/terminal/view.tsx b/packages/core/src/renderer/components/dock/terminal/view.tsx index b85824cc30..4bdde69f89 100644 --- a/packages/core/src/renderer/components/dock/terminal/view.tsx +++ b/packages/core/src/renderer/components/dock/terminal/view.tsx @@ -7,7 +7,7 @@ import "./terminal-window.scss"; import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { Terminal } from "./terminal"; import type { TerminalStore } from "./store"; import type { LensTheme } from "../../../themes/lens-theme"; diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts b/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts index 0189ecf6a7..38c8491fb5 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts +++ b/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; -import { waitUntilDefined } from "../../../utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import upgradeChartTabStoreInjectable from "./store.injectable"; const upgradeChartTabDataInjectable = getInjectable({ diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts b/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts index bf3d9a0214..4683410f8b 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts +++ b/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts @@ -13,8 +13,8 @@ import releasesInjectable from "../../+helm-releases/releases.injectable"; import updateReleaseInjectable from "../../+helm-releases/update-release/update-release.injectable"; import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api"; import requestHelmReleaseConfigurationInjectable from "../../../../common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable"; -import type { AsyncResult } from "../../../../common/utils/async-result"; -import { waitUntilDefined } from "../../../utils"; +import type { AsyncResult } from "@k8slens/utilities"; +import { waitUntilDefined } from "@k8slens/utilities"; import type { SelectOption } from "../../select"; import type { DockTab } from "../dock/store"; import upgradeChartTabDataInjectable from "./tab-data.injectable"; @@ -22,7 +22,7 @@ import upgradeChartTabDataInjectable from "./tab-data.injectable"; export interface UpgradeChartModel { readonly release: HelmRelease; readonly versionOptions: IComputedValue[]>; - readonly configration: { + readonly configuration: { readonly value: IComputedValue; set: (value: string) => void; readonly error: IComputedValue; @@ -32,7 +32,7 @@ export interface UpgradeChartModel { readonly value: IComputedValue; set: (value: SingleValue>) => void; }; - submit: () => Promise>; + submit: () => AsyncResult; } const upgradeChartModelInjectable = getInjectable({ @@ -69,7 +69,7 @@ const upgradeChartModelInjectable = getInjectable({ const configrationValue = observable.box(); const configrationEditError = observable.box(); - const configration: UpgradeChartModel["configration"] = { + const configration: UpgradeChartModel["configuration"] = { value: computed(() => configrationValue.get() ?? storedConfiguration.value.get()), set: action((value) => { configrationValue.set(value); @@ -97,7 +97,7 @@ const upgradeChartModelInjectable = getInjectable({ return { release, versionOptions, - configration, + configuration: configration, version, submit: async () => { const selectedVersion = version.value.get(); diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx b/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx index 35dbd0242b..16e6b641c4 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx +++ b/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx @@ -7,7 +7,7 @@ import "./upgrade-chart.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { DockTab } from "../dock/store"; import { InfoPanel } from "../info-panel"; import { Spinner } from "../../spinner"; @@ -61,7 +61,7 @@ export class NonInjectedUpgradeChart extends React.Component ); diff --git a/packages/core/src/renderer/components/drawer/drawer-item.tsx b/packages/core/src/renderer/components/drawer/drawer-item.tsx index 72a311794c..8c17d1ae91 100644 --- a/packages/core/src/renderer/components/drawer/drawer-item.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-item.tsx @@ -5,7 +5,7 @@ import "./drawer-item.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerItemProps extends React.HTMLAttributes { name: React.ReactNode; diff --git a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx index 42d4c056e9..2c4702fcde 100644 --- a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx @@ -6,7 +6,7 @@ import "./drawer-param-toggler.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerParamTogglerProps { label: string | number; diff --git a/packages/core/src/renderer/components/drawer/drawer-title.tsx b/packages/core/src/renderer/components/drawer/drawer-title.tsx index d920a9cef9..1b3b6d3d0f 100644 --- a/packages/core/src/renderer/components/drawer/drawer-title.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-title.tsx @@ -5,7 +5,7 @@ import styles from "./drawer-title.module.css"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerTitleProps { className?: string; diff --git a/packages/core/src/renderer/components/drawer/drawer.tsx b/packages/core/src/renderer/components/drawer/drawer.tsx index 7a87d1a47f..5959c0c098 100644 --- a/packages/core/src/renderer/components/drawer/drawer.tsx +++ b/packages/core/src/renderer/components/drawer/drawer.tsx @@ -8,8 +8,8 @@ import "./drawer.scss"; import React from "react"; import { clipboard } from "electron"; import { createPortal } from "react-dom"; -import type { SingleOrMany, StorageLayer } from "../../utils"; -import { cssNames, noop } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { AnimateName } from "../animate"; import { Animate } from "../animate"; @@ -18,6 +18,7 @@ import drawerStorageInjectable, { defaultDrawerWidth } from "./drawer-storage/dr import { withInjectables } from "@ogre-tools/injectable-react"; import historyInjectable from "../../navigation/history.injectable"; import type { History } from "history"; +import type { StorageLayer } from "../../utils/storage-helper"; export type DrawerPosition = "top" | "left" | "right" | "bottom"; diff --git a/packages/core/src/renderer/components/duration/reactive-duration.tsx b/packages/core/src/renderer/components/duration/reactive-duration.tsx index 42a6b0949b..57eed992f7 100644 --- a/packages/core/src/renderer/components/duration/reactive-duration.tsx +++ b/packages/core/src/renderer/components/duration/reactive-duration.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import React from "react"; -import { formatDuration } from "../../utils"; +import { formatDuration } from "@k8slens/utilities"; import { reactiveNow } from "../../../common/utils/reactive-now/reactive-now"; export interface ReactiveDurationProps { diff --git a/packages/core/src/renderer/components/editable-list/editable-list.tsx b/packages/core/src/renderer/components/editable-list/editable-list.tsx index 48d19a7006..7a11df7749 100644 --- a/packages/core/src/renderer/components/editable-list/editable-list.tsx +++ b/packages/core/src/renderer/components/editable-list/editable-list.tsx @@ -11,8 +11,8 @@ import React from "react"; import { Icon } from "../icon"; import type { InputProps, InputValidator } from "../input"; import { Input } from "../input"; -import { autoBind } from "../../utils"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import autoBindReact from "auto-bind/react"; export interface EditableListProps { items: T[]; @@ -39,7 +39,7 @@ class DefaultedEditableList extends React.Component & ty constructor(props: EditableListProps & typeof defaultProps) { super(props); - autoBind(this); + autoBindReact(this); } onSubmit(val: string, evt: React.KeyboardEvent) { diff --git a/packages/core/src/renderer/components/error-boundary/error-boundary.tsx b/packages/core/src/renderer/components/error-boundary/error-boundary.tsx index 6e39867109..4d732a3ded 100644 --- a/packages/core/src/renderer/components/error-boundary/error-boundary.tsx +++ b/packages/core/src/renderer/components/error-boundary/error-boundary.tsx @@ -10,7 +10,7 @@ import React from "react"; import { observer } from "mobx-react"; import { Button } from "../button"; import { issuesTrackerUrl, forumsUrl } from "../../../common/vars"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; diff --git a/packages/core/src/renderer/components/gutter/gutter.tsx b/packages/core/src/renderer/components/gutter/gutter.tsx index c0fce2b6ba..0627235bf2 100644 --- a/packages/core/src/renderer/components/gutter/gutter.tsx +++ b/packages/core/src/renderer/components/gutter/gutter.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import styles from "./gutter.module.scss"; interface GutterProps { diff --git a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx index 107a269b35..d9861482b0 100644 --- a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx +++ b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx @@ -4,7 +4,7 @@ */ import React from "react"; import styles from "./horizontal-line.module.scss"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; interface HorizontalLineProps { size?: "sm" | "md" | "xl"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx index 90dfc49000..29466a9de5 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx @@ -7,7 +7,7 @@ import "./hotbar-menu.scss"; import type { HTMLAttributes, ReactNode } from "react"; import React, { useState } from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface HotbarCellProps extends HTMLAttributes { children?: ReactNode; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx b/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx index b3f635acb5..0a1987e576 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx @@ -11,8 +11,8 @@ import { observable } from "mobx"; import { observer } from "mobx-react"; import type { CatalogCategoryRegistry, CatalogEntity, CatalogEntityContextMenu } from "../../../common/catalog"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { HotbarIcon } from "./hotbar-icon"; import { LensKubernetesClusterStatus } from "../../../common/catalog-entities/kubernetes-cluster"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx index 3bbe644c88..ee9d4fb04e 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx @@ -8,7 +8,7 @@ import styles from "./hotbar-icon.module.scss"; import React, { useState } from "react"; import type { CatalogEntityContextMenu } from "../../../common/catalog"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Menu, MenuItem } from "../menu"; import { observer } from "mobx-react"; import type { AvatarProps } from "../avatar"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx index 53191c2d87..e83848cdfd 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx @@ -8,8 +8,8 @@ import "./hotbar-menu.scss"; import React from "react"; import { observer } from "mobx-react"; import { HotbarEntityIcon } from "./hotbar-entity-icon"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import type { CatalogEntityRegistry } from "../../api/catalog/entity/registry"; import type { CatalogEntity } from "../../api/catalog-entity"; import { DragDropContext, Draggable, Droppable, type DropResult } from "react-beautiful-dnd"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx index 4d6104b5b3..7e7b609300 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx @@ -14,7 +14,7 @@ import { observer } from "mobx-react"; import type { Hotbar } from "../../../common/hotbars/types"; import { withInjectables } from "@ogre-tools/injectable-react"; import commandOverlayInjectable from "../command-palette/command-overlay.injectable"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { HotbarStore } from "../../../common/hotbars/store"; interface Dependencies { diff --git a/packages/core/src/renderer/components/icon/icon.tsx b/packages/core/src/renderer/components/icon/icon.tsx index b51299ba15..6da23f247e 100644 --- a/packages/core/src/renderer/components/icon/icon.tsx +++ b/packages/core/src/renderer/components/icon/icon.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from "react"; import React, { createRef } from "react"; import { NavLink } from "react-router-dom"; import type { LocationDescriptor } from "history"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; import isNumber from "lodash/isNumber"; import Configuration from "./configuration.svg"; diff --git a/packages/core/src/renderer/components/input/drop-file-input.tsx b/packages/core/src/renderer/components/input/drop-file-input.tsx index 41461a27c9..85b3e8d369 100644 --- a/packages/core/src/renderer/components/input/drop-file-input.tsx +++ b/packages/core/src/renderer/components/input/drop-file-input.tsx @@ -5,13 +5,14 @@ import "./drop-file-input.scss"; import React from "react"; -import type { IClassName } from "../../utils"; -import { autoBind, cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; import type { Logger } from "../../../common/logger"; import { withInjectables } from "@ogre-tools/injectable-react"; import loggerInjectable from "../../../common/logger.injectable"; +import autoBindReact from "auto-bind/react"; export interface DropFileInputProps extends React.DOMAttributes { className?: IClassName; @@ -35,7 +36,7 @@ class NonInjectedDropFileInput extends React.Component & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } onDragEnter() { diff --git a/packages/core/src/renderer/components/input/input.tsx b/packages/core/src/renderer/components/input/input.tsx index bbbfa60a86..ef4e52f3ed 100644 --- a/packages/core/src/renderer/components/input/input.tsx +++ b/packages/core/src/renderer/components/input/input.tsx @@ -7,8 +7,8 @@ import "./input.scss"; import type { DOMAttributes, InputHTMLAttributes, TextareaHTMLAttributes } from "react"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { autoBind, cssNames, debouncePromise, getRandId, isPromiseSettledFulfilled } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { debouncePromise, isPromiseSettledFulfilled, cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { TooltipProps } from "../tooltip"; import { Tooltip } from "../tooltip"; @@ -16,6 +16,8 @@ import * as Validators from "./input_validators"; import type { InputValidator, InputValidation, InputValidationResult, SyncValidationMessage } from "./input_validators"; import uniqueId from "lodash/uniqueId"; import { debounce } from "lodash"; +import * as uuid from "uuid"; +import autoBindReact from "auto-bind/react"; const { conditionalValidators, @@ -113,7 +115,7 @@ export class Input extends React.Component { constructor(props: InputProps) { super(props); - autoBind(this); + autoBindReact(this); } componentWillUnmount(): void { @@ -428,7 +430,7 @@ export class Input extends React.Component { ); const componentId = id || showErrorsAsTooltip - ? getRandId({ prefix: "input_tooltip_id" }) + ? `input_tooltip_id_${uuid.v4()}` : undefined; let tooltipError: React.ReactNode; diff --git a/packages/core/src/renderer/components/input/search-input.tsx b/packages/core/src/renderer/components/input/search-input.tsx index 4aff4a6ffa..d0365ba5e9 100644 --- a/packages/core/src/renderer/components/input/search-input.tsx +++ b/packages/core/src/renderer/components/input/search-input.tsx @@ -7,12 +7,13 @@ import "./search-input.scss"; import React, { createRef } from "react"; import { observer } from "mobx-react"; -import { cssNames, autoBind } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { InputProps } from "./input"; import { Input } from "./input"; import { withInjectables } from "@ogre-tools/injectable-react"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; +import autoBindReact from "auto-bind/react"; export interface SearchInputProps extends InputProps { compact?: boolean; // show only search-icon when not focused @@ -40,7 +41,7 @@ class NonInjectedSearchInput extends React.Component { getFilters: () => Filter[]; @@ -86,7 +87,7 @@ class NonInjectedItemListLayoutContent< constructor(props: ItemListLayoutContentProps & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } @computed get failedToLoad() { diff --git a/packages/core/src/renderer/components/item-object-list/header.tsx b/packages/core/src/renderer/components/item-object-list/header.tsx index 2b60b3858f..6da69312f5 100644 --- a/packages/core/src/renderer/components/item-object-list/header.tsx +++ b/packages/core/src/renderer/components/item-object-list/header.tsx @@ -8,8 +8,8 @@ import "./item-list-layout.scss"; import type { ReactNode } from "react"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames, isDefined } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames, isDefined } from "@k8slens/utilities"; import type { ItemObject } from "../../../common/item.store"; import type { Filter } from "./page-filters/store"; import type { HeaderCustomizer, HeaderPlaceholders, ItemListStore, SearchFilter } from "./list-layout"; diff --git a/packages/core/src/renderer/components/item-object-list/list-layout.tsx b/packages/core/src/renderer/components/item-object-list/list-layout.tsx index 2d3a9ae17b..525558f533 100644 --- a/packages/core/src/renderer/components/item-object-list/list-layout.tsx +++ b/packages/core/src/renderer/components/item-object-list/list-layout.tsx @@ -11,8 +11,8 @@ import type { IComputedValue } from "mobx"; import { computed, makeObservable, untracked } from "mobx"; import type { ConfirmDialogParams } from "../confirm-dialog"; import type { TableCellProps, TableProps, TableRowProps, TableSortCallbacks } from "../table"; -import type { IClassName, SingleOrMany, StorageLayer } from "../../utils"; -import { autoBind, cssNames, noop } from "../../utils"; +import type { IClassName, SingleOrMany } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; import type { AddRemoveButtonsProps } from "../add-remove-buttons"; import type { ItemObject } from "../../../common/item.store"; import type { SearchInputUrlProps } from "../input"; @@ -30,6 +30,8 @@ import type { Primitive } from "type-fest"; import type { SubscribableStore } from "../../kube-watch-api/kube-watch-api"; import selectedFilterNamespacesInjectable from "../../../common/k8s-api/selected-filter-namespaces.injectable"; import pageFiltersStoreInjectable from "./page-filters/store.injectable"; +import type { StorageLayer } from "../../utils/storage-helper"; +import autoBindReact from "auto-bind/react"; export type SearchFilter = (item: I) => SingleOrMany; export type SearchFilters = Record>; @@ -176,7 +178,7 @@ class NonInjectedItemListLayout & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } async componentDidMount() { diff --git a/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx b/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx index 58c4463b65..51590adb23 100644 --- a/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx +++ b/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx @@ -7,7 +7,7 @@ import "./list.scss"; import React from "react"; import { observer } from "mobx-react"; import { Badge } from "../../badge"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { Filter, PageFiltersStore } from "./store"; import { FilterIcon } from "../filter-icon"; import { Icon } from "../../icon"; diff --git a/packages/core/src/renderer/components/item-object-list/page-filters/store.ts b/packages/core/src/renderer/components/item-object-list/page-filters/store.ts index d9a088f539..4988f10a12 100644 --- a/packages/core/src/renderer/components/item-object-list/page-filters/store.ts +++ b/packages/core/src/renderer/components/item-object-list/page-filters/store.ts @@ -3,9 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import autoBind from "auto-bind"; import { computed, observable, reaction, makeObservable, action } from "mobx"; import type { PageParam } from "../../../navigation/page-param"; -import { autoBind } from "../../../utils"; export enum FilterType { SEARCH = "search", diff --git a/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts index 4d312eb30b..77223c06c1 100644 --- a/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts +++ b/packages/core/src/renderer/components/kube-object-details/kube-object-detail-items/kube-object-detail-items.injectable.ts @@ -7,7 +7,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { kubeObjectDetailItemInjectionToken } from "./kube-object-detail-item-injection-token"; -import { byValue } from "../../../../common/utils/sort-function"; +import { byValue } from "@k8slens/utilities"; const kubeObjectDetailItemsInjectable = getInjectable({ id: "kube-object-detail-items", diff --git a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx index 4394902072..8d12c8a57a 100644 --- a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx +++ b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx @@ -8,8 +8,8 @@ import "./kube-object-list-layout.scss"; import React from "react"; import { computed, observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import type { Disposer } from "../../utils"; -import { hasTypedProperty, isObject, isString, cssNames, isDefined } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { hasTypedProperty, isObject, isString, cssNames, isDefined } from "@k8slens/utilities"; import type { KubeJsonApiDataFor, KubeObject } from "../../../common/k8s-api/kube-object"; import type { ItemListLayoutProps } from "../item-object-list/list-layout"; import { ItemListLayout } from "../item-object-list/list-layout"; diff --git a/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx b/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx index e3fe090150..8535006f46 100644 --- a/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx +++ b/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import type { MenuActionsProps } from "../menu"; import { MenuItem, MenuActions } from "../menu"; diff --git a/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx b/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx index dd9e68d3f8..c3a5852e0a 100644 --- a/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx +++ b/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx @@ -7,7 +7,7 @@ import "./kube-object-status-icon.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames, formatDuration, getOrInsert, isDefined } from "../../utils"; +import { cssNames, formatDuration, getOrInsert, isDefined } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import kubeObjectStatusTextsForObjectInjectable from "./kube-object-status-texts-for-object.injectable"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx index fd497c9c35..69a6cdcbd2 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx +++ b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx @@ -7,7 +7,7 @@ import styles from "./kubeconfig-dialog.module.scss"; import React from "react"; import type { IObservableValue } from "mobx"; import { observer } from "mobx-react"; -import { cssNames, saveFileDialog } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import type { DialogProps } from "../dialog"; import { Dialog } from "../dialog"; @@ -19,6 +19,7 @@ import { clipboard } from "electron"; import { withInjectables } from "@ogre-tools/injectable-react"; import showSuccessNotificationInjectable from "../notifications/show-success-notification.injectable"; import kubeconfigDialogStateInjectable from "./state.injectable"; +import { saveFileDialog } from "../../utils/saveFile"; export interface KubeconfigDialogData { title?: React.ReactNode; diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts b/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts index 4c0e4255b1..658331fe9e 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts +++ b/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import type { ServiceAccount } from "../../../common/k8s-api/endpoints"; -import { urlBuilderFor } from "../../../common/utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import openKubeconfigDialogInjectable from "./open.injectable"; export type OpenServiceAccountKubeConfigDialog = (account: ServiceAccount) => void; diff --git a/packages/core/src/renderer/components/layout/main-layout.tsx b/packages/core/src/renderer/components/layout/main-layout.tsx index 9a5ff95549..a078ac7b74 100755 --- a/packages/core/src/renderer/components/layout/main-layout.tsx +++ b/packages/core/src/renderer/components/layout/main-layout.tsx @@ -7,13 +7,13 @@ import styles from "./main-layout.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { StorageLayer } from "../../utils"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { ErrorBoundary } from "../error-boundary"; import { ResizeDirection, ResizeGrowthDirection, ResizeSide, ResizingAnchor } from "../resizing-anchor"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { SidebarStorageState } from "./sidebar-storage/sidebar-storage.injectable"; import sidebarStorageInjectable, { defaultSidebarWidth } from "./sidebar-storage/sidebar-storage.injectable"; +import type { StorageLayer } from "../../utils/storage-helper"; export interface MainLayoutProps { sidebar: React.ReactNode; diff --git a/packages/core/src/renderer/components/layout/setting-layout.tsx b/packages/core/src/renderer/components/layout/setting-layout.tsx index b6e0e58ec2..09ceba9a5d 100644 --- a/packages/core/src/renderer/components/layout/setting-layout.tsx +++ b/packages/core/src/renderer/components/layout/setting-layout.tsx @@ -7,8 +7,8 @@ import "./setting-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { CloseButton } from "./close-button"; import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; diff --git a/packages/core/src/renderer/components/layout/sidebar-item.tsx b/packages/core/src/renderer/components/layout/sidebar-item.tsx index f3e171fc4b..da1ee8b670 100644 --- a/packages/core/src/renderer/components/layout/sidebar-item.tsx +++ b/packages/core/src/renderer/components/layout/sidebar-item.tsx @@ -7,8 +7,7 @@ import styles from "./sidebar-items.module.scss"; import React from "react"; import { computed, makeObservable } from "mobx"; -import type { StorageLayer } from "../../utils"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { NavLink } from "react-router-dom"; import { Icon } from "../icon"; @@ -16,6 +15,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { SidebarStorageState } from "./sidebar-storage/sidebar-storage.injectable"; import sidebarStorageInjectable from "./sidebar-storage/sidebar-storage.injectable"; import type { HierarchicalSidebarItem } from "./sidebar-items.injectable"; +import type { StorageLayer } from "../../utils/storage-helper"; interface Dependencies { sidebarStorage: StorageLayer; diff --git a/packages/core/src/renderer/components/layout/sidebar.tsx b/packages/core/src/renderer/components/layout/sidebar.tsx index 7fcd1b6793..9230ce4b5d 100644 --- a/packages/core/src/renderer/components/layout/sidebar.tsx +++ b/packages/core/src/renderer/components/layout/sidebar.tsx @@ -7,7 +7,7 @@ import styles from "./sidebar.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { SidebarItem } from "./sidebar-item"; import type { CatalogEntityRegistry } from "../../api/catalog/entity/registry"; import { SidebarCluster } from "./sidebar-cluster"; diff --git a/packages/core/src/renderer/components/layout/sub-header.tsx b/packages/core/src/renderer/components/layout/sub-header.tsx index 0530fef944..7a782d1123 100644 --- a/packages/core/src/renderer/components/layout/sub-header.tsx +++ b/packages/core/src/renderer/components/layout/sub-header.tsx @@ -5,8 +5,8 @@ import "./sub-header.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface SubHeaderProps { className?: string; diff --git a/packages/core/src/renderer/components/layout/sub-title.tsx b/packages/core/src/renderer/components/layout/sub-title.tsx index 3ee50d44e9..90ab8dc3e7 100644 --- a/packages/core/src/renderer/components/layout/sub-title.tsx +++ b/packages/core/src/renderer/components/layout/sub-title.tsx @@ -5,8 +5,8 @@ import "./sub-title.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface SubTitleProps { className?: string; diff --git a/packages/core/src/renderer/components/layout/tab-layout-2.tsx b/packages/core/src/renderer/components/layout/tab-layout-2.tsx index 7d81c58d34..a9f720aef2 100644 --- a/packages/core/src/renderer/components/layout/tab-layout-2.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout-2.tsx @@ -7,7 +7,7 @@ import "./tab-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "../error-boundary"; import type { HierarchicalSidebarItem } from "./sidebar-items.injectable"; diff --git a/packages/core/src/renderer/components/layout/tab-layout.tsx b/packages/core/src/renderer/components/layout/tab-layout.tsx index ddbbeea691..d91a31d5e8 100644 --- a/packages/core/src/renderer/components/layout/tab-layout.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout.tsx @@ -9,8 +9,8 @@ import type { ReactNode } from "react"; import React from "react"; import { matchPath, Redirect, Route, Switch } from "react-router"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "../error-boundary"; import type { ObservableHistory } from "mobx-observable-history"; diff --git a/packages/core/src/renderer/components/layout/top-bar/start-state-sync.injectable.ts b/packages/core/src/renderer/components/layout/top-bar/start-state-sync.injectable.ts index 92488851c5..aca3e9ff76 100644 --- a/packages/core/src/renderer/components/layout/top-bar/start-state-sync.injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/start-state-sync.injectable.ts @@ -12,7 +12,6 @@ import topBarStateInjectable from "./state.injectable"; const startTopbarStateSyncInjectable = getInjectable({ id: "start-topbar-state-sync", instantiate: (di) => ({ - id: "start-topbar-state-sync", run: () => { const state = di.inject(topBarStateInjectable); const ipcRenderer = di.inject(ipcRendererInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts index e7584a243b..ab457b4f17 100644 --- a/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(toggleMaximizeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts index 2dfd22bb5e..cac2d6b182 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(openAppContextMenuInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts index f0d421a883..1b0f4f6741 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import goBackInjectable from "./go-back.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(goBackInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts index f4e2520381..0808279e4f 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import goForwardInjectable from "./go-forward.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(goForwardInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts index f8124bbbe5..1d42413183 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import closeWindowInjectable from "./close-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(closeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts index e0056a6ee8..12a702c7dd 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import maximizeWindowInjectable from "./maximize-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; export default getGlobalOverrideForFunction(maximizeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx index 08cdee837f..7c1665395a 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx @@ -4,7 +4,7 @@ */ import React from "react"; import { withInjectables } from "@ogre-tools/injectable-react"; -import { cssNames } from "../../../../../utils"; +import { cssNames } from "@k8slens/utilities"; import styles from "../../top-bar.module.scss"; import isLinuxInjectable from "../../../../../../common/vars/is-linux.injectable"; import toggleMaximizeWindowInjectable from "../../toggle-maximize-window/toggle-maximize-window.injectable"; diff --git a/packages/core/src/renderer/components/layout/wizard-layout.tsx b/packages/core/src/renderer/components/layout/wizard-layout.tsx index 9012a0f66f..bcdb47f9c5 100644 --- a/packages/core/src/renderer/components/layout/wizard-layout.tsx +++ b/packages/core/src/renderer/components/layout/wizard-layout.tsx @@ -6,8 +6,8 @@ import "./wizard-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface WizardLayoutProps extends React.DOMAttributes { className?: IClassName; diff --git a/packages/core/src/renderer/components/line-progress/line-progress.tsx b/packages/core/src/renderer/components/line-progress/line-progress.tsx index 24ef169176..22e2e6437a 100644 --- a/packages/core/src/renderer/components/line-progress/line-progress.tsx +++ b/packages/core/src/renderer/components/line-progress/line-progress.tsx @@ -5,7 +5,7 @@ import "./line-progress.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface LineProgressProps extends React.HTMLProps { diff --git a/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx b/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx index 66261cd7e4..62b223ccf3 100644 --- a/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx +++ b/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx @@ -10,7 +10,7 @@ import "./markdown-viewer.scss"; import React, { Component } from "react"; import { marked } from "marked"; import DOMPurify from "dompurify"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; DOMPurify.addHook("afterSanitizeAttributes", function (node) { // Set all elements owning target to target=_blank diff --git a/packages/core/src/renderer/components/menu/menu-actions.tsx b/packages/core/src/renderer/components/menu/menu-actions.tsx index 0e77446caf..2eebf36778 100644 --- a/packages/core/src/renderer/components/menu/menu-actions.tsx +++ b/packages/core/src/renderer/components/menu/menu-actions.tsx @@ -8,7 +8,7 @@ import "./menu-actions.scss"; import React, { isValidElement } from "react"; import { observable, makeObservable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { IconProps } from "../icon"; import { Icon } from "../icon"; import type { MenuProps } from "./menu"; @@ -19,6 +19,7 @@ import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import openConfirmDialogInjectable from "../confirm-dialog/open.injectable"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; +import autoBindReact from "auto-bind/react"; export interface MenuActionsProps extends Partial { className?: string; @@ -61,7 +62,7 @@ class NonInjectedMenuActions extends React.Component(null); export interface MenuContextValue { @@ -78,7 +79,7 @@ class NonInjectedMenu extends React.Component { constructor(props: MenuProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } private opener: HTMLElement | null = null; private elem: HTMLUListElement | null = null; @@ -431,7 +432,7 @@ export class MenuItem extends React.Component { constructor(props: MenuItemProps) { super(props); - autoBind(this); + autoBindReact(this); } get isFocusable() { diff --git a/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx b/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx index debb076ab8..d41ab4157b 100644 --- a/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx +++ b/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx @@ -12,7 +12,7 @@ import { editor, Uri } from "monaco-editor"; import type { MonacoTheme } from "./monaco-themes"; import { type MonacoValidator, monacoValidators } from "./monaco-validators"; import { debounce, merge } from "lodash"; -import { autoBind, cssNames, disposer } from "../../utils"; +import { cssNames, disposer } from "@k8slens/utilities"; import type { UserStore } from "../../../common/user-store"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; @@ -21,6 +21,7 @@ import activeThemeInjectable from "../../themes/active.injectable"; import getEditorHeightFromLinesCountInjectable from "./get-editor-height-from-lines-number.injectable"; import type { Logger } from "../../../common/logger"; import loggerInjectable from "../../../common/logger.injectable"; +import autoBindReact from "auto-bind/react"; export type MonacoEditorId = string; @@ -82,7 +83,7 @@ class NonInjectedMonacoEditor extends React.Component { className?: string; diff --git a/packages/core/src/renderer/components/render-delay/__tests__/render-delay.test.tsx b/packages/core/src/renderer/components/render-delay/__tests__/render-delay.test.tsx index 4e410a18a1..472310d0d8 100644 --- a/packages/core/src/renderer/components/render-delay/__tests__/render-delay.test.tsx +++ b/packages/core/src/renderer/components/render-delay/__tests__/render-delay.test.tsx @@ -7,11 +7,11 @@ import { RenderDelay } from "../render-delay"; import type { DiRender } from "../../test-utils/renderFor"; import { renderFor } from "../../test-utils/renderFor"; import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; -import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time"; import cancelIdleCallbackInjectable from "../cancel-idle-callback.injectable"; import requestIdleCallbackInjectable from "../request-idle-callback.injectable"; import type { RenderResult } from "@testing-library/react"; import idleCallbackTimeoutInjectable from "../idle-callback-timeout.injectable"; +import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time"; describe("", () => { let render: DiRender; diff --git a/packages/core/src/renderer/components/render-delay/cancel-idle-callback.global-override-for-injectable.ts b/packages/core/src/renderer/components/render-delay/cancel-idle-callback.global-override-for-injectable.ts index 2bd7d0047f..48e144ec70 100644 --- a/packages/core/src/renderer/components/render-delay/cancel-idle-callback.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/render-delay/cancel-idle-callback.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import cancelIdleCallbackInjectable from "./cancel-idle-callback.injectable"; export default getGlobalOverride(cancelIdleCallbackInjectable, () => () => {}); diff --git a/packages/core/src/renderer/components/render-delay/render-delay.tsx b/packages/core/src/renderer/components/render-delay/render-delay.tsx index 5951babe6d..7d65b68071 100644 --- a/packages/core/src/renderer/components/render-delay/render-delay.tsx +++ b/packages/core/src/renderer/components/render-delay/render-delay.tsx @@ -4,7 +4,7 @@ */ import React, { useEffect, useState } from "react"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; import type { RequestIdleCallback } from "./request-idle-callback.injectable"; import type { CancelIdleCallback } from "./cancel-idle-callback.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/render-delay/request-idle-callback.global-override-for-injectable.ts b/packages/core/src/renderer/components/render-delay/request-idle-callback.global-override-for-injectable.ts index 5dc3d7d916..c9a901e813 100644 --- a/packages/core/src/renderer/components/render-delay/request-idle-callback.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/render-delay/request-idle-callback.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import requestIdleCallbackInjectable from "./request-idle-callback.injectable"; export default getGlobalOverride(requestIdleCallbackInjectable, () => (callback) => { diff --git a/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx b/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx index c65d4c4bf8..212366b628 100644 --- a/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx +++ b/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx @@ -7,7 +7,7 @@ import "./resizing-anchor.scss"; import React from "react"; import { action, observable, makeObservable } from "mobx"; import _ from "lodash"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import { observer } from "mobx-react"; export enum ResizeDirection { diff --git a/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx b/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx index c10075ac6d..7c737027e3 100644 --- a/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx +++ b/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx @@ -8,7 +8,7 @@ import "./resource-metrics.scss"; import React, { createContext, useState } from "react"; import { Radio, RadioGroup } from "../radio"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Spinner } from "../spinner"; import type { MetricsTab } from "../chart/options"; import type { MetricData } from "../../../common/k8s-api/endpoints/metrics.api"; diff --git a/packages/core/src/renderer/components/select/select.tsx b/packages/core/src/renderer/components/select/select.tsx index 2d07442b1f..891fa59aa4 100644 --- a/packages/core/src/renderer/components/select/select.tsx +++ b/packages/core/src/renderer/components/select/select.tsx @@ -14,9 +14,10 @@ import { observer } from "mobx-react"; import ReactSelect, { components, createFilter } from "react-select"; import type { Props as ReactSelectProps, GroupBase, MultiValue, OptionsOrGroups, PropsValue, SingleValue } from "react-select"; import type { LensTheme } from "../../themes/lens-theme"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import activeThemeInjectable from "../../themes/active.injectable"; +import autoBindReact from "auto-bind/react"; const { Menu } = components; @@ -120,7 +121,7 @@ class NonInjectedSelect< constructor(props: SelectProps & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } @computed get themeClass() { diff --git a/packages/core/src/renderer/components/slider/slider.tsx b/packages/core/src/renderer/components/slider/slider.tsx index a026826036..8a696a95df 100644 --- a/packages/core/src/renderer/components/slider/slider.tsx +++ b/packages/core/src/renderer/components/slider/slider.tsx @@ -8,7 +8,7 @@ import "./slider.scss"; import React, { Component } from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { SliderClassKey, SliderProps as MaterialSliderProps } from "@material-ui/core/Slider"; import MaterialSlider from "@material-ui/core/Slider"; import assert from "assert"; diff --git a/packages/core/src/renderer/components/spinner/spinner.tsx b/packages/core/src/renderer/components/spinner/spinner.tsx index 3cf46baa9c..20fa9ebfdd 100644 --- a/packages/core/src/renderer/components/spinner/spinner.tsx +++ b/packages/core/src/renderer/components/spinner/spinner.tsx @@ -6,7 +6,7 @@ import "./spinner.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface SpinnerProps extends React.HTMLProps { singleColor?: boolean; diff --git a/packages/core/src/renderer/components/status-brick/status-brick.tsx b/packages/core/src/renderer/components/status-brick/status-brick.tsx index a9cc89fed2..858cdd8580 100644 --- a/packages/core/src/renderer/components/status-brick/status-brick.tsx +++ b/packages/core/src/renderer/components/status-brick/status-brick.tsx @@ -6,7 +6,7 @@ import "./status-brick.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface StatusBrickProps extends React.HTMLAttributes { diff --git a/packages/core/src/renderer/components/stepper/stepper.tsx b/packages/core/src/renderer/components/stepper/stepper.tsx index 725cb1d827..301d3716f8 100644 --- a/packages/core/src/renderer/components/stepper/stepper.tsx +++ b/packages/core/src/renderer/components/stepper/stepper.tsx @@ -5,7 +5,7 @@ import "./stepper.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface StepperProps extends React.HTMLProps { step: number; diff --git a/packages/core/src/renderer/components/switch/switch.tsx b/packages/core/src/renderer/components/switch/switch.tsx index 2f91faf1a9..7bef386dd5 100644 --- a/packages/core/src/renderer/components/switch/switch.tsx +++ b/packages/core/src/renderer/components/switch/switch.tsx @@ -7,7 +7,7 @@ import styles from "./switch.module.scss"; import type { ChangeEvent, HTMLProps } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface SwitchProps extends Omit, "onChange"> { onChange?: (checked: boolean, event: ChangeEvent) => void; diff --git a/packages/core/src/renderer/components/table/react-table.tsx b/packages/core/src/renderer/components/table/react-table.tsx index e1dcc59ab9..68835e1741 100644 --- a/packages/core/src/renderer/components/table/react-table.tsx +++ b/packages/core/src/renderer/components/table/react-table.tsx @@ -8,7 +8,7 @@ import React, { useCallback, useMemo } from "react"; import type { Row, UseTableOptions } from "react-table"; import { useFlexLayout, useSortBy, useTable } from "react-table"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface ReactTableProps extends UseTableOptions { headless?: boolean; diff --git a/packages/core/src/renderer/components/table/sorting.ts b/packages/core/src/renderer/components/table/sorting.ts index 828ae1e378..81ca0786c9 100644 --- a/packages/core/src/renderer/components/table/sorting.ts +++ b/packages/core/src/renderer/components/table/sorting.ts @@ -4,7 +4,7 @@ */ import type { TableOrderBy, TableSortCallback } from "./table"; -import { Ordering, rectifyOrdering, sortCompare, tuple } from "../../utils"; +import { Ordering, rectifyOrdering, sortCompare, tuple } from "@k8slens/utilities"; export function getSorted(rawItems: T[], sortingCallback: TableSortCallback | undefined, orderBy: TableOrderBy = "asc"): T[] { if (typeof sortingCallback !== "function") { diff --git a/packages/core/src/renderer/components/table/table-cell.tsx b/packages/core/src/renderer/components/table/table-cell.tsx index 758c5cd951..69f45936f8 100644 --- a/packages/core/src/renderer/components/table/table-cell.tsx +++ b/packages/core/src/renderer/components/table/table-cell.tsx @@ -8,9 +8,10 @@ import type { TableSortBy, TableSortParams } from "./table"; import type { ReactNode } from "react"; import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { Checkbox } from "../checkbox"; +import autoBindReact from "auto-bind/react"; export type TableCellElem = React.ReactElement; @@ -75,7 +76,7 @@ export interface TableCellProps extends React.DOMAttributes { export class TableCell extends React.Component { constructor(props: TableCellProps) { super(props); - autoBind(this); + autoBindReact(this); } onClick(evt: React.MouseEvent) { diff --git a/packages/core/src/renderer/components/table/table-head.tsx b/packages/core/src/renderer/components/table/table-head.tsx index 6424d43041..a336c19b5d 100644 --- a/packages/core/src/renderer/components/table/table-head.tsx +++ b/packages/core/src/renderer/components/table/table-head.tsx @@ -6,7 +6,7 @@ import "./table-head.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export type TableHeadElem = React.ReactElement; diff --git a/packages/core/src/renderer/components/table/table-model/table-model.ts b/packages/core/src/renderer/components/table/table-model/table-model.ts index 4349ada20c..cc95c0b742 100644 --- a/packages/core/src/renderer/components/table/table-model/table-model.ts +++ b/packages/core/src/renderer/components/table/table-model/table-model.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { StorageLayer } from "../../../utils"; +import type { StorageLayer } from "../../../utils/storage-helper"; import type { TableSortParams } from "../table"; export interface TableStorageModel { diff --git a/packages/core/src/renderer/components/table/table-row.tsx b/packages/core/src/renderer/components/table/table-row.tsx index 9725c7112d..aaf4a0a2fb 100644 --- a/packages/core/src/renderer/components/table/table-row.tsx +++ b/packages/core/src/renderer/components/table/table-row.tsx @@ -7,7 +7,7 @@ import "./table-row.scss"; import type { CSSProperties } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export type TableRowElem = React.ReactElement>; diff --git a/packages/core/src/renderer/components/table/table.tsx b/packages/core/src/renderer/components/table/table.tsx index b35aae742c..9c1cbcae70 100644 --- a/packages/core/src/renderer/components/table/table.tsx +++ b/packages/core/src/renderer/components/table/table.tsx @@ -7,7 +7,7 @@ import "./table.scss"; import React from "react"; import { observer } from "mobx-react"; -import { autoBind, cssNames, isDefined } from "../../utils"; +import { cssNames, isDefined } from "@k8slens/utilities"; import type { TableRowElem, TableRowProps } from "./table-row"; import { TableRow } from "./table-row"; import type { TableHeadElem } from "./table-head"; @@ -24,6 +24,7 @@ import type { ItemObject } from "../../../common/item.store"; import assert from "assert"; import orderByUrlParamInjectable from "./order-by-url-param.injectable"; import sortByUrlParamInjectable from "./sort-by-url-param.injectable"; +import autoBindReact from "auto-bind/react"; export type TableSortBy = string; export type TableOrderBy = "asc" | "desc"; @@ -97,7 +98,7 @@ class NonInjectedTable extends React.Component & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } componentDidMount() { diff --git a/packages/core/src/renderer/components/tabs/tabs.tsx b/packages/core/src/renderer/components/tabs/tabs.tsx index 7b08b63159..4e76184f3c 100644 --- a/packages/core/src/renderer/components/tabs/tabs.tsx +++ b/packages/core/src/renderer/components/tabs/tabs.tsx @@ -6,8 +6,9 @@ import "./tabs.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; +import autoBindReact from "auto-bind/react"; const TabsContext = React.createContext>({}); @@ -66,7 +67,7 @@ export class Tab extends React.PureComponent> { constructor(props: TabProps) { super(props); - autoBind(this); + autoBindReact(this); } get isActive() { diff --git a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx index 358a72b857..627fe86fd7 100644 --- a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx +++ b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx @@ -66,18 +66,11 @@ import shouldStartHiddenInjectable from "../../../main/electron-app/features/sho import fsInjectable from "../../../common/fs/fs.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import homeDirectoryPathInjectable from "../../../common/os/home-directory-path.injectable"; -import { testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import selectedNamespacesStorageInjectable from "../../../features/namespace-filtering/renderer/storage.injectable"; import { registerFeature } from "@k8slens/feature-core"; -import { - applicationFeatureForElectronMain, - testUtils as applicationForElectronTestUtils, -} from "@k8slens/application-for-electron-main"; -import { - applicationFeature, - startApplicationInjectionToken, -} from "@k8slens/application"; - +import { applicationFeatureForElectronMain, testUtils as applicationForElectronTestUtils } from "@k8slens/application-for-electron-main"; +import { applicationFeature, startApplicationInjectionToken } from "@k8slens/application"; +import { testUsingFakeTime } from "../../../test-utils/use-fake-time"; type Callback = (di: DiContainer) => void | Promise; diff --git a/packages/core/src/renderer/components/tooltip/tooltip.tsx b/packages/core/src/renderer/components/tooltip/tooltip.tsx index 7fc1abddbf..5c2f512f2f 100644 --- a/packages/core/src/renderer/components/tooltip/tooltip.tsx +++ b/packages/core/src/renderer/components/tooltip/tooltip.tsx @@ -8,9 +8,10 @@ import "./tooltip.scss"; import React from "react"; import { createPortal } from "react-dom"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames, autoBind } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { observable, makeObservable, action } from "mobx"; +import autoBindReact from "auto-bind/react"; export enum TooltipPosition { TOP = "top", @@ -61,7 +62,7 @@ export class Tooltip extends React.Component { constructor(props: TooltipProps) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } get targetElem(): HTMLElement | null { diff --git a/packages/core/src/renderer/components/tooltip/withTooltip.tsx b/packages/core/src/renderer/components/tooltip/withTooltip.tsx index 931653dc8e..533fbecf44 100644 --- a/packages/core/src/renderer/components/tooltip/withTooltip.tsx +++ b/packages/core/src/renderer/components/tooltip/withTooltip.tsx @@ -9,9 +9,9 @@ import type { ReactNode } from "react"; import React, { useState } from "react"; import type { TooltipProps } from "./tooltip"; import { Tooltip } from "./tooltip"; -import { isReactNode } from "../../utils/isReactNode"; +import { isReactNode } from "@k8slens/utilities"; import uniqueId from "lodash/uniqueId"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; export interface TooltipDecoratorProps { tooltip?: ReactNode | Omit; diff --git a/packages/core/src/renderer/components/tree-view/tree-view.tsx b/packages/core/src/renderer/components/tree-view/tree-view.tsx index 8672f9597f..c7fc813199 100644 --- a/packages/core/src/renderer/components/tree-view/tree-view.tsx +++ b/packages/core/src/renderer/components/tree-view/tree-view.tsx @@ -9,7 +9,7 @@ import React, { useEffect, useRef } from "react"; import { Icon } from "../icon"; import TreeView from "@material-ui/lab/TreeView"; import TreeItem from "@material-ui/lab/TreeItem"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import _ from "lodash"; import getDeepDash from "deepdash"; diff --git a/packages/core/src/renderer/components/virtual-list/virtual-list.tsx b/packages/core/src/renderer/components/virtual-list/virtual-list.tsx index 3ea0aebb1c..2a27376a37 100644 --- a/packages/core/src/renderer/components/virtual-list/virtual-list.tsx +++ b/packages/core/src/renderer/components/virtual-list/virtual-list.tsx @@ -12,7 +12,7 @@ import React, { createRef, forwardRef, useCallback, useEffect, useImperativeHand import { observer } from "mobx-react"; import type { Align, ListChildComponentProps, ListOnScrollProps } from "react-window"; import { VariableSizeList } from "react-window"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import type { TableRowProps } from "../table/table-row"; import isEqual from "lodash/isEqual"; import AutoSizer from "react-virtualized-auto-sizer"; diff --git a/packages/core/src/renderer/components/wizard/wizard.tsx b/packages/core/src/renderer/components/wizard/wizard.tsx index 5a1e5af789..0e58e12ece 100755 --- a/packages/core/src/renderer/components/wizard/wizard.tsx +++ b/packages/core/src/renderer/components/wizard/wizard.tsx @@ -5,7 +5,7 @@ import "./wizard.scss"; import React from "react"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { Button } from "../button"; import { Stepper } from "../stepper"; import { SubTitle } from "../layout/sub-title"; diff --git a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.test.tsx b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.test.tsx index f451d24923..4ad315ab98 100644 --- a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.test.tsx +++ b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.test.tsx @@ -22,8 +22,8 @@ import legacyOnChannelListenInjectable from "../../ipc/legacy-channel-listen.inj import currentRouteComponentInjectable from "../../routes/current-route-component.injectable"; import hostedClusterIdInjectable from "../../cluster-frame-context/hosted-cluster-id.injectable"; import hostedClusterInjectable from "../../cluster-frame-context/hosted-cluster.injectable"; -import { testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import currentlyInClusterFrameInjectable from "../../routes/currently-in-cluster-frame.injectable"; +import { testUsingFakeTime } from "../../../test-utils/use-fake-time"; describe("", () => { let render: () => RenderResult; diff --git a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx index 097ebbb87c..dd9d087769 100755 --- a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx +++ b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx @@ -9,7 +9,7 @@ import type { NamespaceStore } from "../../components/+namespaces/store"; import { withInjectables } from "@ogre-tools/injectable-react"; import namespaceStoreInjectable from "../../components/+namespaces/store.injectable"; import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api"; -import { disposer } from "../../utils"; +import { disposer } from "@k8slens/utilities"; import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable"; import type { ClusterFrameChildComponent } from "./cluster-frame-child-component-injection-token"; import { clusterFrameChildComponentInjectionToken } from "./cluster-frame-child-component-injection-token"; diff --git a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts index 8d2c3a43be..f1e3024d80 100644 --- a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts +++ b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts @@ -10,7 +10,7 @@ import catalogEntityRegistryInjectable from "../../api/catalog/entity/registry.i import registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable"; import loadExtensionsInjectable from "../load-extensions.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { delay } from "../../../common/utils"; +import { delay } from "@k8slens/utilities"; import { broadcastMessage } from "../../../common/ipc"; import { bundledExtensionsLoaded } from "../../../common/ipc/extension-handling"; diff --git a/packages/core/src/renderer/frames/root-frame/setup-system-ca.injectable.ts b/packages/core/src/renderer/frames/root-frame/setup-system-ca.injectable.ts index 4fe4d07758..43ace24cc2 100644 --- a/packages/core/src/renderer/frames/root-frame/setup-system-ca.injectable.ts +++ b/packages/core/src/renderer/frames/root-frame/setup-system-ca.injectable.ts @@ -9,8 +9,11 @@ import injectSystemCAsInjectable from "../../../features/certificate-authorities const setupSystemCaInjectable = getInjectable({ id: "setup-system-ca", instantiate: (di) => ({ - id: "setup-system-ca", - run: di.inject(injectSystemCAsInjectable), + run: async () => { + const injectSystemCAs = di.inject(injectSystemCAsInjectable); + + await injectSystemCAs(); + }, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/renderer/getDiForUnitTesting.tsx b/packages/core/src/renderer/getDiForUnitTesting.tsx index 0ee4a9b66b..fbee046de2 100644 --- a/packages/core/src/renderer/getDiForUnitTesting.tsx +++ b/packages/core/src/renderer/getDiForUnitTesting.tsx @@ -14,14 +14,9 @@ import requestAnimationFrameInjectable from "./components/animate/request-animat import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable"; import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable"; import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable"; -import type { GlobalOverride } from "../common/test-utils/get-global-override"; - -import { - setLegacyGlobalDiForExtensionApi, -} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; -import { - registerMobX, -} from "@ogre-tools/injectable-extension-for-mobx"; +import type { GlobalOverride } from "@k8slens/test-utils"; +import { setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import { registerInjectableReact } from "@ogre-tools/injectable-react"; export const getDiForUnitTesting = () => { @@ -46,7 +41,7 @@ export const getDiForUnitTesting = () => { }); for (const globalOverridePath of global.injectablePaths.renderer.globalOverridePaths) { - const globalOverride = require(globalOverridePath).default as GlobalOverride; + const globalOverride = require(globalOverridePath).default as GlobalOverride; di.override(globalOverride.injectable, globalOverride.overridingInstantiate); } diff --git a/packages/core/src/renderer/ipc/index.ts b/packages/core/src/renderer/ipc/index.ts index 4bbf473515..f8ebfc2de0 100644 --- a/packages/core/src/renderer/ipc/index.ts +++ b/packages/core/src/renderer/ipc/index.ts @@ -9,10 +9,10 @@ import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppM import { extensionDiscoveryStateChannel, extensionLoaderFromMainChannel } from "../../common/ipc/extension-handling"; import type { InstalledExtension } from "../../extensions/extension-discovery/extension-discovery"; import type { LensExtensionId } from "../../extensions/lens-extension"; -import { toJS } from "../utils"; import type { Location } from "history"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable"; +import { toJS } from "../../common/utils"; function requestMain(channel: string, ...args: any[]) { const di = getLegacyGlobalDiForExtensionApi(); diff --git a/packages/core/src/renderer/kube-object/handlers.injectable.ts b/packages/core/src/renderer/kube-object/handlers.injectable.ts index 8344d94034..b8827e2f8d 100644 --- a/packages/core/src/renderer/kube-object/handlers.injectable.ts +++ b/packages/core/src/renderer/kube-object/handlers.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import rendererExtensionsInjectable from "../../extensions/renderer-extensions.injectable"; -import { getOrInsert, getOrInsertMap, readonly } from "../utils"; +import { getOrInsert, getOrInsertMap, readonly } from "@k8slens/utilities"; import type { KubeObjectHandlerRegistration, KubeObjectHandlers } from "./handler"; import { staticKubeObjectHandlerInjectionToken } from "./handler"; diff --git a/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts b/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts index 110ed61472..f3dc0ae237 100644 --- a/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts +++ b/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { comparer, reaction } from "mobx"; -import type { Disposer } from "../../common/utils"; -import { disposer, getOrInsert, noop, WrappedAbortController } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer, getOrInsert, noop, WrappedAbortController } from "@k8slens/utilities"; import { once } from "lodash"; import type { Logger } from "../../common/logger"; import type { KubeObjectStoreLoadAllParams, KubeObjectStoreSubscribeParams } from "../../common/k8s-api/kube-object.store"; diff --git a/packages/core/src/renderer/kube-watch-api/subscribe-stores.global-override-for-injectable.ts b/packages/core/src/renderer/kube-watch-api/subscribe-stores.global-override-for-injectable.ts index 711e9caa17..6390951c1f 100644 --- a/packages/core/src/renderer/kube-watch-api/subscribe-stores.global-override-for-injectable.ts +++ b/packages/core/src/renderer/kube-watch-api/subscribe-stores.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import subscribeStoresInjectable from "./subscribe-stores.injectable"; export default getGlobalOverride( diff --git a/packages/core/src/renderer/monaco/add-new-theme.global-override-for-injectable.ts b/packages/core/src/renderer/monaco/add-new-theme.global-override-for-injectable.ts index 00e034a8b7..abfc721632 100644 --- a/packages/core/src/renderer/monaco/add-new-theme.global-override-for-injectable.ts +++ b/packages/core/src/renderer/monaco/add-new-theme.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import addNewMonacoThemeInjectable from "./add-new-theme.injectable"; export default getGlobalOverride(addNewMonacoThemeInjectable, () => () => {}); diff --git a/packages/core/src/renderer/navigation/focus-window.global-override-for-injectable.ts b/packages/core/src/renderer/navigation/focus-window.global-override-for-injectable.ts index b8972b354a..5da78b0a00 100644 --- a/packages/core/src/renderer/navigation/focus-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/navigation/focus-window.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import focusWindowInjectable from "./focus-window.injectable"; export default getGlobalOverride(focusWindowInjectable, () => () => {}); diff --git a/packages/core/src/renderer/navigation/history.global-override-for-injectable.ts b/packages/core/src/renderer/navigation/history.global-override-for-injectable.ts index 477e3df397..cc3587d12a 100644 --- a/packages/core/src/renderer/navigation/history.global-override-for-injectable.ts +++ b/packages/core/src/renderer/navigation/history.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import { createMemoryHistory } from "history"; -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import historyInjectable from "./history.injectable"; export default getGlobalOverride(historyInjectable, () => createMemoryHistory()); diff --git a/packages/core/src/renderer/navigation/setup-logging-for-navigation.injectable.ts b/packages/core/src/renderer/navigation/setup-logging-for-navigation.injectable.ts index e6a1bce903..b56eb979a2 100644 --- a/packages/core/src/renderer/navigation/setup-logging-for-navigation.injectable.ts +++ b/packages/core/src/renderer/navigation/setup-logging-for-navigation.injectable.ts @@ -10,7 +10,6 @@ import observableHistoryInjectable from "./observable-history.injectable"; const setupLoggingForNavigationInjectable = getInjectable({ id: "setup-logging-for-navigation", instantiate: (di) => ({ - id: "setup-logging-for-navigation", run: () => { const logger = di.inject(loggerInjectable); const observableHistory = di.inject(observableHistoryInjectable); diff --git a/packages/core/src/renderer/port-forward/port-forward-dialog.tsx b/packages/core/src/renderer/port-forward/port-forward-dialog.tsx index 831edd2e70..cb85dfc3a9 100644 --- a/packages/core/src/renderer/port-forward/port-forward-dialog.tsx +++ b/packages/core/src/renderer/port-forward/port-forward-dialog.tsx @@ -12,7 +12,7 @@ import type { DialogProps } from "../components/dialog"; import { Dialog } from "../components/dialog"; import { Wizard, WizardStep } from "../components/wizard"; import { Input } from "../components/input"; -import { cssNames } from "../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PortForwardStore } from "./port-forward-store/port-forward-store"; import { Checkbox } from "../components/checkbox"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/port-forward/port-forward-item.ts b/packages/core/src/renderer/port-forward/port-forward-item.ts index 84ad444ecf..0ea56bc4cd 100644 --- a/packages/core/src/renderer/port-forward/port-forward-item.ts +++ b/packages/core/src/renderer/port-forward/port-forward-item.ts @@ -4,8 +4,8 @@ */ +import autoBind from "auto-bind"; import type { ItemObject } from "../../common/item.store"; -import { autoBind } from "../../common/utils"; export type ForwardedPortStatus = "Active" | "Disabled"; export interface ForwardedPort { diff --git a/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts b/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts index 288ccd6e08..eaf1711bf3 100644 --- a/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts +++ b/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts @@ -5,14 +5,15 @@ import { action, makeObservable, observable, reaction } from "mobx"; import { ItemStore } from "../../../common/item.store"; -import type { StorageLayer } from "../../utils"; -import { autoBind, disposer } from "../../utils"; +import type { StorageLayer } from "../../utils/storage-helper"; +import { disposer } from "@k8slens/utilities"; import type { ForwardedPort } from "../port-forward-item"; import { PortForwardItem } from "../port-forward-item"; import { waitUntilFree } from "tcp-port-used"; import type { Logger } from "../../../common/logger"; import type { JsonApi } from "../../../common/k8s-api/json-api"; import type { RequestActivePortForward } from "./request-active-port-forward.injectable"; +import autoBind from "auto-bind"; interface Dependencies { readonly storage: StorageLayer; diff --git a/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts b/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts index 90f91320c8..a54eb929a2 100644 --- a/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts +++ b/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { urlBuilderFor } from "../../../common/utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities"; import type { ForwardedPort } from "../port-forward-item"; export type RequestActivePortForward = (portForward: ForwardedPort) => Promise; diff --git a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts index ad6501cd35..d1897f19ab 100644 --- a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts +++ b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts @@ -8,7 +8,7 @@ import type { PageParamInit } from "../navigation/page-param"; import type { LensRendererExtension } from "../../extensions/lens-renderer-extension"; import { map } from "lodash/fp"; import createPageParamInjectable from "../navigation/create-page-param.injectable"; -import { object } from "../utils"; +import { object } from "@k8slens/utilities"; import type { PageRegistration } from "./page-registration"; export interface ExtensionPageParametersInstantiationParam { diff --git a/packages/core/src/renderer/routes/navigate-to-route.injectable.ts b/packages/core/src/renderer/routes/navigate-to-route.injectable.ts index 8b57a02613..4a83b2f467 100644 --- a/packages/core/src/renderer/routes/navigate-to-route.injectable.ts +++ b/packages/core/src/renderer/routes/navigate-to-route.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { navigateToUrlInjectionToken } from "../../common/front-end-routing/navigate-to-url-injection-token"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; import currentlyInClusterFrameInjectable from "./currently-in-cluster-frame.injectable"; -import { buildURL } from "../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; const navigateToRouteInjectable = getInjectable({ id: "navigate-to-route", diff --git a/packages/core/src/renderer/start-frame/start-frame.injectable.ts b/packages/core/src/renderer/start-frame/start-frame.injectable.ts index e7311455c0..b4bddc9c30 100644 --- a/packages/core/src/renderer/start-frame/start-frame.injectable.ts +++ b/packages/core/src/renderer/start-frame/start-frame.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { runManyFor } from "../../common/runnable/run-many-for"; +import { runManyFor } from "@k8slens/run-many"; import * as tokens from "../before-frame-starts/tokens"; import currentlyInClusterFrameInjectable from "../routes/currently-in-cluster-frame.injectable"; import { diff --git a/packages/core/src/renderer/stores/init-user-store.injectable.ts b/packages/core/src/renderer/stores/init-user-store.injectable.ts index fba2287fe0..af192d9b2e 100644 --- a/packages/core/src/renderer/stores/init-user-store.injectable.ts +++ b/packages/core/src/renderer/stores/init-user-store.injectable.ts @@ -10,14 +10,12 @@ import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/i const initUserStoreInjectable = getInjectable({ id: "init-user-store", instantiate: (di) => ({ - id: "init-user-store", run: () => { - // This must be done here so as to actually only be instantiated after the dependencies are const userStore = di.inject(userStoreInjectable); return userStore.load(); }, - runAfter: di.inject(initDefaultUpdateChannelInjectable), + runAfter: initDefaultUpdateChannelInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts b/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts index 72b721aa14..94afd5c531 100644 --- a/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts +++ b/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import loggerInjectable from "../../common/logger.injectable"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; -import { object } from "../utils"; +import { object } from "@k8slens/utilities"; import type { LensTheme } from "./lens-theme"; export type ApplyLensTheme = (theme: LensTheme) => void; diff --git a/packages/core/src/renderer/themes/apply-theme.global-override-for-injectable.ts b/packages/core/src/renderer/themes/apply-theme.global-override-for-injectable.ts index c8283843e1..fe9e3c60c8 100644 --- a/packages/core/src/renderer/themes/apply-theme.global-override-for-injectable.ts +++ b/packages/core/src/renderer/themes/apply-theme.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import applyLensThemeInjectable from "./apply-lens-theme.injectable"; export default getGlobalOverride(applyLensThemeInjectable, () => () => {}); diff --git a/packages/core/src/renderer/themes/setup-apply-active-theme.injectable.ts b/packages/core/src/renderer/themes/setup-apply-active-theme.injectable.ts index 960f5f8764..c71dd5baa7 100644 --- a/packages/core/src/renderer/themes/setup-apply-active-theme.injectable.ts +++ b/packages/core/src/renderer/themes/setup-apply-active-theme.injectable.ts @@ -13,7 +13,6 @@ import applyLensThemeInjectable from "./apply-lens-theme.injectable"; const setupApplyActiveThemeInjectable = getInjectable({ id: "setup-apply-active-theme", instantiate: (di) => ({ - id: "setup-apply-active-theme", run: () => { const activeTheme = di.inject(activeThemeInjectable); const applyLensTheme = di.inject(applyLensThemeInjectable); @@ -27,8 +26,8 @@ const setupApplyActiveThemeInjectable = getInjectable({ ); }, runAfter: [ - di.inject(initializeSystemThemeTypeInjectable), - di.inject(initUserStoreInjectable), + initializeSystemThemeTypeInjectable, + initUserStoreInjectable, ], }), injectionToken: beforeFrameStartsSecondInjectionToken, diff --git a/packages/core/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.ts b/packages/core/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.ts index aea98b3360..c11b34e7e3 100644 --- a/packages/core/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.ts +++ b/packages/core/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.ts @@ -10,7 +10,6 @@ const startListeningOfChannelsInjectable = getInjectable({ id: "start-listening-of-channels-renderer", instantiate: (di) => ({ - id: "start-listening-of-channels-renderer", run: () => { const listeningOfChannels = di.inject(listeningOnMessageChannelsInjectable); diff --git a/packages/core/src/renderer/utils/channel/ipc-renderer.global-override-for-injectable.ts b/packages/core/src/renderer/utils/channel/ipc-renderer.global-override-for-injectable.ts index 28043f1299..679229f912 100644 --- a/packages/core/src/renderer/utils/channel/ipc-renderer.global-override-for-injectable.ts +++ b/packages/core/src/renderer/utils/channel/ipc-renderer.global-override-for-injectable.ts @@ -4,7 +4,7 @@ */ import type { IpcRenderer } from "electron"; import ipcRendererInjectable from "./ipc-renderer.injectable"; -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; export default getGlobalOverride(ipcRendererInjectable, () => ({ invoke: () => {}, diff --git a/packages/core/src/renderer/utils/create-storage/initialize-state.injectable.ts b/packages/core/src/renderer/utils/create-storage/initialize-state.injectable.ts index 2c0d832c9e..75d61908cd 100644 --- a/packages/core/src/renderer/utils/create-storage/initialize-state.injectable.ts +++ b/packages/core/src/renderer/utils/create-storage/initialize-state.injectable.ts @@ -20,7 +20,6 @@ import storageSaveDelayInjectable from "./storage-save-delay.injectable"; const initializeStateInjectable = getInjectable({ id: "initialize-lens-local-storage-state", instantiate: (di) => ({ - id: "initialize-lens-local-storage-state", run: async () => { const joinPaths = di.inject(joinPathsInjectable); const directoryForLensLocalStorage = di.inject(directoryForLensLocalStorageInjectable); @@ -67,7 +66,7 @@ const initializeStateInjectable = getInjectable({ } } }, - runAfter: di.inject(setupAppPathsInjectable), + runAfter: setupAppPathsInjectable, }), injectionToken: beforeFrameStartsFirstInjectionToken, }); diff --git a/packages/core/src/renderer/utils/create-storage/storage-save-delay.global-override-for-injectable.ts b/packages/core/src/renderer/utils/create-storage/storage-save-delay.global-override-for-injectable.ts index f6bcc97ab0..5217018c3e 100644 --- a/packages/core/src/renderer/utils/create-storage/storage-save-delay.global-override-for-injectable.ts +++ b/packages/core/src/renderer/utils/create-storage/storage-save-delay.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../common/test-utils/get-global-override"; +import { getGlobalOverride } from "@k8slens/test-utils"; import storageSaveDelayInjectable from "./storage-save-delay.injectable"; export default getGlobalOverride(storageSaveDelayInjectable, () => 0); diff --git a/packages/core/src/renderer/utils/index.ts b/packages/core/src/renderer/utils/index.ts deleted file mode 100755 index cde1a70077..0000000000 --- a/packages/core/src/renderer/utils/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -// Common usage utils & helpers -export * from "../../common/utils"; -export * from "../../common/event-emitter"; - -export * from "./cssNames"; -export * from "./cssVar"; -export * from "./display-mode"; -export * from "./interval"; -export * from "./isMiddleClick"; -export * from "./isReactNode"; -export * from "./metricUnitsToNumber"; -export * from "./name-parts"; -export * from "./prevDefault"; -export * from "./saveFile"; -export * from "./storage-helper"; diff --git a/packages/core/src/renderer/utils/rbac.ts b/packages/core/src/renderer/utils/rbac.ts index 18748bcfac..b4aa9a6a81 100644 --- a/packages/core/src/renderer/utils/rbac.ts +++ b/packages/core/src/renderer/utils/rbac.ts @@ -5,7 +5,7 @@ import type { KubeResource } from "../../common/rbac"; import { apiResourceRecord } from "../../common/rbac"; -import { object } from "../../common/utils"; +import { object } from "@k8slens/utilities"; export const ResourceNames: Record = { "namespaces": "Namespaces", diff --git a/packages/core/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.ts b/packages/core/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.ts index 3666bf0840..aceb20cea4 100644 --- a/packages/core/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.ts +++ b/packages/core/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.ts @@ -15,7 +15,6 @@ const provideInitialValuesForSyncBoxesInjectable = getInjectable({ id: "provide-initial-values-for-sync-boxes", instantiate: (di) => ({ - id: "provide-initial-values-for-sync-boxes", run: async () => { const requestFromChannel = di.inject(requestFromChannelInjectionToken); const syncBoxes = di.injectMany(syncBoxInjectionToken); diff --git a/packages/core/src/renderer/vars/build-version/init.injectable.ts b/packages/core/src/renderer/vars/build-version/init.injectable.ts index 0734960289..0eeecaa838 100644 --- a/packages/core/src/renderer/vars/build-version/init.injectable.ts +++ b/packages/core/src/renderer/vars/build-version/init.injectable.ts @@ -9,7 +9,6 @@ import buildVersionInjectable from "./build-version.injectable"; const initializeBuildVersionInjectable = getInjectable({ id: "initialize-build-version", instantiate: (di) => ({ - id: "initialize-build-version", run: async () => { const buildVersion = di.inject(buildVersionInjectable); diff --git a/packages/core/src/renderer/vars/default-update-channel/init.injectable.ts b/packages/core/src/renderer/vars/default-update-channel/init.injectable.ts index a349769815..7624d1f335 100644 --- a/packages/core/src/renderer/vars/default-update-channel/init.injectable.ts +++ b/packages/core/src/renderer/vars/default-update-channel/init.injectable.ts @@ -10,13 +10,12 @@ import defaultUpdateChannelInjectable from "../../../features/application-update const initDefaultUpdateChannelInjectable = getInjectable({ id: "init-default-update-channel", instantiate: (di) => ({ - id: "init-default-update-channel", run: async () => { const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); await defaultUpdateChannel.init(); }, - runAfter: di.inject(initReleaseChannelInjectable), + runAfter: initReleaseChannelInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/renderer/vars/release-channel/init.injectable.ts b/packages/core/src/renderer/vars/release-channel/init.injectable.ts index e0092abf55..e49b9649a8 100644 --- a/packages/core/src/renderer/vars/release-channel/init.injectable.ts +++ b/packages/core/src/renderer/vars/release-channel/init.injectable.ts @@ -10,13 +10,12 @@ import initSemanticBuildVersionInjectable from "../semantic-build-version/init.i const initReleaseChannelInjectable = getInjectable({ id: "init-release-channel", instantiate: (di) => ({ - id: "init-release-channel", run: async () => { const releaseChannel = di.inject(releaseChannelInjectable); await releaseChannel.init(); }, - runAfter: di.inject(initSemanticBuildVersionInjectable), + runAfter: initSemanticBuildVersionInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/renderer/vars/semantic-build-version/init.injectable.ts b/packages/core/src/renderer/vars/semantic-build-version/init.injectable.ts index 62a9a3387f..3ef0a6a496 100644 --- a/packages/core/src/renderer/vars/semantic-build-version/init.injectable.ts +++ b/packages/core/src/renderer/vars/semantic-build-version/init.injectable.ts @@ -10,13 +10,12 @@ import initializeBuildVersionInjectable from "../build-version/init.injectable"; const initSemanticBuildVersionInjectable = getInjectable({ id: "init-semantic-build-version", instantiate: (di) => ({ - id: "init-semantic-build-version", run: async () => { const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); await buildSemanticVersion.init(); }, - runAfter: di.inject(initializeBuildVersionInjectable), + runAfter: initializeBuildVersionInjectable, }), injectionToken: beforeFrameStartsSecondInjectionToken, }); diff --git a/packages/core/src/renderer/window/event-listener.injectable.ts b/packages/core/src/renderer/window/event-listener.injectable.ts index 78a1827e19..631fec116e 100644 --- a/packages/core/src/renderer/window/event-listener.injectable.ts +++ b/packages/core/src/renderer/window/event-listener.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; -import type { Disposer } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; export type AddWindowEventListener = typeof addWindowEventListener; export type WindowEventListener = (this: Window, ev: WindowEventMap[K]) => any; diff --git a/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts b/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts index f9275c18b2..1b69f13016 100644 --- a/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts +++ b/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts @@ -5,7 +5,7 @@ import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; import enlistMessageChannelListenerInjectableInRenderer from "../../renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; -import { getOrInsert, getOrInsertSet } from "../../common/utils"; +import { getOrInsert, getOrInsertSet } from "@k8slens/utilities"; import type { SendToViewArgs } from "../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; import { deserialize, serialize } from "v8"; diff --git a/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts b/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts index c39731ac8e..8adc35c4d5 100644 --- a/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts +++ b/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts @@ -6,7 +6,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; import { deserialize, serialize } from "v8"; import type { MessageChannel, MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; import enlistMessageChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; -import { getOrInsertSet } from "../../renderer/utils"; +import { getOrInsertSet } from "@k8slens/utilities"; import sendToMainInjectable from "../../renderer/utils/channel/send-to-main.injectable"; export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => { diff --git a/packages/core/src/test-utils/override-fs-with-fakes.ts b/packages/core/src/test-utils/override-fs-with-fakes.ts index 734170b0c7..87f8dd583a 100644 --- a/packages/core/src/test-utils/override-fs-with-fakes.ts +++ b/packages/core/src/test-utils/override-fs-with-fakes.ts @@ -62,6 +62,7 @@ export const getOverrideFsWithFakes = () => { ensureDirSync, createReadStream: root.createReadStream as any, stat: root.promises.stat as any, + unlink: root.promises.unlink, })); }; }; diff --git a/packages/core/src/common/test-utils/use-fake-time.ts b/packages/core/src/test-utils/use-fake-time.ts similarity index 100% rename from packages/core/src/common/test-utils/use-fake-time.ts rename to packages/core/src/test-utils/use-fake-time.ts diff --git a/packages/open-lens/integration/helpers/utils.ts b/packages/open-lens/integration/helpers/utils.ts index bbc52e3157..f92a1aad00 100644 --- a/packages/open-lens/integration/helpers/utils.ts +++ b/packages/open-lens/integration/helpers/utils.ts @@ -10,7 +10,7 @@ import * as uuid from "uuid"; import type { ElectronApplication, Frame, Page } from "playwright"; import { _electron as electron } from "playwright"; import { noop } from "lodash"; -import { disposer } from "../../../core/src/common/utils"; +import { disposer } from "@k8slens/utilities"; export const appPaths: Partial> = { "win32": "./dist/win-unpacked/OpenLens.exe", diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index b7bfb55244..469910408a 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -201,12 +201,14 @@ "@k8slens/core": "^6.5.0-alpha.0", "@k8slens/ensure-binaries": "^6.5.0-alpha.0", "@k8slens/generate-tray-icons": "^6.5.0-alpha.0", + "@k8slens/run-many": "^1.0.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@ogre-tools/fp": "^15.1.2", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "mobx": "^6.8.0", "rimraf": "^4.1.2" }, diff --git a/packages/technical-features/application/agnostic/index.ts b/packages/technical-features/application/agnostic/index.ts index 559a91582b..239e938cd2 100644 --- a/packages/technical-features/application/agnostic/index.ts +++ b/packages/technical-features/application/agnostic/index.ts @@ -1,8 +1,6 @@ export { applicationFeature } from "./src/feature"; -export { onLoadOfApplicationInjectionToken } from "./src/start-application/timeslots/on-load-of-application-injection-token"; -export { beforeApplicationIsLoadingInjectionToken } from "./src/start-application/timeslots/before-application-is-loading-injection-token"; -export { afterApplicationIsLoadedInjectionToken } from "./src/start-application/timeslots/after-application-is-loaded-injection-token"; +export * from "./src/start-application/time-slots"; export type { StartApplication } from "./src/start-application/start-application.injectable"; export { startApplicationInjectionToken } from "./src/start-application/start-application.injectable"; diff --git a/packages/technical-features/application/agnostic/package.json b/packages/technical-features/application/agnostic/package.json index 35b555ac2e..fc9318e286 100644 --- a/packages/technical-features/application/agnostic/package.json +++ b/packages/technical-features/application/agnostic/package.json @@ -33,7 +33,6 @@ "@ogre-tools/fp": "^15.1.2", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "lodash": "^4.17.15" }, diff --git a/packages/technical-features/application/agnostic/src/start-application/start-application.injectable.ts b/packages/technical-features/application/agnostic/src/start-application/start-application.injectable.ts index 4d9d8c9da2..895462f08e 100644 --- a/packages/technical-features/application/agnostic/src/start-application/start-application.injectable.ts +++ b/packages/technical-features/application/agnostic/src/start-application/start-application.injectable.ts @@ -1,8 +1,6 @@ import { getInjectable, getInjectionToken } from "@ogre-tools/injectable"; -import { runManyFor } from "@ogre-tools/injectable-utils"; -import { beforeApplicationIsLoadingInjectionToken } from "./timeslots/before-application-is-loading-injection-token"; -import { onLoadOfApplicationInjectionToken } from "./timeslots/on-load-of-application-injection-token"; -import { afterApplicationIsLoadedInjectionToken } from "./timeslots/after-application-is-loaded-injection-token"; +import { runManyFor } from "@k8slens/run-many"; +import * as timeSlots from "./time-slots"; export type StartApplication = () => Promise; @@ -16,22 +14,13 @@ const startApplicationInjectable = getInjectable({ instantiate: (di): StartApplication => { const runManyAsync = runManyFor(di) - - const beforeApplicationIsLoading = runManyAsync( - beforeApplicationIsLoadingInjectionToken - ); - - const onLoadOfApplication = runManyAsync(onLoadOfApplicationInjectionToken); - - const afterApplicationIsLoaded = runManyAsync( - afterApplicationIsLoadedInjectionToken - ); + const beforeApplicationIsLoading = runManyAsync(timeSlots.beforeApplicationIsLoadingInjectionToken); + const onLoadOfApplication = runManyAsync(timeSlots.onLoadOfApplicationInjectionToken); + const afterApplicationIsLoaded = runManyAsync(timeSlots.afterApplicationIsLoadedInjectionToken); return async () => { await beforeApplicationIsLoading(); - await onLoadOfApplication(); - await afterApplicationIsLoaded(); }; }, diff --git a/packages/technical-features/application/agnostic/src/start-application/starting-of-application.test.ts b/packages/technical-features/application/agnostic/src/start-application/starting-of-application.test.ts index 37453d4ba3..3593eb188a 100644 --- a/packages/technical-features/application/agnostic/src/start-application/starting-of-application.test.ts +++ b/packages/technical-features/application/agnostic/src/start-application/starting-of-application.test.ts @@ -6,10 +6,8 @@ import { import { registerFeature } from "@k8slens/feature-core"; import { applicationFeature } from "../feature"; import { startApplicationInjectionToken } from "./start-application.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "./timeslots/before-application-is-loading-injection-token"; +import * as timeSlots from "./time-slots"; import asyncFn, { AsyncFnMock } from "@async-fn/jest"; -import { onLoadOfApplicationInjectionToken } from "./timeslots/on-load-of-application-injection-token"; -import { afterApplicationIsLoadedInjectionToken } from "./timeslots/after-application-is-loaded-injection-token"; describe("starting-of-application", () => { let di: DiContainer; @@ -30,19 +28,19 @@ describe("starting-of-application", () => { const beforeApplicationIsLoadingInjectable = getInjectable({ id: "before-application-is-loading", instantiate: () => ({ run: beforeApplicationIsLoadingMock }), - injectionToken: beforeApplicationIsLoadingInjectionToken, + injectionToken: timeSlots.beforeApplicationIsLoadingInjectionToken, }); const onLoadOfApplicationInjectable = getInjectable({ id: "on-load-of-application", instantiate: () => ({ run: onLoadOfApplicationMock }), - injectionToken: onLoadOfApplicationInjectionToken, + injectionToken: timeSlots.onLoadOfApplicationInjectionToken, }); const afterApplicationIsLoadedInjectable = getInjectable({ id: "after-application-is-loaded", instantiate: () => ({ run: afterApplicationIsLoadedMock }), - injectionToken: afterApplicationIsLoadedInjectionToken, + injectionToken: timeSlots.afterApplicationIsLoadedInjectionToken, }); di.register( diff --git a/packages/technical-features/application/agnostic/src/start-application/time-slots.ts b/packages/technical-features/application/agnostic/src/start-application/time-slots.ts new file mode 100644 index 0000000000..8a8aae65a0 --- /dev/null +++ b/packages/technical-features/application/agnostic/src/start-application/time-slots.ts @@ -0,0 +1,14 @@ +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { Runnable } from "@k8slens/run-many"; + +export const beforeApplicationIsLoadingInjectionToken = getInjectionToken({ + id: "before-application-is-loading-injection-token", +}); + +export const onLoadOfApplicationInjectionToken = getInjectionToken({ + id: "on-load-of-application", +}); + +export const afterApplicationIsLoadedInjectionToken = getInjectionToken({ + id: "after-application-is-loaded-injection-token", +}); diff --git a/packages/technical-features/application/agnostic/src/start-application/timeslots/after-application-is-loaded-injection-token.ts b/packages/technical-features/application/agnostic/src/start-application/timeslots/after-application-is-loaded-injection-token.ts deleted file mode 100644 index 6e04840f6e..0000000000 --- a/packages/technical-features/application/agnostic/src/start-application/timeslots/after-application-is-loaded-injection-token.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "@ogre-tools/injectable-utils"; - -export const afterApplicationIsLoadedInjectionToken = - getInjectionToken({ - id: "after-application-is-loaded-injection-token", - }); diff --git a/packages/technical-features/application/agnostic/src/start-application/timeslots/before-application-is-loading-injection-token.ts b/packages/technical-features/application/agnostic/src/start-application/timeslots/before-application-is-loading-injection-token.ts deleted file mode 100644 index 54bff82be5..0000000000 --- a/packages/technical-features/application/agnostic/src/start-application/timeslots/before-application-is-loading-injection-token.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "@ogre-tools/injectable-utils"; - -export const beforeApplicationIsLoadingInjectionToken = - getInjectionToken({ - id: "before-application-is-loading-injection-token", - }); diff --git a/packages/technical-features/application/agnostic/src/start-application/timeslots/on-load-of-application-injection-token.ts b/packages/technical-features/application/agnostic/src/start-application/timeslots/on-load-of-application-injection-token.ts deleted file mode 100644 index c732329e29..0000000000 --- a/packages/technical-features/application/agnostic/src/start-application/timeslots/on-load-of-application-injection-token.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "@ogre-tools/injectable-utils"; - -export const onLoadOfApplicationInjectionToken = getInjectionToken({ - id: "on-load-of-application", -}); diff --git a/packages/technical-features/application/electron-main/index.ts b/packages/technical-features/application/electron-main/index.ts index d3d92e0aa3..8d853ee1e3 100644 --- a/packages/technical-features/application/electron-main/index.ts +++ b/packages/technical-features/application/electron-main/index.ts @@ -1,7 +1,6 @@ import { overrideSideEffectsWithFakes } from "./src/override-side-effects-with-fakes"; -export { beforeElectronIsReadyInjectionToken } from "./src/start-application/timeslots/before-electron-is-ready-injection-token"; -export { beforeAnythingInjectionToken } from "./src/start-application/timeslots/before-anything-injection-token"; +export * from "./src/start-application/time-slots"; export { applicationFeatureForElectronMain } from "./src/feature"; diff --git a/packages/technical-features/application/electron-main/package.json b/packages/technical-features/application/electron-main/package.json index eb1b42c2c8..f68cc3edd8 100644 --- a/packages/technical-features/application/electron-main/package.json +++ b/packages/technical-features/application/electron-main/package.json @@ -33,7 +33,6 @@ "@k8slens/application": "^6.5.0-alpha.0", "@ogre-tools/injectable": "^15.1.2", "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", - "@ogre-tools/injectable-utils": "^15.1.2", "electron": "^19.1.9" }, diff --git a/packages/technical-features/application/electron-main/src/start-application/start-electron-application.injectable.ts b/packages/technical-features/application/electron-main/src/start-application/start-electron-application.injectable.ts index 5d5944fbaf..f107ada913 100644 --- a/packages/technical-features/application/electron-main/src/start-application/start-electron-application.injectable.ts +++ b/packages/technical-features/application/electron-main/src/start-application/start-electron-application.injectable.ts @@ -6,32 +6,22 @@ import { } from "@ogre-tools/injectable"; import { startApplicationInjectionToken } from "@k8slens/application"; import whenAppIsReadyInjectable from "./when-app-is-ready.injectable"; -import { beforeAnythingInjectionToken } from "./timeslots/before-anything-injection-token"; -import { beforeElectronIsReadyInjectionToken } from "./timeslots/before-electron-is-ready-injection-token"; -import { runManySyncFor } from "@ogre-tools/injectable-utils"; +import { beforeAnythingInjectionToken, beforeElectronIsReadyInjectionToken } from "./time-slots"; +import { runManySyncFor } from "@k8slens/run-many"; + +type ToBeDecorated = (di: DiContainer, ...args: unknown[]) => (...args: unknown[]) => unknown; const startElectronApplicationInjectable = getInjectable({ id: "start-electron-application", instantiate: () => ({ - decorate: - (toBeDecorated: unknown) => + decorate: (toBeDecorated: unknown) => ( (di: DiContainer, ...args: unknown[]) => { const whenAppIsReady = di.inject(whenAppIsReadyInjectable); const runManySync = runManySyncFor(di); const beforeAnything = runManySync(beforeAnythingInjectionToken); - const beforeElectronIsReady = runManySync( - beforeElectronIsReadyInjectionToken - ); - - const typedToBeDecorated = toBeDecorated as ( - di: DiContainer, - ...args: unknown[] - ) => unknown; - - const startApplication = typedToBeDecorated(di, ...args) as ( - ...args: unknown[] - ) => unknown; + const beforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken); + const startApplication = (toBeDecorated as ToBeDecorated)(di, ...args); return (...startApplicationArgs: unknown[]) => { beforeAnything(); @@ -43,8 +33,8 @@ const startElectronApplicationInjectable = getInjectable({ return startApplication(...startApplicationArgs); })() }; - }, - + } + ), target: startApplicationInjectionToken, }), diff --git a/packages/technical-features/application/electron-main/src/start-application/time-slots.ts b/packages/technical-features/application/electron-main/src/start-application/time-slots.ts new file mode 100644 index 0000000000..58673517ae --- /dev/null +++ b/packages/technical-features/application/electron-main/src/start-application/time-slots.ts @@ -0,0 +1,10 @@ +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { RunnableSync } from "@k8slens/run-many"; + +export const beforeAnythingInjectionToken = getInjectionToken({ + id: "before-anything", +}); + +export const beforeElectronIsReadyInjectionToken = getInjectionToken({ + id: "before-electron-is-ready-injection-token", +}); diff --git a/packages/technical-features/application/electron-main/src/start-application/timeslots/before-anything-injection-token.ts b/packages/technical-features/application/electron-main/src/start-application/timeslots/before-anything-injection-token.ts deleted file mode 100644 index f8d2ef9203..0000000000 --- a/packages/technical-features/application/electron-main/src/start-application/timeslots/before-anything-injection-token.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "@ogre-tools/injectable-utils"; - -export const beforeAnythingInjectionToken = getInjectionToken({ - id: "before-anything", -}); diff --git a/packages/technical-features/application/electron-main/src/start-application/timeslots/before-electron-is-ready-injection-token.ts b/packages/technical-features/application/electron-main/src/start-application/timeslots/before-electron-is-ready-injection-token.ts deleted file mode 100644 index c8c88bddae..0000000000 --- a/packages/technical-features/application/electron-main/src/start-application/timeslots/before-electron-is-ready-injection-token.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "@ogre-tools/injectable-utils"; - -export const beforeElectronIsReadyInjectionToken = getInjectionToken({ - id: "before-electron-is-ready-injection-token", -}); diff --git a/packages/technical-features/application/electron-main/src/start-application/when-app-is-ready/when-app-is-ready.test.ts b/packages/technical-features/application/electron-main/src/start-application/when-app-is-ready.test.ts similarity index 85% rename from packages/technical-features/application/electron-main/src/start-application/when-app-is-ready/when-app-is-ready.test.ts rename to packages/technical-features/application/electron-main/src/start-application/when-app-is-ready.test.ts index 3e3fe40a52..f0dc073c59 100644 --- a/packages/technical-features/application/electron-main/src/start-application/when-app-is-ready/when-app-is-ready.test.ts +++ b/packages/technical-features/application/electron-main/src/start-application/when-app-is-ready.test.ts @@ -1,9 +1,9 @@ import { createContainer, DiContainer } from "@ogre-tools/injectable"; -import { applicationFeatureForElectronMain } from "../../feature"; +import { applicationFeatureForElectronMain } from "../feature"; import { registerFeature } from "@k8slens/feature-core"; -import whenAppIsReadyInjectable from "../when-app-is-ready.injectable"; +import whenAppIsReadyInjectable from "./when-app-is-ready.injectable"; import { getPromiseStatus } from "@ogre-tools/test-utils"; -import electronAppInjectable from "../../electron/electron-app.injectable"; +import electronAppInjectable from "../electron/electron-app.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; diff --git a/packages/technical-features/application/electron-main/src/starting-of-electron-main-application.test.ts b/packages/technical-features/application/electron-main/src/starting-of-electron-main-application.test.ts index fb344a193b..f5e067f9ae 100644 --- a/packages/technical-features/application/electron-main/src/starting-of-electron-main-application.test.ts +++ b/packages/technical-features/application/electron-main/src/starting-of-electron-main-application.test.ts @@ -11,8 +11,7 @@ import { } from "@k8slens/application"; import asyncFn, { AsyncFnMock } from "@async-fn/jest"; import whenAppIsReadyInjectable from "./start-application/when-app-is-ready.injectable"; -import { beforeAnythingInjectionToken } from "./start-application/timeslots/before-anything-injection-token"; -import { beforeElectronIsReadyInjectionToken } from "./start-application/timeslots/before-electron-is-ready-injection-token"; +import { beforeAnythingInjectionToken, beforeElectronIsReadyInjectionToken } from "./start-application/time-slots"; describe("starting-of-electron-main-application", () => { let di: DiContainer; diff --git a/packages/utility-features/run-many/README.md b/packages/utility-features/run-many/README.md new file mode 100644 index 0000000000..b24cf0fccd --- /dev/null +++ b/packages/utility-features/run-many/README.md @@ -0,0 +1,3 @@ +# @k8slens/run-many + +This package contains the functions `runMany` and `runManySync` diff --git a/packages/utility-features/run-many/index.ts b/packages/utility-features/run-many/index.ts new file mode 100644 index 0000000000..30f67f43d9 --- /dev/null +++ b/packages/utility-features/run-many/index.ts @@ -0,0 +1,4 @@ +export * from "./src/run-many-for"; +export * from "./src/run-many-sync-for"; + +export type { Runnable, RunnableSync, Run, RunSync } from "./src/types"; diff --git a/packages/utility-features/run-many/jest.config.js b/packages/utility-features/run-many/jest.config.js new file mode 100644 index 0000000000..23be80353b --- /dev/null +++ b/packages/utility-features/run-many/jest.config.js @@ -0,0 +1,2 @@ +module.exports = + require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/utility-features/run-many/package.json b/packages/utility-features/run-many/package.json new file mode 100644 index 0000000000..e469c50730 --- /dev/null +++ b/packages/utility-features/run-many/package.json @@ -0,0 +1,33 @@ +{ + "name": "@k8slens/run-many", + "version": "1.0.0", + "type": "commonjs", + "description": "A package containing runMany and runManySync", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "private": false, + "files": [ + "dist" + ], + "main": "dist/index.js", + "types": "dist/index.d.ts", + "author": { + "name": "OpenLens Authors", + "email": "info@k8slens.dev" + }, + "license": "MIT", + "homepage": "https://github.com/lensapp/lens", + "scripts": { + "build": "webpack", + "dev": "webpack --mode=development --watch", + "test": "jest --coverage --runInBand" + }, + "peerDependencies": { + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1" + } +} diff --git a/packages/utility-features/run-many/src/helpers.ts b/packages/utility-features/run-many/src/helpers.ts new file mode 100644 index 0000000000..adb0126cbf --- /dev/null +++ b/packages/utility-features/run-many/src/helpers.ts @@ -0,0 +1,94 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { DiContainerForInjection, InjectionInstanceWithMeta } from "@ogre-tools/injectable"; +import { getOrInsertSetFor, isDefined } from "@k8slens/utilities"; +import * as uuid from "uuid"; +import assert from "assert"; +import type { Runnable, RunnableSync, RunnableSyncWithId, RunnableWithId } from "./types"; + +const computedNextEdge = (traversed: string[], graph: Map>, currentId: string, seenIds: Set) => { + seenIds.add(currentId); + const currentNode = graph.get(currentId); + + assert(currentNode, `Runnable graph does not contain node with id="${currentId}"`); + + for (const nextId of currentNode.values()) { + if (traversed.includes(nextId)) { + throw new Error(`Cycle in runnable graph: "${traversed.join(`" -> "`)}" -> "${nextId}"`); + } + + computedNextEdge([...traversed, nextId], graph, nextId, seenIds); + } +}; + +/** + * Verifies that the graph produces by `runnables`'s `runAfter`'s is acyclic. Namely that it + * produces a Directed Acyclic Graph. + * @param tokenId The ID of the injectionToken that was `injectManyWithMeta()`-ed. Used for error messages + * @param runnables The list of runnables to check. + */ +export function verifyRunnablesAreDAG(tokenId: string, runnables: RunnableWithId[]): void; +export function verifyRunnablesAreDAG(tokenId: string, runnables: RunnableSyncWithId[]): void; + +export function verifyRunnablesAreDAG(tokenId: string, runnables: (RunnableWithId[]) | (RunnableSyncWithId[])): void { + const rootId = uuid.v4(); + const runnableGraph = new Map>(); + const seenIds = new Set(); + const addRunnableId = getOrInsertSetFor(runnableGraph); + + // Build the Directed graph + for (const runnable of runnables) { + addRunnableId(runnable.id); + + if (runnable.runAfter.length === 0) { + addRunnableId(rootId).add(runnable.id); + } else { + for (const parentRunnable of runnable.runAfter) { + addRunnableId(parentRunnable.id).add(runnable.id); + } + } + } + + addRunnableId(rootId); + + // Do a DFS to find any cycles + computedNextEdge([], runnableGraph, rootId, seenIds); + + for (const id of runnableGraph.keys()) { + if (!seenIds.has(id)) { + const runnable = runnables.find(runnable => runnable.id === id); + + if (!runnable) { + throw new Error(`Runnable "${id}" is not part of the injection token "${tokenId}"`); + } + + const runAfters = [runnable.runAfter] + .flat() + .filter(isDefined) + .map(runnable => runnable.id) + .join('", "'); + + throw new Error(`Runnable "${id}" is unreachable for injection token "${tokenId}": run afters "${runAfters}" are a part of different injection tokens.`); + } + } +} + +export interface ConvertToWithId { + (src: InjectionInstanceWithMeta>): RunnableWithId; + (src: InjectionInstanceWithMeta>): RunnableSyncWithId; +} + +export const convertToWithIdWith = (di: DiContainerForInjection) => { + const convert = (meta: { id: string }, instance: Runnable): RunnableWithId => ({ + id: meta.id, + run: instance.run, + runAfter: [instance.runAfter] + .flat() + .filter(isDefined) + .map((injectable) => convert(injectable, di.inject(injectable))), + }); + + return ((src) => convert(src.meta, src.instance)) as ConvertToWithId; +}; diff --git a/packages/core/src/common/runnable/run-many-for.test.ts b/packages/utility-features/run-many/src/run-many-for.test.ts similarity index 91% rename from packages/core/src/common/runnable/run-many-for.test.ts rename to packages/utility-features/run-many/src/run-many-for.test.ts index 6002a149db..8fe753378c 100644 --- a/packages/core/src/common/runnable/run-many-for.test.ts +++ b/packages/utility-features/run-many/src/run-many-for.test.ts @@ -5,11 +5,10 @@ import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import { createContainer, getInjectable, getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "./run-many-for"; +import type { Runnable } from "./types"; import { runManyFor } from "./run-many-for"; -import { getPromiseStatus } from "../test-utils/get-promise-status"; +import { getPromiseStatus, flushPromises } from "@k8slens/test-utils"; import { runInAction } from "mobx"; -import { flushPromises } from "../test-utils/flush-promises"; describe("runManyFor", () => { describe("given no hierarchy, when running many", () => { @@ -28,7 +27,6 @@ describe("runManyFor", () => { const someInjectable = getInjectable({ id: "some-injectable", instantiate: () => ({ - id: "some-injectable", run: () => runMock("some-call"), }), injectionToken: someInjectionTokenForRunnables, @@ -37,7 +35,6 @@ describe("runManyFor", () => { const someOtherInjectable = getInjectable({ id: "some-other-injectable", instantiate: () => ({ - id: "some-other-injectable", run: () => runMock("some-other-call"), }), injectionToken: someInjectionTokenForRunnables, @@ -85,32 +82,25 @@ describe("runManyFor", () => { const someInjectable1 = getInjectable({ id: "some-injectable-1", - - instantiate: (di) => ({ - id: "some-injectable-1", + instantiate: () => ({ run: () => runMock("third-level-run"), - runAfter: di.inject(someInjectable2), + runAfter: someInjectable2, }), - injectionToken: someInjectionTokenForRunnables, }); const someInjectable2 = getInjectable({ id: "some-injectable-2", - - instantiate: (di) => ({ - id: "some-injectable-2", + instantiate: () => ({ run: () => runMock("second-level-run"), - runAfter: di.inject(someInjectable3), + runAfter: someInjectable3, }), - injectionToken: someInjectionTokenForRunnables, }); const someInjectable3 = getInjectable({ id: "some-injectable-3", instantiate: () => ({ - id: "some-injectable-3", run: () => runMock("first-level-run"), }), injectionToken: someInjectionTokenForRunnables, @@ -197,24 +187,18 @@ describe("runManyFor", () => { const someInjectable = getInjectable({ id: "some-runnable-1", - - instantiate: (di) => ({ - id: "some-runnable-1", + instantiate: () => ({ run: () => runMock("some-runnable-1"), - runAfter: di.inject(someOtherInjectable), + runAfter: someOtherInjectable, }), - injectionToken: someInjectionToken, }); const someOtherInjectable = getInjectable({ id: "some-runnable-2", - instantiate: () => ({ - id: "some-runnable-2", run: () => runMock("some-runnable-2"), }), - injectionToken: someOtherInjectionToken, }); @@ -244,38 +228,29 @@ describe("runManyFor", () => { const someInjectable = getInjectable({ id: "some-runnable-1", - - instantiate: (di) => ({ - id: "some-runnable-1", + instantiate: () => ({ run: () => runMock("some-runnable-1"), runAfter: [ - di.inject(someOtherInjectable), - di.inject(someSecondInjectable), + someOtherInjectable, + someSecondInjectable, ], }), - injectionToken: someInjectionToken, }); const someSecondInjectable = getInjectable({ id: "some-runnable-2", - instantiate: () => ({ - id: "some-runnable-2", run: () => runMock("some-runnable-2"), }), - injectionToken: someInjectionToken, }); const someOtherInjectable = getInjectable({ id: "some-runnable-3", - instantiate: () => ({ - id: "some-runnable-3", run: () => runMock("some-runnable-3"), }), - injectionToken: someOtherInjectionToken, }); @@ -306,23 +281,17 @@ describe("runManyFor", () => { const someInjectable = getInjectable({ id: "some-runnable-1", - instantiate: () => ({ - id: "some-runnable-1", run: (parameter) => runMock("run-of-some-runnable-1", parameter), }), - injectionToken: someInjectionTokenForRunnablesWithParameter, }); const someOtherInjectable = getInjectable({ id: "some-runnable-2", - instantiate: () => ({ - id: "some-runnable-2", run: (parameter) => runMock("run-of-some-runnable-2", parameter), }), - injectionToken: someInjectionTokenForRunnablesWithParameter, }); @@ -359,7 +328,6 @@ describe("runManyFor", () => { const runnableOneInjectable = getInjectable({ id: "runnable-1", instantiate: () => ({ - id: "runnable-1", run: () => runMock("runnable-1"), }), injectionToken: someInjectionToken, @@ -368,7 +336,6 @@ describe("runManyFor", () => { const runnableTwoInjectable = getInjectable({ id: "runnable-2", instantiate: () => ({ - id: "runnable-2", run: () => runMock("runnable-2"), runAfter: [], // shouldn't block being called }), @@ -377,42 +344,38 @@ describe("runManyFor", () => { const runnableThreeInjectable = getInjectable({ id: "runnable-3", - instantiate: (di) => ({ - id: "runnable-3", + instantiate: () => ({ run: () => runMock("runnable-3"), - runAfter: di.inject(runnableOneInjectable), + runAfter: runnableOneInjectable, }), injectionToken: someInjectionToken, }); const runnableFourInjectable = getInjectable({ id: "runnable-4", - instantiate: (di) => ({ - id: "runnable-4", + instantiate: () => ({ run: () => runMock("runnable-4"), - runAfter: [di.inject(runnableThreeInjectable)], // should be the same as an single item + runAfter: [runnableThreeInjectable], // should be the same as an single item }), injectionToken: someInjectionToken, }); const runnableFiveInjectable = getInjectable({ id: "runnable-5", - instantiate: (di) => ({ - id: "runnable-5", + instantiate: () => ({ run: () => runMock("runnable-5"), - runAfter: di.inject(runnableThreeInjectable), + runAfter: runnableThreeInjectable, }), injectionToken: someInjectionToken, }); const runnableSixInjectable = getInjectable({ id: "runnable-6", - instantiate: (di) => ({ - id: "runnable-6", + instantiate: () => ({ run: () => runMock("runnable-6"), runAfter: [ - di.inject(runnableFourInjectable), - di.inject(runnableFiveInjectable), + runnableFourInjectable, + runnableFiveInjectable, ], }), injectionToken: someInjectionToken, @@ -420,12 +383,11 @@ describe("runManyFor", () => { const runnableSevenInjectable = getInjectable({ id: "runnable-7", - instantiate: (di) => ({ - id: "runnable-7", + instantiate: () => ({ run: () => runMock("runnable-7"), runAfter: [ - di.inject(runnableFiveInjectable), - di.inject(runnableSixInjectable), + runnableFiveInjectable, + runnableSixInjectable, ], }), injectionToken: someInjectionToken, diff --git a/packages/utility-features/run-many/src/run-many-for.ts b/packages/utility-features/run-many/src/run-many-for.ts new file mode 100644 index 0000000000..4d33c009e2 --- /dev/null +++ b/packages/utility-features/run-many/src/run-many-for.ts @@ -0,0 +1,71 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable"; +import { getOrInsert } from "@k8slens/utilities"; +import type TypedEventEmitter from "typed-emitter"; +import EventEmitter from "events"; +import { convertToWithIdWith, verifyRunnablesAreDAG } from "./helpers"; +import type { RunnableWithId, Runnable, Run } from "./types"; +import type { Asyncify } from "type-fest"; + +export type RunMany = (injectionToken: InjectionToken, void>) => Asyncify>; + +interface BarrierEvent { + finish: (id: string) => void; +} + +class DynamicBarrier { + private readonly finishedIds = new Map>(); + private readonly events: TypedEventEmitter = new EventEmitter(); + + private initFinishingPromise(id: string): Promise { + return getOrInsert(this.finishedIds, id, new Promise(resolve => { + const handler = (finishedId: string) => { + if (finishedId === id) { + resolve(); + this.events.removeListener("finish", handler); + } + }; + + this.events.addListener("finish", handler); + })); + } + + setFinished(id: string): void { + void this.initFinishingPromise(id); + + this.events.emit("finish", id); + } + + async blockOn(id: string): Promise { + await this.initFinishingPromise(id); + } +} + +const executeRunnableWith = (param: Param) => { + const barrier = new DynamicBarrier(); + + return async (runnable: RunnableWithId): Promise => { + for (const parentRunnable of runnable.runAfter) { + await barrier.blockOn(parentRunnable.id); + } + + await runnable.run(param); + barrier.setFinished(runnable.id); + }; +}; + +export function runManyFor(di: DiContainerForInjection): RunMany { + const convertToWithId = convertToWithIdWith(di); + + return (injectionToken: InjectionToken, void>) => async (param: Param) => { + const executeRunnable = executeRunnableWith(param); + const allRunnables = di.injectManyWithMeta(injectionToken).map(x => convertToWithId(x)); + + verifyRunnablesAreDAG(injectionToken.id, allRunnables); + + await Promise.all(allRunnables.map(executeRunnable)); + }; +} diff --git a/packages/core/src/common/runnable/run-many-sync-for.test.ts b/packages/utility-features/run-many/src/run-many-sync-for.test.ts similarity index 87% rename from packages/core/src/common/runnable/run-many-sync-for.test.ts rename to packages/utility-features/run-many/src/run-many-sync-for.test.ts index 3aadcad0bf..e66c51d0b1 100644 --- a/packages/core/src/common/runnable/run-many-sync-for.test.ts +++ b/packages/utility-features/run-many/src/run-many-sync-for.test.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { createContainer, getInjectable, getInjectionToken } from "@ogre-tools/injectable"; -import type { RunnableSync } from "./run-many-sync-for"; import { runManySyncFor } from "./run-many-sync-for"; +import type { RunnableSync } from "./types"; describe("runManySyncFor", () => { describe("given hierarchy, when running many", () => { @@ -22,7 +22,6 @@ describe("runManySyncFor", () => { const someInjectable = getInjectable({ id: "some-injectable", instantiate: () => ({ - id: "some-injectable", run: () => runMock("some-call"), }), injectionToken: someInjectionTokenForRunnables, @@ -31,7 +30,6 @@ describe("runManySyncFor", () => { const someOtherInjectable = getInjectable({ id: "some-other-injectable", instantiate: () => ({ - id: "some-other-injectable", run: () => runMock("some-other-call"), }), injectionToken: someInjectionTokenForRunnables, @@ -66,32 +64,25 @@ describe("runManySyncFor", () => { const someInjectable1 = getInjectable({ id: "some-injectable-1", - - instantiate: (di) => ({ - id: "some-injectable-1", + instantiate: () => ({ run: () => void runMock("third-level-run"), - runAfter: di.inject(someInjectable2), + runAfter: someInjectable2, }), - injectionToken: someInjectionTokenForRunnables, }); const someInjectable2 = getInjectable({ id: "some-injectable-2", - - instantiate: (di) => ({ - id: "some-injectable-2", + instantiate: () => ({ run: () => void runMock("second-level-run"), - runAfter: di.inject(someInjectable3), + runAfter: someInjectable3, }), - injectionToken: someInjectionTokenForRunnables, }); const someInjectable3 = getInjectable({ id: "some-injectable-3", instantiate: () => ({ - id: "some-injectable-3", run: () => void runMock("first-level-run"), }), injectionToken: someInjectionTokenForRunnables, @@ -124,24 +115,18 @@ describe("runManySyncFor", () => { const someInjectable = getInjectable({ id: "some-runnable-1", - - instantiate: (di) => ({ - id: "some-runnable-1", + instantiate: () => ({ run: () => runMock("some-runnable-1"), - runAfter: di.inject(someOtherInjectable), + runAfter: someOtherInjectable, }), - injectionToken: someInjectionToken, }); const someOtherInjectable = getInjectable({ id: "some-runnable-2", - instantiate: () => ({ - id: "some-runnable-2", run: () => runMock("some-runnable-2"), }), - injectionToken: someOtherInjectionToken, }); @@ -152,7 +137,7 @@ describe("runManySyncFor", () => { ); return expect(() => runMany()).toThrow( - /Tried to get a composite but encountered missing parent ids: "some-runnable-2".\n\nAvailable parent ids are:\n"[0-9a-z-]+",\n"some-runnable-1"/, + /Runnable "some-runnable-1" is unreachable for injection token "some-injection-token": run afters "some-runnable-2" are a part of different injection tokens./, ); }); @@ -172,23 +157,17 @@ describe("runManySyncFor", () => { const someInjectable = getInjectable({ id: "some-runnable-1", - instantiate: () => ({ - id: "some-runnable-1", run: (parameter) => void runMock("run-of-some-runnable-1", parameter), }), - injectionToken: someInjectionTokenForRunnablesWithParameter, }); const someOtherInjectable = getInjectable({ id: "some-runnable-2", - instantiate: () => ({ - id: "some-runnable-2", run: (parameter) => void runMock("run-of-some-runnable-2", parameter), }), - injectionToken: someInjectionTokenForRunnablesWithParameter, }); diff --git a/packages/utility-features/run-many/src/run-many-sync-for.ts b/packages/utility-features/run-many/src/run-many-sync-for.ts new file mode 100644 index 0000000000..f93b41470e --- /dev/null +++ b/packages/utility-features/run-many/src/run-many-sync-for.ts @@ -0,0 +1,77 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable"; +import type { Disposer } from "@k8slens/utilities"; +import type { RunnableSync, RunSync, RunnableSyncWithId } from "./types"; +import { convertToWithIdWith, verifyRunnablesAreDAG } from "./helpers"; +import type TypedEventEmitter from "typed-emitter"; +import EventEmitter from "events"; + +export type RunManySync = (injectionToken: InjectionToken, void>) => RunSync; + +class SyncBarrier { + private readonly finishedIds = new Set(); + private readonly events: TypedEventEmitter void>> = new EventEmitter(); + + setFinished(id: string): void { + this.finishedIds.add(id); + this.events.emit(id); + } + + onceParentsAreFinished(id: string, parentIds: string[], action: () => void) { + const finishers = new Map(); + + const checkAndRun = () => { + if (finishers.size === 0) { + action(); + this.setFinished(id); + } + }; + + for (const parentId of parentIds) { + if (this.finishedIds.has(parentId)) { + continue; + } + + const onParentFinished = () => { + this.events.removeListener(parentId, onParentFinished); + finishers.delete(parentId); + checkAndRun(); + }; + + finishers.set(parentId, onParentFinished); + this.events.once(parentId, onParentFinished); + } + + checkAndRun(); + } +} + +const executeRunnableWith = (param: Param) => { + const barrier = new SyncBarrier(); + + return (runnable: RunnableSyncWithId) => { + barrier.onceParentsAreFinished( + runnable.id, + runnable.runAfter.map(r => r.id), + () => runnable.run(param), + ); + }; +}; + +export function runManySyncFor(di: DiContainerForInjection): RunManySync { + const convertToWithId = convertToWithIdWith(di); + + return (injectionToken: InjectionToken, void>) => (param: Param): undefined => { + const executeRunnable = executeRunnableWith(param); + const allRunnables = di.injectManyWithMeta(injectionToken).map(convertToWithId); + + verifyRunnablesAreDAG(injectionToken.id, allRunnables); + + allRunnables.forEach(executeRunnable); + + return undefined; + }; +} diff --git a/packages/utility-features/run-many/src/types.ts b/packages/utility-features/run-many/src/types.ts new file mode 100644 index 0000000000..007d9bcef1 --- /dev/null +++ b/packages/utility-features/run-many/src/types.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { Injectable } from "@ogre-tools/injectable"; +import type { SingleOrMany } from "@k8slens/utilities"; + +export type Run = (parameter: Param) => Promise | void; + +export interface Runnable { + id?: never; + run: Run; + readonly runAfter?: SingleOrMany, Runnable, void>>; +} + +export interface RunnableWithId { + run: Run; + readonly id: string; + readonly runAfter: RunnableWithId[]; +} + +export interface RunnableSync { + id?: never; + run: RunSync; + runAfter?: SingleOrMany, RunnableSync, void>>; +} + +export interface RunnableSyncWithId { + run: RunSync; + readonly id: string; + readonly runAfter: RunnableSyncWithId[]; +} + +/** + * NOTE: this is the worse of two evils. This makes sure that `RunnableSync` always is sync. + * If the return type is `void` instead then async functions (those return `Promise`) can + * coerce to it. + */ +export type RunSync = (parameter: Param) => undefined; diff --git a/packages/utility-features/run-many/tsconfig.json b/packages/utility-features/run-many/tsconfig.json new file mode 100644 index 0000000000..a4f6fa613e --- /dev/null +++ b/packages/utility-features/run-many/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@k8slens/typescript/config/base.json" +} diff --git a/packages/utility-features/run-many/webpack.config.js b/packages/utility-features/run-many/webpack.config.js new file mode 100644 index 0000000000..3183f30179 --- /dev/null +++ b/packages/utility-features/run-many/webpack.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/webpack").configForNode; diff --git a/packages/utility-features/test-utils/README.md b/packages/utility-features/test-utils/README.md new file mode 100644 index 0000000000..657bc43995 --- /dev/null +++ b/packages/utility-features/test-utils/README.md @@ -0,0 +1,3 @@ +# @k8slens/test-utils + +This package contains many useful utilities for testing. diff --git a/packages/utility-features/test-utils/index.ts b/packages/utility-features/test-utils/index.ts new file mode 100644 index 0000000000..ed5afc6535 --- /dev/null +++ b/packages/utility-features/test-utils/index.ts @@ -0,0 +1,4 @@ +export * from "./src/flush-promises"; +export * from "./src/get-global-override-for-function"; +export * from "./src/get-global-override"; +export * from "./src/get-promise-status"; diff --git a/packages/utility-features/test-utils/jest.config.js b/packages/utility-features/test-utils/jest.config.js new file mode 100644 index 0000000000..23be80353b --- /dev/null +++ b/packages/utility-features/test-utils/jest.config.js @@ -0,0 +1,2 @@ +module.exports = + require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/utility-features/test-utils/package.json b/packages/utility-features/test-utils/package.json new file mode 100644 index 0000000000..9074957a69 --- /dev/null +++ b/packages/utility-features/test-utils/package.json @@ -0,0 +1,27 @@ +{ + "name": "@k8slens/test-utils", + "version": "1.0.0", + "description": "A collection of utilities for testing", + "type": "commonjs", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "private": false, + "files": [ + "dist" + ], + "author": { + "name": "OpenLens Authors", + "email": "info@k8slens.dev" + }, + "license": "MIT", + "homepage": "https://github.com/lensapp/lens", + "scripts": { + "build": "webpack", + "dev": "webpack --mode=development --watch", + "test": "jest --coverage --runInBand" + } +} diff --git a/packages/core/src/common/test-utils/flush-promises.ts b/packages/utility-features/test-utils/src/flush-promises.ts similarity index 100% rename from packages/core/src/common/test-utils/flush-promises.ts rename to packages/utility-features/test-utils/src/flush-promises.ts diff --git a/packages/core/src/common/test-utils/get-global-override-for-function.ts b/packages/utility-features/test-utils/src/get-global-override-for-function.ts similarity index 63% rename from packages/core/src/common/test-utils/get-global-override-for-function.ts rename to packages/utility-features/test-utils/src/get-global-override-for-function.ts index 238ee5621a..1b718c7554 100644 --- a/packages/core/src/common/test-utils/get-global-override-for-function.ts +++ b/packages/utility-features/test-utils/src/get-global-override-for-function.ts @@ -6,9 +6,7 @@ import type { Injectable } from "@ogre-tools/injectable"; import { getGlobalOverride } from "./get-global-override"; import { camelCase } from "lodash/fp"; -export const getGlobalOverrideForFunction = ( - injectable: Injectable, -) => +export const getGlobalOverrideForFunction = (injectable: Injectable) => ( getGlobalOverride(injectable, () => (...args: any[]) => { console.warn( `Tried to invoke a function "${injectable.id}" without override. The args were:`, @@ -16,10 +14,7 @@ export const getGlobalOverrideForFunction = ( ); throw new Error( - `Tried to invoke a function "${ - injectable.id - }" without override. Add eg. "di.override(${camelCase( - injectable.id, - )}Mock)" to the unit test interested in this.`, + `Tried to invoke a function "${injectable.id}" without override. Add eg. "di.override(${camelCase(injectable.id)}Mock)" to the unit test interested in this.`, ); - }); + }) +); diff --git a/packages/utility-features/test-utils/src/get-global-override.ts b/packages/utility-features/test-utils/src/get-global-override.ts new file mode 100644 index 0000000000..c1902d60d7 --- /dev/null +++ b/packages/utility-features/test-utils/src/get-global-override.ts @@ -0,0 +1,18 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { Injectable, Instantiate } from "@ogre-tools/injectable"; + +export interface GlobalOverride { + injectable: Injectable; + overridingInstantiate: Instantiate; +} + +export const getGlobalOverride = ( + injectable: Injectable, + overridingInstantiate: (typeof injectable)["instantiate"], +) => ({ + injectable, + overridingInstantiate, +}); diff --git a/packages/core/src/common/test-utils/get-promise-status.ts b/packages/utility-features/test-utils/src/get-promise-status.ts similarity index 100% rename from packages/core/src/common/test-utils/get-promise-status.ts rename to packages/utility-features/test-utils/src/get-promise-status.ts diff --git a/packages/utility-features/test-utils/tsconfig.json b/packages/utility-features/test-utils/tsconfig.json new file mode 100644 index 0000000000..a4f6fa613e --- /dev/null +++ b/packages/utility-features/test-utils/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@k8slens/typescript/config/base.json" +} diff --git a/packages/utility-features/test-utils/webpack.config.js b/packages/utility-features/test-utils/webpack.config.js new file mode 100644 index 0000000000..3183f30179 --- /dev/null +++ b/packages/utility-features/test-utils/webpack.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/webpack").configForNode; diff --git a/packages/utility-features/utilities/README.md b/packages/utility-features/utilities/README.md new file mode 100644 index 0000000000..336b802f84 --- /dev/null +++ b/packages/utility-features/utilities/README.md @@ -0,0 +1,3 @@ +# @k8slens/utilities + +This package contains many useful types. diff --git a/packages/utility-features/utilities/index.ts b/packages/utility-features/utilities/index.ts new file mode 100644 index 0000000000..dc8eacdfdd --- /dev/null +++ b/packages/utility-features/utilities/index.ts @@ -0,0 +1,45 @@ +export * from "./src/abort-controller"; +export * from "./src/array"; +export * from "./src/backoff-caller"; +export * from "./src/base64"; +export * from "./src/buildUrl"; +export * from "./src/camelCase"; +export * from "./src/collection-functions"; +export * from "./src/computed-or"; +export * from "./src/convertCpu"; +export * from "./src/convertMemory"; +export * from "./src/cssNames"; +export * from "./src/cssVar"; +export * from "./src/debouncePromise"; +export * from "./src/delay"; +export * from "./src/display-mode"; +export * from "./src/disposer"; +export * from "./src/formatDuration"; +export * from "./src/hash-set"; +export * from "./src/interval"; +export * from "./src/is-node-falsy"; +export * from "./src/isMiddleClick"; +export * from "./src/isReactNode"; +export * from "./src/iter"; +export * from "./src/json"; +export * from "./src/jsonPath"; +export * from "./src/metricUnitsToNumber"; +export * from "./src/name-parts"; +export * from "./src/noop"; +export * from "./src/object"; +export * from "./src/observable-crate"; +export * from "./src/on-keyboard-shortcut"; +export * from "./src/prevDefault"; +export * from "./src/readableStream"; +export * from "./src/readonly"; +export * from "./src/reject-promise"; +export * from "./src/result"; +export * from "./src/sort-compare"; +export * from "./src/sort-function"; +export * from "./src/tar"; +export * from "./src/tuple"; +export * from "./src/type-narrowing"; +export * from "./src/types"; +export * from "./src/union-env-path"; +export * from "./src/wait"; +export * from "./src/with-concurrency-limit"; diff --git a/packages/utility-features/utilities/jest.config.js b/packages/utility-features/utilities/jest.config.js new file mode 100644 index 0000000000..23be80353b --- /dev/null +++ b/packages/utility-features/utilities/jest.config.js @@ -0,0 +1,2 @@ +module.exports = + require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/utility-features/utilities/package.json b/packages/utility-features/utilities/package.json new file mode 100644 index 0000000000..78ac7085e9 --- /dev/null +++ b/packages/utility-features/utilities/package.json @@ -0,0 +1,31 @@ +{ + "name": "@k8slens/utilities", + "description": "A collection of useful types", + "version": "1.0.0", + "type": "commonjs", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "private": false, + "files": [ + "dist" + ], + "author": { + "name": "OpenLens Authors", + "email": "info@k8slens.dev" + }, + "license": "MIT", + "homepage": "https://github.com/lensapp/lens", + "scripts": { + "build": "webpack", + "dev": "webpack --mode=development --watch", + "test": "jest --coverage --runInBand" + }, + "peerDependencies": { + "mobx": "^6.8.0", + "type-fest": "^2.19.0" + } +} diff --git a/packages/core/src/common/utils/abort-controller.ts b/packages/utility-features/utilities/src/abort-controller.ts similarity index 100% rename from packages/core/src/common/utils/abort-controller.ts rename to packages/utility-features/utilities/src/abort-controller.ts diff --git a/packages/core/src/common/utils/splitArray.ts b/packages/utility-features/utilities/src/array.ts similarity index 52% rename from packages/core/src/common/utils/splitArray.ts rename to packages/utility-features/utilities/src/array.ts index 142d4a33ff..0f7a554318 100644 --- a/packages/core/src/common/utils/splitArray.ts +++ b/packages/utility-features/utilities/src/array.ts @@ -3,6 +3,15 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +/** + * A inference typed version of `Array(length).fill(value)` + * @param length The number of entries + * @param value The value of each of the indices + */ +function filled(length: number, value: T): T[] { + return Array(length).fill(value); +} + /** * This function splits an array into two sub arrays on the first instance of * element (from the left). If the array does not contain the element. The @@ -14,29 +23,33 @@ * @returns the left and right sub-arrays which when conjoined with `element` * is the same as `array`, and `true` */ -export function splitArray(array: T[], element: T): [T[], T[], boolean] { - const index = array.indexOf(element); +function split(src: T[], element: T): [T[], T[], boolean] { + const index = src.indexOf(element); if (index < 0) { - return [array, [], false]; + return [src, [], false]; } - return [array.slice(0, index), array.slice(index + 1, array.length), true]; + return [src.slice(0, index), src.slice(index + 1, src.length), true]; } -/** - * Splits an array into two parts based on the outcome of `condition`. If `true` - * the value will be returned as part of the right array. If `false` then part of - * the left array. - * @param src the full array to bifurcate - * @param condition the function to determine which set each is in - */ -export function bifurcateArray(src: T[], condition: (item: T) => boolean): [falses: T[], trues: T[]] { - const res: [T[], T[]] = [[], []]; +function bifurcate(src: T[], condition: (item: T) => any): [falses: T[], trues: T[]] { + const trues: T[] = []; + const falses: T[] = []; for (const item of src) { - res[+condition(item)].push(item); + if (condition(item)) { + trues.push(item); + } else { + falses.push(item); + } } - return res; + return [falses, trues]; } + +export const array = { + bifurcate, + filled, + split, +}; diff --git a/packages/core/src/common/utils/backoff-caller.ts b/packages/utility-features/utilities/src/backoff-caller.ts similarity index 87% rename from packages/core/src/common/utils/backoff-caller.ts rename to packages/utility-features/utilities/src/backoff-caller.ts index 2d1269a48b..a76e666c7e 100644 --- a/packages/core/src/common/utils/backoff-caller.ts +++ b/packages/utility-features/utilities/src/backoff-caller.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "./async-result"; +import type { AsyncResult, Result } from "./result"; import { delay } from "./delay"; import { noop } from "./noop"; @@ -41,7 +41,7 @@ export interface BackoffCallerOptions { * @param fn The function to repeatedly attempt * @returns The first success or the last failure */ -export const backoffCaller = async >(fn: () => Promise, options?: BackoffCallerOptions): Promise => { +export const backoffCaller = async (fn: () => AsyncResult, options?: BackoffCallerOptions): AsyncResult => { const { initialTimeout = 1000, maxAttempts = 5, @@ -51,7 +51,7 @@ export const backoffCaller = async >(fn: () => let timeout = initialTimeout; let attempt = 0; - let result: R; + let result: Result; do { result = await fn(); diff --git a/packages/core/src/common/utils/base64.ts b/packages/utility-features/utilities/src/base64.ts similarity index 82% rename from packages/core/src/common/utils/base64.ts rename to packages/utility-features/utilities/src/base64.ts index c55a5de6a7..1f2aa0810f 100755 --- a/packages/core/src/common/utils/base64.ts +++ b/packages/utility-features/utilities/src/base64.ts @@ -12,7 +12,7 @@ import * as Utf8 from "crypto-js/enc-utf8"; * @param data A Base64 encoded string * @returns The original utf-8 string */ -export function decode(data: string): string { +function decode(data: string): string { return Base64.parse(data).toString(Utf8); } @@ -21,6 +21,11 @@ export function decode(data: string): string { * @param data A normal string * @returns A base64 encoded version */ -export function encode(data: string): string { +function encode(data: string): string { return Utf8.parse(data).toString(Base64); } + +export const base64 = { + encode, + decode, +}; diff --git a/packages/core/src/common/utils/buildUrl.ts b/packages/utility-features/utilities/src/buildUrl.ts similarity index 100% rename from packages/core/src/common/utils/buildUrl.ts rename to packages/utility-features/utilities/src/buildUrl.ts diff --git a/packages/core/src/common/utils/camelCase.ts b/packages/utility-features/utilities/src/camelCase.ts similarity index 96% rename from packages/core/src/common/utils/camelCase.ts rename to packages/utility-features/utilities/src/camelCase.ts index a37e4c7f5c..056b427656 100644 --- a/packages/core/src/common/utils/camelCase.ts +++ b/packages/utility-features/utilities/src/camelCase.ts @@ -7,7 +7,7 @@ import { camelCase } from "lodash"; import type { SingleOrMany } from "./types"; import { isObject, isString } from "./type-narrowing"; -import * as object from "./objects"; +import { object } from "./object"; export function toCamelCase[]>(obj: T): T; export function toCamelCase>(obj: T): T; diff --git a/packages/core/src/common/utils/collection-functions.ts b/packages/utility-features/utilities/src/collection-functions.ts similarity index 94% rename from packages/core/src/common/utils/collection-functions.ts rename to packages/utility-features/utilities/src/collection-functions.ts index 5d6dc80548..e78e215e8b 100644 --- a/packages/core/src/common/utils/collection-functions.ts +++ b/packages/utility-features/utilities/src/collection-functions.ts @@ -19,7 +19,6 @@ export function getOrInsert(map: Map, key: K, value: V): V { map.set(key, value); } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return map.get(key)!; } @@ -67,7 +66,6 @@ export function getOrInsertWith(map: Map | WeakMap(map: Map, key: K): V { throw new TypeError(`Map does not contains key: ${inspect(key)}`); } - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return map.get(key)!; } diff --git a/packages/core/src/common/utils/computed-or.ts b/packages/utility-features/utilities/src/computed-or.ts similarity index 100% rename from packages/core/src/common/utils/computed-or.ts rename to packages/utility-features/utilities/src/computed-or.ts diff --git a/packages/core/src/common/utils/__tests__/convert-memory.test.ts b/packages/utility-features/utilities/src/convert-memory.test.ts similarity index 98% rename from packages/core/src/common/utils/__tests__/convert-memory.test.ts rename to packages/utility-features/utilities/src/convert-memory.test.ts index c69f43a061..ccbb26c4ba 100644 --- a/packages/core/src/common/utils/__tests__/convert-memory.test.ts +++ b/packages/utility-features/utilities/src/convert-memory.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { bytesToUnits, unitsToBytes } from "../convertMemory"; +import { bytesToUnits, unitsToBytes } from "./convertMemory"; describe("unitsToBytes", () => { it("without any units, just parse as float", () => { diff --git a/packages/core/src/common/utils/convertCpu.ts b/packages/utility-features/utilities/src/convertCpu.ts similarity index 100% rename from packages/core/src/common/utils/convertCpu.ts rename to packages/utility-features/utilities/src/convertCpu.ts diff --git a/packages/core/src/common/utils/convertMemory.ts b/packages/utility-features/utilities/src/convertMemory.ts similarity index 98% rename from packages/core/src/common/utils/convertMemory.ts rename to packages/utility-features/utilities/src/convertMemory.ts index 7cae1cf0c1..3a9aea6d5f 100644 --- a/packages/core/src/common/utils/convertMemory.ts +++ b/packages/utility-features/utilities/src/convertMemory.ts @@ -4,7 +4,7 @@ */ import assert from "assert"; -import * as iter from "./iter"; +import { iter } from "./iter"; // Helper to convert memory from units Ki, Mi, Gi, Ti, Pi to bytes and vise versa diff --git a/packages/core/src/renderer/utils/__tests__/converted-name.test.ts b/packages/utility-features/utilities/src/converted-name.test.ts similarity index 92% rename from packages/core/src/renderer/utils/__tests__/converted-name.test.ts rename to packages/utility-features/utilities/src/converted-name.test.ts index ab1f040b95..24c89185f5 100644 --- a/packages/core/src/renderer/utils/__tests__/converted-name.test.ts +++ b/packages/utility-features/utilities/src/converted-name.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getConvertedParts } from "../name-parts"; +import { getConvertedParts } from "./name-parts"; describe("getConvertedParts", () => { it.each([ diff --git a/packages/core/src/renderer/utils/cssNames.ts b/packages/utility-features/utilities/src/cssNames.ts similarity index 77% rename from packages/core/src/renderer/utils/cssNames.ts rename to packages/utility-features/utilities/src/cssNames.ts index aebf5cdf72..a8db957fcc 100755 --- a/packages/core/src/renderer/utils/cssNames.ts +++ b/packages/utility-features/utilities/src/cssNames.ts @@ -3,7 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { iter } from "../../common/utils"; +import { iter } from "./iter"; +import { object } from "./object"; +import { isObject } from "./type-narrowing"; export type IgnoredClassNames = number | symbol | Function; export type IClassName = string | string[] | Record | undefined | null | false | IgnoredClassNames; @@ -18,15 +20,15 @@ export function cssNames(...classNames: IClassName[]): string { for (const name of className) { classNamesEnabled.set(name, true); } - } else if (className && typeof className === "object") { - for (const [name, value] of Object.entries(className)) { + } else if (isObject(className)) { + for (const [name, value] of object.entries(className)) { classNamesEnabled.set(name, Boolean(value)); } } } return iter.chain(classNamesEnabled.entries()) - .filter(([, isActive]) => !!isActive) + .filter(([, isActive]) => isActive) .filterMap(([className]) => className.trim()) .join(" "); } diff --git a/packages/core/src/renderer/utils/cssVar.ts b/packages/utility-features/utilities/src/cssVar.ts similarity index 100% rename from packages/core/src/renderer/utils/cssVar.ts rename to packages/utility-features/utilities/src/cssVar.ts diff --git a/packages/core/src/common/utils/debouncePromise.ts b/packages/utility-features/utilities/src/debouncePromise.ts similarity index 85% rename from packages/core/src/common/utils/debouncePromise.ts rename to packages/utility-features/utilities/src/debouncePromise.ts index c15b206a76..1610b977b2 100755 --- a/packages/core/src/common/utils/debouncePromise.ts +++ b/packages/utility-features/utilities/src/debouncePromise.ts @@ -10,6 +10,6 @@ export function debouncePromise(func: (...args: F) => T | Pr return (...params: F) => new Promise(resolve => { clearTimeout(timer); - timer = global.setTimeout(() => resolve(func(...params)), timeout); + timer = setTimeout(() => resolve(func(...params)), timeout); }); } diff --git a/packages/core/src/common/utils/delay.ts b/packages/utility-features/utilities/src/delay.ts similarity index 100% rename from packages/core/src/common/utils/delay.ts rename to packages/utility-features/utilities/src/delay.ts diff --git a/packages/core/src/renderer/utils/display-mode.ts b/packages/utility-features/utilities/src/display-mode.ts similarity index 100% rename from packages/core/src/renderer/utils/display-mode.ts rename to packages/utility-features/utilities/src/display-mode.ts diff --git a/packages/core/src/common/utils/disposer.ts b/packages/utility-features/utilities/src/disposer.ts similarity index 91% rename from packages/core/src/common/utils/disposer.ts rename to packages/utility-features/utilities/src/disposer.ts index 2949a7ae35..f7be4dc34d 100644 --- a/packages/core/src/common/utils/disposer.ts +++ b/packages/utility-features/utilities/src/disposer.ts @@ -5,8 +5,6 @@ import type { SingleOrMany } from "./types"; - - export interface Disposer { (): void; } @@ -16,7 +14,7 @@ export interface Disposable { } export interface ExtendableDisposer extends Disposer { - push(...vals: (Disposer | ExtendableDisposer | Disposable)[]): void; + push(...values: (Disposer | ExtendableDisposer | Disposable)[]): void; } export function disposer(...items: SingleOrMany[]): ExtendableDisposer { diff --git a/packages/core/src/common/utils/__tests__/formatDuration.test.ts b/packages/utility-features/utilities/src/formatDuration.test.ts similarity index 97% rename from packages/core/src/common/utils/__tests__/formatDuration.test.ts rename to packages/utility-features/utilities/src/formatDuration.test.ts index 3c42db9060..b72b7173f2 100644 --- a/packages/core/src/common/utils/__tests__/formatDuration.test.ts +++ b/packages/utility-features/utilities/src/formatDuration.test.ts @@ -4,7 +4,7 @@ */ import moment from "moment"; -import { formatDuration } from "../formatDuration"; +import { formatDuration } from "./formatDuration"; const second = 1000; const minute = 60 * second; diff --git a/packages/core/src/common/utils/formatDuration.ts b/packages/utility-features/utilities/src/formatDuration.ts similarity index 100% rename from packages/core/src/common/utils/formatDuration.ts rename to packages/utility-features/utilities/src/formatDuration.ts diff --git a/packages/core/src/common/utils/__tests__/hash-set.test.ts b/packages/utility-features/utilities/src/hash-set.test.ts similarity index 98% rename from packages/core/src/common/utils/__tests__/hash-set.test.ts rename to packages/utility-features/utilities/src/hash-set.test.ts index 4e78a1ca4c..2feaab4d9b 100644 --- a/packages/core/src/common/utils/__tests__/hash-set.test.ts +++ b/packages/utility-features/utilities/src/hash-set.test.ts @@ -3,14 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { HashSet, ObservableHashSet } from "../hash-set"; +import { HashSet, ObservableHashSet } from "./hash-set"; describe("ObservableHashSet", () => { it("should not throw on creation", () => { expect(() => new ObservableHashSet<{ a: number }>([], item => item.a.toString())).not.toThrowError(); }); - it("should be initializable", () => { + it("should be initialized", () => { const res = new ObservableHashSet([ { a: 1 }, { a: 2 }, @@ -263,7 +263,7 @@ describe("HashSet", () => { expect(() => new HashSet<{ a: number }>([], item => item.a.toString())).not.toThrowError(); }); - it("should be initializable", () => { + it("should be initialized", () => { const res = new HashSet([ { a: 1 }, { a: 2 }, diff --git a/packages/core/src/common/utils/hash-set.ts b/packages/utility-features/utilities/src/hash-set.ts similarity index 88% rename from packages/core/src/common/utils/hash-set.ts rename to packages/utility-features/utilities/src/hash-set.ts index 23ce13b1b2..7369fa32d9 100644 --- a/packages/core/src/common/utils/hash-set.ts +++ b/packages/utility-features/utilities/src/hash-set.ts @@ -4,7 +4,7 @@ */ import type { IInterceptable, IInterceptor, IListenable, ISetWillChange, ObservableMap } from "mobx"; -import { action, observable, ObservableSet } from "mobx"; +import { observable, ObservableSet, runInAction } from "mobx"; export function makeIterableIterator(iterator: Iterator): IterableIterator { (iterator as IterableIterator)[Symbol.iterator] = () => iterator as IterableIterator; @@ -138,23 +138,24 @@ export class ObservableHashSet implements Set, IInterceptable(Array.from(initialValues, value => [this.hasher(value), value]), undefined); } - @action replace(other: ObservableHashSet | ObservableSet | Set | readonly T[]): this { - if (other === null || other === undefined) { + return runInAction(() => { + if (other === null || other === undefined) { + return this; + } + + if (!(Array.isArray(other) || other instanceof Set || other instanceof ObservableHashSet || other instanceof ObservableSet)) { + throw new Error(`ObservableHashSet: Cannot initialize set from ${other}`); + } + + this.clear(); + + for (const value of other) { + this.add(value); + } + return this; - } - - if (!(Array.isArray(other) || other instanceof Set || other instanceof ObservableHashSet || other instanceof ObservableSet)) { - throw new Error(`ObservableHashSet: Cannot initialize set from ${other}`); - } - - this.clear(); - - for (const value of other) { - this.add(value); - } - - return this; + }); } clear(): void { @@ -167,15 +168,16 @@ export class ObservableHashSet implements Set, IInterceptable { + const hash = this.hasher(value); - if (this.#hashmap.has(hash)) { - this.#hashmap.delete(hash); - } else { - this.#hashmap.set(hash, value); - } + if (this.#hashmap.has(hash)) { + this.#hashmap.delete(hash); + } else { + this.#hashmap.set(hash, value); + } + }); } delete(value: T): boolean { diff --git a/packages/core/src/renderer/utils/interval.ts b/packages/utility-features/utilities/src/interval.ts similarity index 100% rename from packages/core/src/renderer/utils/interval.ts rename to packages/utility-features/utilities/src/interval.ts diff --git a/packages/core/src/renderer/utils/is-node-falsy.ts b/packages/utility-features/utilities/src/is-node-falsy.ts similarity index 100% rename from packages/core/src/renderer/utils/is-node-falsy.ts rename to packages/utility-features/utilities/src/is-node-falsy.ts diff --git a/packages/core/src/renderer/utils/isMiddleClick.ts b/packages/utility-features/utilities/src/isMiddleClick.ts similarity index 100% rename from packages/core/src/renderer/utils/isMiddleClick.ts rename to packages/utility-features/utilities/src/isMiddleClick.ts diff --git a/packages/core/src/renderer/utils/isReactNode.ts b/packages/utility-features/utilities/src/isReactNode.ts similarity index 91% rename from packages/core/src/renderer/utils/isReactNode.ts rename to packages/utility-features/utilities/src/isReactNode.ts index 682ac0f93b..a2c97c707a 100755 --- a/packages/core/src/renderer/utils/isReactNode.ts +++ b/packages/utility-features/utilities/src/isReactNode.ts @@ -6,7 +6,7 @@ // Type guard for checking valid react node to use in render import type { ReactNode } from "react"; import React from "react"; -import { isObject } from "../../common/utils"; +import { isObject } from "./type-narrowing"; export function isReactNode(node: unknown): node is ReactNode { return (isObject(node) && React.isValidElement(node)) diff --git a/packages/utility-features/utilities/src/iter.test.ts b/packages/utility-features/utilities/src/iter.test.ts new file mode 100644 index 0000000000..c1a4837505 --- /dev/null +++ b/packages/utility-features/utilities/src/iter.test.ts @@ -0,0 +1,101 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { iter } from "./iter"; + +describe("iter", () => { + describe("reduce", () => { + it("can reduce a value", () => { + expect(iter.reduce([1, 2, 3], (acc: number[], current: number) => [current, ...acc], [0])).toEqual([3, 2, 1, 0]); + }); + + it("can reduce an empty iterable", () => { + expect(iter.reduce([], (acc: number[], current: number) => [acc[0] + current], [])).toEqual([]); + }); + }); + + describe("join", () => { + it("should not prefix the output by the separator", () => { + expect(iter.join(["a", "b", "c"].values(), " ")).toBe("a b c"); + }); + + it("should return empty string if iterator is empty", () => { + expect(iter.join([].values(), " ")).toBe(""); + }); + + it("should return just first entry if iterator is of size 1", () => { + expect(iter.join(["d"].values(), " ")).toBe("d"); + }); + }); + + describe("nth", () => { + it("should return undefined past the end of the iterator", () => { + expect(iter.nth(["a"], 123)).toBeUndefined(); + }); + + it("should by 0-indexing the index", () => { + expect(iter.nth(["a", "b"], 0)).toBe("a"); + }); + }); + + describe("concat", () => { + it("should yield undefined for empty args", () => { + const i = iter.concat(); + + expect(i.next()).toEqual({ done: true }); + }); + + it("should yield undefined for only empty args", () => { + const i = iter.concat([].values(), [].values(), [].values(), [].values()); + + expect(i.next()).toEqual({ done: true }); + }); + + it("should yield all of the first and then all of the second", () => { + const i = iter.concat([1, 2, 3].values(), [4, 5, 6].values()); + + expect(i.next()).toEqual({ done: false, value: 1 }); + expect(i.next()).toEqual({ done: false, value: 2 }); + expect(i.next()).toEqual({ done: false, value: 3 }); + expect(i.next()).toEqual({ done: false, value: 4 }); + expect(i.next()).toEqual({ done: false, value: 5 }); + expect(i.next()).toEqual({ done: false, value: 6 }); + expect(i.next()).toEqual({ done: true }); + }); + }); + + describe("nFircate", () => { + it("should produce an empty array if no parts are provided", () => { + expect(iter.nFircate([{ a: 1 }, { a: 2 }], "a", []).length).toBe(0); + }); + + it("should ignore non-matching parts", () => { + const res = iter.nFircate([{ a: 1 }, { a: 2 }], "a", [1]); + + expect(res.length).toBe(1); + expect(res[0].length).toBe(1); + }); + + it("should include all matching parts in each type", () => { + const res = iter.nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2]); + + expect(res.length).toBe(2); + expect(res[0].length).toBe(2); + expect(res[0][0].b).toBe("a"); + expect(res[0][1].b).toBe("c"); + expect(res[1].length).toBe(1); + expect(res[1][0].b).toBe("b"); + }); + + it("should throw a type error if the same part is provided more than once", () => { + try { + iter.nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2, 1]); + fail("Expected error"); + } catch (error) { + expect(error).toBeInstanceOf(TypeError); + } + }); + }); +}); diff --git a/packages/core/src/common/utils/iter.ts b/packages/utility-features/utilities/src/iter.ts similarity index 62% rename from packages/core/src/common/utils/iter.ts rename to packages/utility-features/utilities/src/iter.ts index dc1c4621fd..abbf4cc92d 100644 --- a/packages/core/src/common/utils/iter.ts +++ b/packages/utility-features/utilities/src/iter.ts @@ -3,11 +3,11 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -export type Falsey = false | 0 | "" | null | undefined; +export type Falsy = false | 0 | "" | null | undefined; interface Iterator extends Iterable { filter(fn: (val: T) => unknown): Iterator; - filterMap(fn: (val: T) => Falsey | U): Iterator; + filterMap(fn: (val: T) => Falsy | U): Iterator; find(fn: (val: T) => unknown): T | undefined; collect(fn: (values: Iterable) => U): U; map(fn: (val: T) => U): Iterator; @@ -16,7 +16,7 @@ interface Iterator extends Iterable { join(sep?: string): string; } -export function chain(src: IterableIterator): Iterator { +function chain(src: IterableIterator): Iterator { return { filter: (fn) => chain(filter(src, fn)), filterMap: (fn) => chain(filterMap(src, fn)), @@ -34,7 +34,7 @@ export function chain(src: IterableIterator): Iterator { * Create a new type safe empty Iterable * @returns An `Iterable` that yields 0 items */ -export function* newEmpty(): IterableIterator {} +function* newEmpty(): IterableIterator {} /** * Creates a new `Iterable` that yields at most n items from src. @@ -42,7 +42,7 @@ export function* newEmpty(): IterableIterator {} * @param src An initial iterator * @param n The maximum number of elements to take from src. Yields up to the floor of `n` and 0 items if n < 0 */ -export function* take(src: Iterable, n: number): IterableIterator { +function* take(src: Iterable, n: number): IterableIterator { outer: for (let i = 0; i < n; i += 1) { for (const item of src) { yield item; @@ -60,18 +60,18 @@ export function* take(src: Iterable, n: number): IterableIterator { * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* map(src: Iterable, fn: (from: T) => U): IterableIterator { +function* map(src: Iterable, fn: (from: T) => U): IterableIterator { for (const from of src) { yield fn(from); } } /** - * The single layer flattening of an iterator, discarding `Falsey` values. + * The single layer flattening of an iterator, discarding `Falsy` values. * @param src A type that can be iterated over - * @param fn The function that returns either an iterable over items that should be filtered out or a `Falsey` value indicating that it should be ignored + * @param fn The function that returns either an iterable over items that should be filtered out or a `Falsy` value indicating that it should be ignored */ -export function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable | Falsey): IterableIterator { +function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable | Falsy): IterableIterator { for (const from of src) { if (!from) { continue; @@ -96,7 +96,7 @@ export function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable * @param src A type that can be iterated over * @param fn A function that returns an iterator */ -export function* flatMap(src: Iterable, fn: (from: T) => Iterable): IterableIterator { +function* flatMap(src: Iterable, fn: (from: T) => Iterable): IterableIterator { for (const from of src) { yield* fn(from); } @@ -108,7 +108,7 @@ export function* flatMap(src: Iterable, fn: (from: T) => Iterable): * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filter(src: Iterable, fn: (from: T) => any): IterableIterator { +function* filter(src: Iterable, fn: (from: T) => any): IterableIterator { for (const from of src) { if (fn(from)) { yield from; @@ -122,7 +122,7 @@ export function* filter(src: Iterable, fn: (from: T) => any): IterableIter * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filterMap(src: Iterable, fn: (from: T) => U | Falsey): IterableIterator { +function* filterMap(src: Iterable, fn: (from: T) => U | Falsy): IterableIterator { for (const from of src) { const res = fn(from); @@ -138,7 +138,7 @@ export function* filterMap(src: Iterable, fn: (from: T) => U | Falsey): * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filterMapStrict(src: Iterable, fn: (from: T) => U | null | undefined): IterableIterator { +function* filterMapStrict(src: Iterable, fn: (from: T) => U | null | undefined): IterableIterator { for (const from of src) { const res = fn(from); @@ -154,7 +154,7 @@ export function* filterMapStrict(src: Iterable, fn: (from: T) => U | nu * @param match A function that should return a truthy value for the item that you want to find * @returns The first entry that `match` returns a truthy value for, or `undefined` */ -export function find(src: Iterable, match: (i: T) => any): T | undefined { +function find(src: Iterable, match: (i: T) => any): T | undefined { for (const from of src) { if (match(from)) { return from; @@ -166,14 +166,14 @@ export function find(src: Iterable, match: (i: T) => any): T | undefined { /** * Iterate over `src` calling `reducer` with the previous produced value and the current - * yielded value until `src` is exausted. Then return the final value. + * yielded value until `src` is exhausted. Then return the final value. * @param src The value to iterate over - * @param reducer A function for producing the next item from an accumilation and the current item + * @param reducer A function for producing the next item from an accumulation and the current item * @param initial The initial value for the iteration */ -export function reduce>(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R; +function reduce>(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R; -export function reduce(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R { +function reduce(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R { let acc = initial; for (const item of src) { @@ -189,7 +189,7 @@ export function reduce(src: Iterable, reducer: (acc: R, cur: T) => * @param connector The string value to intersperse between the yielded values * @returns The concatenated entries of `src` interspersed with copies of `connector` */ -export function join(src: IterableIterator, connector = ","): string { +function join(src: IterableIterator, connector = ","): string { const iterSrc = src[Symbol.iterator](); const first = iterSrc.next(); @@ -205,7 +205,7 @@ export function join(src: IterableIterator, connector = ","): string { * @param src The value to iterate over * @param n The zero-index value for the item to return to. */ -export function nth(src: Iterable, n: number): T | undefined { +function nth(src: Iterable, n: number): T | undefined { const iterator = src[Symbol.iterator](); while (n --> 0) { @@ -219,17 +219,17 @@ export function nth(src: Iterable, n: number): T | undefined { * A convenience function to get the first item of an iterator * @param src The value to iterate over */ -export function first(src: Iterable): T | undefined { +function first(src: Iterable): T | undefined { return nth(src, 0); } /** - * Iterate through `src` and return `true` if `fn` returns a thruthy value for every yielded value. + * Iterate through `src` and return `true` if `fn` returns a truthy value for every yielded value. * Otherwise, return `false`. This function short circuits. * @param src The type to be iterated over * @param fn A function to check each iteration */ -export function every(src: Iterable, fn: (val: T) => any): boolean { +function every(src: Iterable, fn: (val: T) => any): boolean { for (const val of src) { if (!fn(val)) { return false; @@ -239,10 +239,61 @@ export function every(src: Iterable, fn: (val: T) => any): boolean { return true; } -export function* concat(...sources: IterableIterator[]): IterableIterator { +function* concat(...sources: IterableIterator[]): IterableIterator { for (const source of sources) { for (const val of source) { yield val; } } } + +/** + * Split an iterable into several arrays with matching fields + * @param from The iterable of items to split up + * @param field The field of each item to split over + * @param parts What each array will be filtered to + * @returns A `parts.length` tuple of `T[]` where each array has matching `field` values + */ +function nFircate(from: Iterable, field: keyof T, parts: []): []; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field]]): [T[]]; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field]]): [T[], T[]]; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field], T[typeof field]]): [T[], T[], T[]]; +function nFircate(from: Iterable, field: keyof T, parts: T[typeof field][]): T[][] { + if (new Set(parts).size !== parts.length) { + throw new TypeError("Duplicate parts entries"); + } + + const res = Array.from(parts, () => [] as T[]); + + for (const item of from) { + const index = parts.indexOf(item[field]); + + if (index < 0) { + continue; + } + + res[index].push(item); + } + + return res; +} + +export const iter = { + chain, + concat, + every, + filter, + filterFlatMap, + filterMap, + filterMapStrict, + find, + first, + flatMap, + join, + map, + nFircate, + newEmpty, + nth, + reduce, + take, +}; diff --git a/packages/utility-features/utilities/src/json.ts b/packages/utility-features/utilities/src/json.ts new file mode 100644 index 0000000000..1c8d051ac3 --- /dev/null +++ b/packages/utility-features/utilities/src/json.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { Result } from "./result"; + +export const json = { + parse: (input: string): Result => { + try { + return { + callWasSuccessful: true, + response: JSON.parse(input) as unknown, + } + } catch (error) { + return { + callWasSuccessful: false, + error: error as Error, + } + } + }, +}; diff --git a/packages/core/src/renderer/utils/__tests__/jsonPath.test.ts b/packages/utility-features/utilities/src/jsonPath.test.ts similarity index 99% rename from packages/core/src/renderer/utils/__tests__/jsonPath.test.ts rename to packages/utility-features/utilities/src/jsonPath.test.ts index 312522a63f..ecf0b385da 100644 --- a/packages/core/src/renderer/utils/__tests__/jsonPath.test.ts +++ b/packages/utility-features/utilities/src/jsonPath.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { convertKubectlJsonPathToNodeJsonPath, safeJSONPathValue } from "../jsonPath"; +import { convertKubectlJsonPathToNodeJsonPath, safeJSONPathValue } from "./jsonPath"; describe("convertKubectlJsonPathToNodeJsonPath", () => { it("should convert \\. to use indexed notation", () => { diff --git a/packages/core/src/renderer/utils/jsonPath.ts b/packages/utility-features/utilities/src/jsonPath.ts similarity index 100% rename from packages/core/src/renderer/utils/jsonPath.ts rename to packages/utility-features/utilities/src/jsonPath.ts diff --git a/packages/core/src/renderer/utils/__tests__/metricUnitsToNumber.test.ts b/packages/utility-features/utilities/src/metricUnitsToNumber.test.ts similarity index 89% rename from packages/core/src/renderer/utils/__tests__/metricUnitsToNumber.test.ts rename to packages/utility-features/utilities/src/metricUnitsToNumber.test.ts index e6c2795eb0..5ef7328930 100644 --- a/packages/core/src/renderer/utils/__tests__/metricUnitsToNumber.test.ts +++ b/packages/utility-features/utilities/src/metricUnitsToNumber.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { metricUnitsToNumber } from "../metricUnitsToNumber"; +import { metricUnitsToNumber } from "./metricUnitsToNumber"; describe("metricUnitsToNumber tests", () => { test("plain number", () => { diff --git a/packages/core/src/renderer/utils/metricUnitsToNumber.ts b/packages/utility-features/utilities/src/metricUnitsToNumber.ts similarity index 100% rename from packages/core/src/renderer/utils/metricUnitsToNumber.ts rename to packages/utility-features/utilities/src/metricUnitsToNumber.ts diff --git a/packages/core/src/renderer/utils/name-parts.ts b/packages/utility-features/utilities/src/name-parts.ts similarity index 100% rename from packages/core/src/renderer/utils/name-parts.ts rename to packages/utility-features/utilities/src/name-parts.ts diff --git a/packages/core/src/common/utils/noop.ts b/packages/utility-features/utilities/src/noop.ts similarity index 99% rename from packages/core/src/common/utils/noop.ts rename to packages/utility-features/utilities/src/noop.ts index a9171f2618..b985da1930 100644 --- a/packages/core/src/common/utils/noop.ts +++ b/packages/utility-features/utilities/src/noop.ts @@ -2,9 +2,11 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ + /** * A function that does nothing */ export function noop(...args: T): void { return void args; } + diff --git a/packages/utility-features/utilities/src/object.ts b/packages/utility-features/utilities/src/object.ts new file mode 100644 index 0000000000..51cdfd3904 --- /dev/null +++ b/packages/utility-features/utilities/src/object.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +/** + * A better typed version of `Object.fromEntries` where the keys are known to + * be a specific subset + */ +function fromEntries(entries: Iterable): Record { + return Object.fromEntries(entries) as Record; +} + +function keys(obj: Partial>): K[]; +function keys(obj: Record): K[] { + return Object.keys(obj) as K[]; +} + +function entries(obj: Partial> | null | undefined): [K, V][]; +function entries(obj: Partial> | null | undefined): [K, V][]; +function entries(obj: Record | null | undefined): [K, V][]; +function entries(obj: Record | null | undefined): [K, V][] { + if (obj && typeof obj == "object") { + return Object.entries(obj) as never; + } + + return [] as never; +} + +export const object = { + entries, + fromEntries, + keys, +}; diff --git a/packages/core/src/common/utils/observable-crate/observable-crate.test.ts b/packages/utility-features/utilities/src/observable-crate.test.ts similarity index 96% rename from packages/core/src/common/utils/observable-crate/observable-crate.test.ts rename to packages/utility-features/utilities/src/observable-crate.test.ts index 03ee2e43f8..acadb804cc 100644 --- a/packages/core/src/common/utils/observable-crate/observable-crate.test.ts +++ b/packages/utility-features/utilities/src/observable-crate.test.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { ObservableCrate } from "./impl"; -import { observableCrate } from "./impl"; +import type { ObservableCrate } from "./observable-crate"; +import { observableCrate } from "./observable-crate"; describe("observable-crate", () => { it("can be constructed with initial value", () => { diff --git a/packages/core/src/common/utils/observable-crate/impl.ts b/packages/utility-features/utilities/src/observable-crate.ts similarity index 93% rename from packages/core/src/common/utils/observable-crate/impl.ts rename to packages/utility-features/utilities/src/observable-crate.ts index e9874c9b7d..d7cd1b75bb 100644 --- a/packages/core/src/common/utils/observable-crate/impl.ts +++ b/packages/utility-features/utilities/src/observable-crate.ts @@ -4,8 +4,8 @@ */ import { observable, runInAction } from "mobx"; -import { getOrInsertMap } from "../collection-functions"; -import { noop } from "../noop"; +import { getOrInsertMap } from "./collection-functions"; +import { noop } from "./noop"; export interface ObservableCrate { get(): T; diff --git a/packages/core/src/renderer/utils/on-keyboard-shortcut.ts b/packages/utility-features/utilities/src/on-keyboard-shortcut.ts similarity index 91% rename from packages/core/src/renderer/utils/on-keyboard-shortcut.ts rename to packages/utility-features/utilities/src/on-keyboard-shortcut.ts index 4504765ac7..443df8e5f0 100644 --- a/packages/core/src/renderer/utils/on-keyboard-shortcut.ts +++ b/packages/utility-features/utilities/src/on-keyboard-shortcut.ts @@ -3,8 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { WindowEventListener } from "../window/event-listener.injectable"; - function parseKeyDownDescriptor(descriptor: string): (event: KeyboardEvent) => boolean { const parts = new Set(( descriptor @@ -43,7 +41,7 @@ function parseKeyDownDescriptor(descriptor: string): (event: KeyboardEvent) => b }; } -export function onKeyboardShortcut(descriptor: string, action: () => void): WindowEventListener<"keydown"> { +export function onKeyboardShortcut(descriptor: string, action: () => void): (this: Window, ev: WindowEventMap["keydown"]) => any { const isMatchingEvent = parseKeyDownDescriptor(descriptor); return (event) => { diff --git a/packages/core/src/renderer/utils/prevDefault.ts b/packages/utility-features/utilities/src/prevDefault.ts similarity index 100% rename from packages/core/src/renderer/utils/prevDefault.ts rename to packages/utility-features/utilities/src/prevDefault.ts diff --git a/packages/core/src/common/utils/readableStream.ts b/packages/utility-features/utilities/src/readableStream.ts similarity index 100% rename from packages/core/src/common/utils/readableStream.ts rename to packages/utility-features/utilities/src/readableStream.ts diff --git a/packages/core/src/common/utils/readonly.ts b/packages/utility-features/utilities/src/readonly.ts similarity index 100% rename from packages/core/src/common/utils/readonly.ts rename to packages/utility-features/utilities/src/readonly.ts diff --git a/packages/core/src/common/utils/reject-promise.ts b/packages/utility-features/utilities/src/reject-promise.ts similarity index 100% rename from packages/core/src/common/utils/reject-promise.ts rename to packages/utility-features/utilities/src/reject-promise.ts diff --git a/packages/core/src/common/utils/async-result.ts b/packages/utility-features/utilities/src/result.ts similarity index 51% rename from packages/core/src/common/utils/async-result.ts rename to packages/utility-features/utilities/src/result.ts index 69927f3275..b0153d46d4 100644 --- a/packages/core/src/common/utils/async-result.ts +++ b/packages/utility-features/utilities/src/result.ts @@ -2,7 +2,17 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -export type AsyncResult = + +/** + * A helper type for async functions that return a `Result` + */ +export type AsyncResult = Promise>; + +/** + * Result describes the "error is just more data" pattern instead of using exceptions for + * normal execution + */ +export type Result = | ( Response extends void ? { callWasSuccessful: true; response?: undefined } diff --git a/packages/core/src/common/utils/sort-compare.ts b/packages/utility-features/utilities/src/sort-compare.ts similarity index 92% rename from packages/core/src/common/utils/sort-compare.ts rename to packages/utility-features/utilities/src/sort-compare.ts index 35d88c01b9..69d77660e4 100644 --- a/packages/core/src/common/utils/sort-compare.ts +++ b/packages/utility-features/utilities/src/sort-compare.ts @@ -46,12 +46,12 @@ export function sortCompare(left: T, right: T): Ordering { } /** - * This function sorts of list of items that have what should be a semver version formated string - * as the field `version` but if it is not loosely coercable to semver falls back to sorting them + * This function sorts of list of items that have what should be a semver version formatted string + * as the field `version` but if it is not loosely coercible to semver falls back to sorting them * alphanumerically */ -export function sortBySemverVersion(versioneds: T[]): T[] { - return versioneds +export function sortBySemverVersion(versioned: T[]): T[] { + return versioned .map(versioned => ({ __version: coerce(versioned.version, { loose: true }), raw: versioned, diff --git a/packages/core/src/common/utils/sort-function.ts b/packages/utility-features/utilities/src/sort-function.ts similarity index 100% rename from packages/core/src/common/utils/sort-function.ts rename to packages/utility-features/utilities/src/sort-function.ts diff --git a/packages/core/src/common/utils/__tests__/splitArray.test.ts b/packages/utility-features/utilities/src/splitArray.test.ts similarity index 100% rename from packages/core/src/common/utils/__tests__/splitArray.test.ts rename to packages/utility-features/utilities/src/splitArray.test.ts diff --git a/packages/core/src/common/utils/tar.ts b/packages/utility-features/utilities/src/tar.ts similarity index 94% rename from packages/core/src/common/utils/tar.ts rename to packages/utility-features/utilities/src/tar.ts index 3102098976..701cd66fd8 100644 --- a/packages/core/src/common/utils/tar.ts +++ b/packages/utility-features/utilities/src/tar.ts @@ -7,7 +7,6 @@ // Docs: https://github.com/npm/node-tar import tar from "tar"; import path from "path"; -import { parse } from "./json"; import type { JsonValue } from "type-fest"; export type ReadFileFromTarOpts = { @@ -43,7 +42,7 @@ export function readFileFromTar({ tarPath, filePath, }); entry.once("end", () => { const data = Buffer.concat(fileChunks); - const result = parseJson ? parse(data.toString("utf8")) : data; + const result = parseJson ? JSON.parse(data.toString("utf8")) : data; resolve(result); }); diff --git a/packages/core/src/common/utils/__tests__/tuple.test.ts b/packages/utility-features/utilities/src/tuple.test.ts similarity index 96% rename from packages/core/src/common/utils/__tests__/tuple.test.ts rename to packages/utility-features/utilities/src/tuple.test.ts index 73a4ae1e25..e5cdfbea23 100644 --- a/packages/core/src/common/utils/__tests__/tuple.test.ts +++ b/packages/utility-features/utilities/src/tuple.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { tuple } from "../../utils"; +import { tuple } from "./tuple"; describe("tuple tests", () => { describe("zip()", () => { diff --git a/packages/core/src/common/utils/tuple.ts b/packages/utility-features/utilities/src/tuple.ts similarity index 71% rename from packages/core/src/common/utils/tuple.ts rename to packages/utility-features/utilities/src/tuple.ts index 1268678617..ca6284b681 100644 --- a/packages/core/src/common/utils/tuple.ts +++ b/packages/utility-features/utilities/src/tuple.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import * as array from "../utils/array"; +import { array } from "./array"; /** * A strict N-tuple of type T @@ -24,11 +24,10 @@ type TupleOfImpl = R["length"] extends * @yields A tuple of the next element from each of the sources * @returns The tuple of all the sources as soon as at least one of the sources is exausted */ -export function zip(...sources: Tuple): Iterator, Tuple>; -export function zip(...sources: Tuple): Iterator, Tuple>; -export function zip(...sources: Tuple): Iterator, Tuple>; - -export function* zip(...sources: Tuple): Iterator, Tuple> { +function zip(...sources: Tuple): Iterator, Tuple>; +function zip(...sources: Tuple): Iterator, Tuple>; +function zip(...sources: Tuple): Iterator, Tuple>; +function* zip(...sources: Tuple): Iterator, Tuple> { const maxSafeLength = Math.min(...sources.map(source => source.length)); for (let i = 0; i < maxSafeLength; i += 1) { @@ -43,13 +42,19 @@ export function* zip(...sources: Tuple): Iterator(length: L, value: T): Tuple { +function filled(length: L, value: T): Tuple { return array.filled(length, value) as Tuple; } /** * A function for converting an explicit array to a tuple but without the `readonly` typing */ -export function from(...args: T): [...T] { +function from(...args: T): [...T] { return args; } + +export const tuple = { + zip, + filled, + from, +}; diff --git a/packages/core/src/common/utils/type-narrowing.ts b/packages/utility-features/utilities/src/type-narrowing.ts similarity index 100% rename from packages/core/src/common/utils/type-narrowing.ts rename to packages/utility-features/utilities/src/type-narrowing.ts diff --git a/packages/core/src/common/utils/types.ts b/packages/utility-features/utilities/src/types.ts similarity index 93% rename from packages/core/src/common/utils/types.ts rename to packages/utility-features/utilities/src/types.ts index 32ebe14e33..25d665b811 100644 --- a/packages/core/src/common/utils/types.ts +++ b/packages/utility-features/utilities/src/types.ts @@ -14,7 +14,7 @@ export type RemoveUndefinedFromValues = { */ export type Defaulted = RemoveUndefinedFromValues>> & Omit; -export type OptionVarient = { +export type OptionVariant = { type: Key; } & Pick & { [OtherKey in Exclude]?: undefined; diff --git a/packages/core/src/common/utils/__tests__/union-env-path.test.ts b/packages/utility-features/utilities/src/union-env-path.test.ts similarity index 100% rename from packages/core/src/common/utils/__tests__/union-env-path.test.ts rename to packages/utility-features/utilities/src/union-env-path.test.ts diff --git a/packages/core/src/common/utils/union-env-path.ts b/packages/utility-features/utilities/src/union-env-path.ts similarity index 86% rename from packages/core/src/common/utils/union-env-path.ts rename to packages/utility-features/utilities/src/union-env-path.ts index 991e2c776c..ad41d049bc 100644 --- a/packages/core/src/common/utils/union-env-path.ts +++ b/packages/utility-features/utilities/src/union-env-path.ts @@ -4,10 +4,10 @@ */ import path from "path"; -import * as iter from "./iter"; +import { iter } from "./iter"; /** - * Join all entires with a PATH env var delimated string together + * Join all entires with a PATH env var delimited string together * @param PATHs Any number of PATH env variables * * NOTE: This function does not attempt to handle any sort of escape sequences since after testing diff --git a/packages/core/src/common/utils/wait.ts b/packages/utility-features/utilities/src/wait.ts similarity index 100% rename from packages/core/src/common/utils/wait.ts rename to packages/utility-features/utilities/src/wait.ts diff --git a/packages/core/src/common/utils/with-concurrency-limit.ts b/packages/utility-features/utilities/src/with-concurrency-limit.ts similarity index 86% rename from packages/core/src/common/utils/with-concurrency-limit.ts rename to packages/utility-features/utilities/src/with-concurrency-limit.ts index 284bb334e1..43c083c2dd 100644 --- a/packages/core/src/common/utils/with-concurrency-limit.ts +++ b/packages/utility-features/utilities/src/with-concurrency-limit.ts @@ -2,12 +2,12 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import plimit from "p-limit"; +import pLimit from "p-limit"; export type ConcurrencyLimiter = (fn: (...args: Args) => Res) => (...args: Args) => Promise; export function withConcurrencyLimit(limit: number): ConcurrencyLimiter { - const limiter = plimit(limit); + const limiter = pLimit(limit); return fn => (...args) => limiter(() => fn(...args)); } diff --git a/packages/utility-features/utilities/tsconfig.json b/packages/utility-features/utilities/tsconfig.json new file mode 100644 index 0000000000..a4f6fa613e --- /dev/null +++ b/packages/utility-features/utilities/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@k8slens/typescript/config/base.json" +} diff --git a/packages/utility-features/utilities/webpack.config.js b/packages/utility-features/utilities/webpack.config.js new file mode 100644 index 0000000000..3183f30179 --- /dev/null +++ b/packages/utility-features/utilities/webpack.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/webpack").configForNode;