1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Use common/logger everywhere, remove main/logger export

- in Renderer make it 'console' which a stub for silly level

- in Main make it a winston logger with file output as well

- in testing make it a jest mock stub

- in all other cases make it a winston logger without file output

- Turn on no-console

- Fix logger during integration testing

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-11-10 16:35:25 -05:00
parent a5e89b79d6
commit 990000678a
105 changed files with 267 additions and 338 deletions

View File

@ -58,6 +58,7 @@ module.exports = {
"header/header": [2, "./license-header"],
"comma-dangle": ["error", "always-multiline"],
"comma-spacing": "error",
"no-console": "error",
"indent": ["error", 2, {
"SwitchCase": 1,
}],
@ -124,6 +125,7 @@ module.exports = {
rules: {
"no-constant-condition": ["error", { "checkLoops": false }],
"header/header": [2, "./license-header"],
"no-console": "error",
"no-invalid-this": "off",
"@typescript-eslint/no-invalid-this": ["error"],
"@typescript-eslint/explicit-function-return-type": "off",
@ -210,6 +212,7 @@ module.exports = {
"no-constant-condition": ["error", { "checkLoops": false }],
"header/header": [2, "./license-header"],
"react/prop-types": "off",
"no-console": "error",
"no-invalid-this": "off",
"@typescript-eslint/no-invalid-this": ["error"],
"@typescript-eslint/explicit-function-return-type": "off",

View File

@ -22,10 +22,11 @@
import fs from "fs-extra";
import path from "path";
import defaultBaseLensTheme from "../src/renderer/themes/lens-dark.json";
import logger from "../src/common/logger";
const outputCssFile = path.resolve("src/renderer/themes/theme-vars.css");
const banner = `/*
const banner = `/*
Generated Lens theme CSS-variables, don't edit manually.
To refresh file run $: yarn run ts-node build/${path.basename(__filename)}
*/`;
@ -42,6 +43,6 @@ ${themeCssVars.join("\n")}
`;
// Run
console.info(`"Saving default Lens theme css-variables to "${outputCssFile}""`);
logger.info(`"Saving default Lens theme css-variables to "${outputCssFile}""`);
fs.ensureFileSync(outputCssFile);
fs.writeFile(outputCssFile, content);

View File

@ -22,6 +22,7 @@ import path from "path";
import sharp from "sharp";
import jsdom from "jsdom";
import fs from "fs-extra";
import logger from "../src/common/logger";
export async function generateTrayIcon(
{
@ -52,9 +53,9 @@ export async function generateTrayIcon(
// Save icon
await fs.writeFile(pngIconDestPath, pngIconBuffer);
console.info(`[DONE]: Tray icon saved at "${pngIconDestPath}"`);
logger.info(`[DONE]: Tray icon saved at "${pngIconDestPath}"`);
} catch (err) {
console.error(`[ERROR]: ${err}`);
logger.error(`[ERROR]: ${err}`);
}
}

View File

@ -25,11 +25,11 @@ import * as path from "path";
const helmVersion = packageInfo.config.bundledHelmVersion;
if (!isWindows) {
if (isWindows) {
new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary();
} else {
Promise.all([
new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(),
new HelmCli(path.join(process.cwd(), "binaries", "client", "arm64"), helmVersion).ensureBinary(),
]);
} else {
new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary();
}

View File

@ -27,6 +27,7 @@ import { ensureDir, pathExists } from "fs-extra";
import path from "path";
import { noop } from "lodash";
import { isLinux, isMac } from "../src/common/vars";
import logger from "../src/common/logger";
class KubectlDownloader {
public kubectlVersion: string;
@ -48,7 +49,7 @@ class KubectlDownloader {
method: "HEAD",
uri: this.url,
resolveWithFullResponse: true,
}).catch(console.error);
}).catch(logger.error);
if (response.headers["etag"]) {
return response.headers["etag"].replace(/"/g, "");
@ -65,12 +66,12 @@ class KubectlDownloader {
const etag = await this.urlEtag();
if (hash == etag) {
console.log("Kubectl md5sum matches the remote etag");
logger.info("Kubectl md5sum matches the remote etag");
return true;
}
console.log(`Kubectl md5sum ${hash} does not match the remote etag ${etag}, unlinking and downloading again`);
logger.info(`Kubectl md5sum ${hash} does not match the remote etag ${etag}, unlinking and downloading again`);
await fs.promises.unlink(this.path);
}
@ -79,14 +80,14 @@ class KubectlDownloader {
public async downloadKubectl() {
if (await this.checkBinary()) {
return console.log("Already exists and is valid");
return logger.info("Already exists and is valid");
}
await ensureDir(path.dirname(this.path), 0o755);
const file = fs.createWriteStream(this.path);
console.log(`Downloading kubectl ${this.kubectlVersion} from ${this.url} to ${this.path}`);
logger.info(`Downloading kubectl ${this.kubectlVersion} from ${this.url} to ${this.path}`);
const requestOpts: request.UriOptions & request.CoreOptions = {
uri: this.url,
gzip: true,
@ -94,19 +95,19 @@ class KubectlDownloader {
const stream = request(requestOpts);
stream.on("complete", () => {
console.log("kubectl binary download finished");
logger.info("kubectl binary download finished");
file.end(noop);
});
stream.on("error", (error) => {
console.log(error);
logger.info(error);
fs.unlink(this.path, noop);
throw error;
});
return new Promise<void>((resolve, reject) => {
file.on("close", () => {
console.log("kubectl binary download closed");
logger.info("kubectl binary download closed");
fs.chmod(this.path, 0o755, (err) => {
if (err) reject(err);
});
@ -133,9 +134,9 @@ if (isMac) {
}
downloads.forEach((dlOpts) => {
console.log(dlOpts);
logger.info(dlOpts);
const downloader = new KubectlDownloader(downloadVersion, dlOpts.platform, dlOpts.arch, dlOpts.target);
console.log(`Downloading: ${JSON.stringify(dlOpts)}`);
downloader.downloadKubectl().then(() => downloader.checkBinary().then(() => console.log("Download complete")));
logger.info(`Downloading: ${JSON.stringify(dlOpts)}`);
downloader.downloadKubectl().then(() => downloader.checkBinary().then(() => logger.info("Download complete")));
});

View File

@ -23,6 +23,7 @@ import * as path from "path";
import appInfo from "../package.json";
import semver from "semver";
import fastGlob from "fast-glob";
import logger from "../src/common/logger";
const packagePath = path.join(__dirname, "../package.json");
const versionInfo = semver.parse(appInfo.version);
@ -63,7 +64,7 @@ async function writeOutNewVersions() {
]);
}
function main() {
async function main() {
const prereleaseParts: string[] = [getBuildChannel()];
if (versionInfo.prerelease && versionInfo.prerelease.length > 1) {
@ -74,11 +75,12 @@ function main() {
appInfo.version = `${versionInfo.major}.${versionInfo.minor}.${versionInfo.patch}-${prereleaseParts.join(".")}`;
writeOutNewVersions()
.catch((error) => {
console.error(error);
process.exit(1);
});
try {
await writeOutNewVersions();
} catch (error) {
logger.error("Failed to write new build versions", error);
process.exit(1);
}
}
main();

View File

@ -24,6 +24,7 @@ import semver from "semver";
import * as path from "path";
const { ResourceStack, forCluster, StorageClass, Namespace } = Renderer.K8sApi;
const { logger } = Common;
type ResourceStack = Renderer.K8sApi.ResourceStack;
@ -110,7 +111,7 @@ export class MetricsFeature {
if (e?.error?.code === 404) {
status.installed = false;
} else {
console.warn("[LENS-METRICS] failed to resolve install state", e);
logger.warn("[LENS-METRICS] failed to resolve install state", e);
}
}

View File

@ -18,6 +18,7 @@
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* eslint-disable no-console */
/*
Cluster tests are run if there is a pre-existing minikube cluster. Before running cluster tests the TEST_NAMESPACE

View File

@ -18,6 +18,8 @@
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* eslint-disable no-console */
import { spawnSync } from "child_process";
export function minikubeReady(testNamespace: string): boolean {

View File

@ -22,7 +22,7 @@
import { anyObject } from "jest-mock-extended";
import { merge } from "lodash";
import mockFs from "mock-fs";
import logger from "../../main/logger";
import logger from "../logger";
import { AppPaths } from "../app-paths";
import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../catalog";
import { ClusterStore } from "../cluster-store";
@ -253,21 +253,14 @@ describe("HotbarStore", () => {
hotbarStore.add({ name: "hottest", id: "hottest" });
hotbarStore.setActiveHotbar("hottest");
const { error } = logger;
const mocked = jest.fn();
logger.error = mocked;
hotbarStore.addToHotbar(testCluster, -1);
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
hotbarStore.addToHotbar(testCluster, 12);
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
hotbarStore.addToHotbar(testCluster, 13);
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
logger.error = error;
expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
});
it("throws an error if getId is invalid or returns not a string", () => {
@ -305,12 +298,6 @@ describe("HotbarStore", () => {
});
it("throws if invalid arguments provided", () => {
// Prevent writing to stderr during this render.
const { error, warn } = console;
console.error = jest.fn();
console.warn = jest.fn();
const hotbarStore = HotbarStore.getInstance();
hotbarStore.addToHotbar(testCluster);
@ -319,10 +306,6 @@ describe("HotbarStore", () => {
expect(() => hotbarStore.restackItems(2, -1)).toThrow();
expect(() => hotbarStore.restackItems(14, 1)).toThrow();
expect(() => hotbarStore.restackItems(11, 112)).toThrow();
// Restore writing to stderr.
console.error = error;
console.warn = warn;
});
it("checks if entity already pinned to hotbar", () => {

View File

@ -25,7 +25,7 @@ import type { Options as ConfOptions } from "conf/dist/source/types";
import { ipcMain, ipcRenderer } from "electron";
import { IEqualsComparer, makeObservable, reaction, runInAction } from "mobx";
import { getAppVersion, Singleton, toJS, Disposer } from "./utils";
import logger from "../main/logger";
import logger from "./logger";
import { broadcastMessage, ipcMainOn, ipcRendererOn } from "./ipc";
import isEqual from "lodash/isEqual";
import { isTestEnv } from "./vars";
@ -75,7 +75,7 @@ export abstract class BaseStore<T> extends Singleton {
const res: any = this.fromStore(this.storeConfig.store);
if (res instanceof Promise || (typeof res === "object" && res && typeof res.then === "function")) {
console.error(`${this.displayName} extends BaseStore<T>'s fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`);
logger.error(`${this.displayName} extends BaseStore<T>'s fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`);
}
this.enableSync();

View File

@ -24,7 +24,7 @@ import { action, comparer, computed, makeObservable, observable, reaction } from
import { BaseStore } from "./base-store";
import { Cluster } from "../main/cluster";
import migrations from "../migrations/cluster-store";
import logger from "../main/logger";
import logger from "../common/logger";
import { appEventBus } from "./event-bus";
import { ipcMainHandle, requestMain } from "./ipc";
import { disposer, toJS } from "./utils";

View File

@ -20,6 +20,7 @@
*/
import esbuild from "esbuild";
import logger from "./logger";
/**
* A function returning webpack ts/tsx loader
@ -33,7 +34,7 @@ const getTSLoader = (
testRegExp: RegExp, transpileOnly = true,
) => {
if (process.env.LENS_DEV_USE_ESBUILD_LOADER === "true") {
console.info(`\n🚀 using esbuild-loader for ts(x)`);
logger.info(`🚀 using esbuild-loader for ts(x)`);
return {
test: testRegExp,

View File

@ -25,7 +25,7 @@ import migrations from "../migrations/hotbar-store";
import { toJS } from "./utils";
import { CatalogEntity } from "./catalog";
import { catalogEntity } from "../main/catalog-sources/general";
import logger from "../main/logger";
import logger from "./logger";
import { broadcastMessage, HotbarTooManyItems } from "./ipc";
import { defaultHotbarCells, getEmptyHotbar, Hotbar, CreateHotbarData, CreateHotbarOptions } from "./hotbar-types";
@ -148,7 +148,7 @@ export class HotbarStore extends BaseStore<HotbarStoreModel> {
const index = this.hotbars.findIndex((hotbar) => hotbar.id === id);
if (index < 0) {
return void console.warn(`[HOTBAR-STORE]: cannot setHotbarName: unknown id`, { id });
return void logger.warn(`[HOTBAR-STORE]: cannot setHotbarName: unknown id`, { id });
}
this.hotbars[index].name = name;

View File

@ -25,7 +25,7 @@
import { ipcMain, ipcRenderer, webContents } from "electron";
import { toJS } from "../utils/toJS";
import logger from "../../main/logger";
import logger from "../../common/logger";
import { ClusterFrameInfo, clusterFrameMap } from "../cluster-frames";
import type { Disposer } from "../utils";
import type remote from "@electron/remote";

View File

@ -21,7 +21,7 @@
import type { EventEmitter } from "events";
import { ipcMain } from "electron";
import logger from "../../main/logger";
import logger from "../../common/logger";
import type { Disposer } from "../utils";
import { ipcMainHandle } from "./ipc";

View File

@ -20,6 +20,7 @@
*/
import { anyObject } from "jest-mock-extended";
import logger from "../../logger";
import { HelmChart } from "../endpoints/helm-charts.api";
describe("HelmChart tests", () => {
@ -262,9 +263,6 @@ describe("HelmChart tests", () => {
});
it("should warn on unknown fields", () => {
const { warn } = console;
const warnFn = console.warn = jest.fn();
HelmChart.create({
apiVersion: "1",
name: "1",
@ -280,11 +278,10 @@ describe("HelmChart tests", () => {
"asdjhajksdhadjks": 1,
} as any);
expect(warnFn).toHaveBeenCalledWith("HelmChart data has unexpected fields", {
expect(logger.warn).toHaveBeenCalledWith("HelmChart data has unexpected fields", {
original: anyObject(),
unknownFields: ["asdjhajksdhadjks"],
});
console.warn = warn;
});
});
});

View File

@ -25,6 +25,7 @@ import { stringify } from "querystring";
import type { RequestInit } from "node-fetch";
import { autoBind, bifurcateArray } from "../../utils";
import Joi from "joi";
import logger from "../../logger";
export type RepoHelmChartList = Record<string, RawHelmChart[]>;
@ -321,7 +322,7 @@ export class HelmChart {
const [actualErrors, unknownDetails] = bifurcateArray(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) });
logger.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) });
}
if (actualErrors.length === 0) {
@ -334,7 +335,7 @@ export class HelmChart {
throw validationError;
}
console.warn("[HELM-CHART]: failed to validate data", data, validationError);
logger.warn("[HELM-CHART]: failed to validate data", data, validationError);
return undefined;
}

View File

@ -23,7 +23,7 @@
import { splitArray } from "../utils";
import { isDebugging } from "../vars";
import logger from "../../main/logger";
import logger from "../../common/logger";
import { inspect } from "util";
export interface IKubeObjectRef {

View File

@ -24,7 +24,7 @@
import { isFunction, merge } from "lodash";
import { stringify } from "querystring";
import { apiKubePrefix, isDevelopment } from "../../common/vars";
import logger from "../../main/logger";
import logger from "../../common/logger";
import { apiManager } from "./api-manager";
import { apiBase, apiKube } from "./index";
import { createKubeApiURL, parseKubeApi } from "./kube-api-parse";

View File

@ -35,6 +35,7 @@ import type { RequestInit } from "node-fetch";
// eslint-disable-next-line import/no-named-as-default
import AbortController from "abort-controller";
import type { Patch } from "rfc6902";
import logger from "../logger";
export interface KubeObjectStoreLoadingParams {
namespaces: string[];
@ -253,7 +254,7 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
return items;
} catch (error) {
console.warn("[KubeObjectStore] loadAll failed", this.api.apiBase, error);
logger.warn("[KubeObjectStore] loadAll failed", this.api.apiBase, error);
this.resetOnError(error);
this.failedLoading = true;
} finally {

View File

@ -86,7 +86,7 @@ class WatchCount {
const newCount = this.#data.get(store) + 1;
logger.info(`[KUBE-WATCH-API]: inc() count for ${store.api.objectConstructor.apiBase} is now ${newCount}`);
logger.debug(`[KUBE-WATCH-API]: inc() count for ${store.api.objectConstructor.apiBase} is now ${newCount}`);
this.#data.set(store, newCount);
return newCount;
@ -151,10 +151,10 @@ export class KubeWatchApi {
if (curSelectedAll && prevSelectedAll) {
const action = namespaces.length > prevNamespaces.length ? "created" : "deleted";
return console.debug(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`);
return this.log(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`);
}
console.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces);
this.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces);
childController.abort();
unsubscribe();
childController = new WrappedAbortController(parent);
@ -195,10 +195,10 @@ export class KubeWatchApi {
});
}
protected log(message: any, meta: any) {
protected log(message: any, meta: object = {}) {
const log = message instanceof Error
? console.error
: console.debug;
? logger.error
: logger.debug;
log("[KUBE-WATCH-API]:", message, {
time: new Date().toLocaleString(),

View File

@ -23,7 +23,7 @@ import path from "path";
import hb from "handlebars";
import { ResourceApplier } from "../../main/resource-applier";
import type { KubernetesCluster } from "../catalog-entities";
import logger from "../../main/logger";
import logger from "../../common/logger";
import { app } from "electron";
import { requestMain } from "../ipc";
import { clusterKubectlApplyAllHandler, clusterKubectlDeleteAllHandler } from "../cluster-ipc";

View File

@ -24,7 +24,7 @@ import fse from "fs-extra";
import path from "path";
import os from "os";
import yaml from "js-yaml";
import logger from "../main/logger";
import logger from "../common/logger";
import { Cluster, Context, newClusters, newContexts, newUsers, User } from "@kubernetes/client-node/dist/config_types";
import { resolvePath } from "./utils";
import Joi from "joi";
@ -123,10 +123,10 @@ function loadToOptions(rawYaml: string): OptionsResult {
arrays: true,
},
});
const {
clusters: rawClusters,
users: rawUsers,
contexts: rawContexts,
const {
clusters: rawClusters,
users: rawUsers,
contexts: rawContexts,
"current-context": currentContext,
} = value ?? {};
const clusters = newClusters(rawClusters);

View File

@ -19,12 +19,10 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import { app, ipcMain } from "electron";
import { app, ipcRenderer } from "electron";
import winston, { format } from "winston";
import type Transport from "winston-transport";
import { consoleFormat } from "winston-console-format";
import { isDebugging, isTestEnv } from "./vars";
import BrowserConsole from "winston-transport-browserconsole";
const logLevel = process.env.LOG_LEVEL
? process.env.LOG_LEVEL
@ -34,10 +32,34 @@ const logLevel = process.env.LOG_LEVEL
? "error"
: "info";
const transports: Transport[] = [];
interface Logger {
silly(...args: any[]): void;
warn(...args: any[]): void;
info(...args: any[]): void;
debug(...args: any[]): void;
error(...args: any[]): void;
}
if (ipcMain) {
transports.push(
function createRendererLogger(): Logger {
return {
...console,
// eslint-disable-next-line no-console
silly: (...args: any[]) => console.debug(...args),
};
}
function createUnitTestingLogger(): Logger {
return {
silly: jest.fn(),
warn: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
error: jest.fn(),
};
}
function createMainLogger(): Logger {
const transports: winston.transport[] = [
new winston.transports.Console({
handleExceptions: false,
level: logLevel,
@ -57,18 +79,14 @@ if (ipcMain) {
}),
),
}),
);
];
if (!isTestEnv) {
if (app) {
transports.push(
new winston.transports.File({
handleExceptions: false,
level: logLevel,
filename: "lens.log",
/**
* SAFTEY: the `ipcMain` check above should mean that this is only
* called in the main process
*/
dirname: app.getPath("logs"),
maxsize: 16 * 1024,
maxFiles: 16,
@ -76,11 +94,24 @@ if (ipcMain) {
}),
);
}
} else {
transports.push(new BrowserConsole());
return winston.createLogger({
format: format.simple(),
transports,
});
}
export default winston.createLogger({
format: format.simple(),
transports,
});
function createLogger(): Logger {
if (isTestEnv && !process.env.CICD) {
// CICD is present during integration tests
return createUnitTestingLogger();
}
if (ipcRenderer) {
return createRendererLogger();
}
return createMainLogger();
}
export default createLogger();

View File

@ -23,7 +23,7 @@ import { match, matchPath } from "react-router";
import { countBy } from "lodash";
import { iter } from "../utils";
import { pathToRegexp } from "path-to-regexp";
import logger from "../../main/logger";
import logger from "../../common/logger";
import type Url from "url-parse";
import { RoutingError, RoutingErrorType } from "./error";
import { ExtensionsStore } from "../../extensions/extensions-store";

View File

@ -23,6 +23,7 @@ import { isMac, isWindows } from "./vars";
import wincaAPI from "win-ca/api";
import https from "https";
import { promiseExecFile } from "./utils/promise-exec";
import logger from "./logger";
// DST Root CA X3, which was expired on 9.30.2021
export const DSTRootCAX3 = "-----BEGIN CERTIFICATE-----\nMIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/\nMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\nDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow\nPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD\nEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\nAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O\nrz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq\nOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b\nxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\n7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD\naeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\nHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG\nSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69\nikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr\nAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz\nR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5\nJDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo\nOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\n-----END CERTIFICATE-----\n";
@ -101,7 +102,7 @@ export async function injectSystemCAs() {
injectCAs(osxRootCAs);
} catch (error) {
console.warn(`[MAC-CA]: Error injecting root CAs from MacOSX. ${error?.message}`);
logger.warn(`[MAC-CA]: Error injecting root CAs from MacOSX. ${error?.message}`);
}
}
@ -112,7 +113,7 @@ export async function injectSystemCAs() {
wincaAPI.inject("+", winRootCAs);
} catch (error) {
console.warn(`[WIN-CA]: Error injecting root CAs from Windows. ${error?.message}`);
logger.warn(`[WIN-CA]: Error injecting root CAs from Windows. ${error?.message}`);
}
}
}

View File

@ -30,7 +30,7 @@ import { appEventBus } from "../event-bus";
import path from "path";
import { ObservableToggleSet, toJS } from "../../renderer/utils";
import { DESCRIPTORS, EditorConfiguration, ExtensionRegistry, KubeconfigSyncValue, UserPreferencesModel } from "./preferences-helpers";
import logger from "../../main/logger";
import logger from "../../common/logger";
import { AppPaths } from "../app-paths";
export interface UserStoreModel {

View File

@ -28,7 +28,7 @@ import os from "os";
import path from "path";
import { broadcastMessage, ipcMainHandle, ipcRendererOn, requestMain } from "../common/ipc";
import { Singleton, toJS } from "../common/utils";
import logger from "../main/logger";
import logger from "../common/logger";
import { ExtensionInstallationStateStore } from "../renderer/components/+extensions/extension-install.store";
import { extensionInstaller } from "./extension-installer";
import { ExtensionsStore } from "./extensions-store";

View File

@ -23,7 +23,7 @@ import AwaitLock from "await-lock";
import child_process from "child_process";
import fs from "fs-extra";
import path from "path";
import logger from "../main/logger";
import logger from "../common/logger";
import { extensionPackagesRoot } from "./extension-loader";
import type { PackageJson } from "type-fest";

View File

@ -27,7 +27,7 @@ import path from "path";
import { AppPaths } from "../../common/app-paths";
import { broadcastMessage, ipcMainOn, ipcRendererOn, requestMain, ipcMainHandle } from "../../common/ipc";
import { Disposer, toJS } from "../../common/utils";
import logger from "../../main/logger";
import logger from "../../common/logger";
import type { KubernetesCluster } from "../common-api/catalog";
import type { InstalledExtension } from "../extension-discovery";
import { ExtensionsStore } from "../extensions-store";
@ -360,11 +360,7 @@ export class ExtensionLoader {
try {
return __non_webpack_require__(extAbsolutePath).default;
} catch (error) {
if (ipcRenderer) {
console.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error.stack || error}`, extension);
} else {
logger.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error}`, { extension });
}
logger.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error.stack || error}`, extension);
}
return null;

View File

@ -25,7 +25,7 @@ import type { LensMainExtension } from "../lens-main-extension";
import type { Disposer } from "../../common/utils";
import { once } from "lodash";
import { ipcMainHandle } from "../../common/ipc";
import logger from "../../main/logger";
import logger from "../../common/logger";
export abstract class IpcMain extends IpcRegistrar {
constructor(extension: LensMainExtension) {

View File

@ -24,6 +24,7 @@ import { Disposers } from "../lens-extension";
import type { LensRendererExtension } from "../lens-renderer-extension";
import type { Disposer } from "../../common/utils";
import { once } from "lodash";
import logger from "../../common/logger";
export abstract class IpcRenderer extends IpcRegistrar {
constructor(extension: LensRendererExtension) {
@ -44,12 +45,12 @@ export abstract class IpcRenderer extends IpcRegistrar {
listen(channel: string, listener: (event: Electron.IpcRendererEvent, ...args: any[]) => any): Disposer {
const prefixedChannel = `extensions@${this[IpcPrefix]}:${channel}`;
const cleanup = once(() => {
console.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }});
logger.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }});
return ipcRenderer.removeListener(prefixedChannel, listener);
});
console.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }});
logger.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }});
ipcRenderer.addListener(prefixedChannel, listener);
this.extension[Disposers].push(cleanup);

View File

@ -22,7 +22,7 @@
import type { InstalledExtension } from "./extension-discovery";
import { action, observable, makeObservable, computed } from "mobx";
import { FilesystemProvisionerStore } from "../main/extension-filesystem";
import logger from "../main/logger";
import logger from "../common/logger";
import type { ProtocolHandlerRegistration } from "./registries";
import type { PackageJson } from "type-fest";
import { Disposer, disposer } from "../common/utils";

View File

@ -19,31 +19,6 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
const logger = {
silly: jest.fn(),
debug: jest.fn(),
log: jest.fn(),
info: jest.fn(),
error: jest.fn(),
crit: jest.fn(),
};
jest.mock("winston", () => ({
format: {
colorize: jest.fn(),
combine: jest.fn(),
simple: jest.fn(),
label: jest.fn(),
timestamp: jest.fn(),
printf: jest.fn(),
},
createLogger: jest.fn().mockReturnValue(logger),
transports: {
Console: jest.fn(),
File: jest.fn(),
},
}));
jest.mock("../../common/ipc");
jest.mock("../context-handler");
jest.mock("request");

View File

@ -19,31 +19,6 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
jest.mock("winston", () => ({
format: {
colorize: jest.fn(),
combine: jest.fn(),
simple: jest.fn(),
label: jest.fn(),
timestamp: jest.fn(),
printf: jest.fn(),
padLevels: jest.fn(),
ms: jest.fn(),
},
createLogger: jest.fn().mockReturnValue({
silly: jest.fn(),
debug: jest.fn(),
log: jest.fn(),
info: jest.fn(),
error: jest.fn(),
crit: jest.fn(),
}),
transports: {
Console: jest.fn(),
File: jest.fn(),
},
}));
jest.mock("../../common/ipc");
jest.mock("child_process");
jest.mock("tcp-port-used");

View File

@ -19,33 +19,6 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
const logger = {
silly: jest.fn(),
debug: jest.fn(),
log: jest.fn(),
info: jest.fn(),
error: jest.fn(),
crit: jest.fn(),
};
jest.mock("winston", () => ({
format: {
colorize: jest.fn(),
combine: jest.fn(),
simple: jest.fn(),
label: jest.fn(),
timestamp: jest.fn(),
padLevels: jest.fn(),
ms: jest.fn(),
printf: jest.fn(),
},
createLogger: jest.fn().mockReturnValue(logger),
transports: {
Console: jest.fn(),
File: jest.fn(),
},
}));
import { KubeconfigManager } from "../kubeconfig-manager";
import mockFs from "mock-fs";
import { Cluster } from "../cluster";
@ -123,7 +96,6 @@ describe("kubeconfig manager tests", () => {
it("should create 'temp' kube config with proxy", async () => {
const kubeConfManager = new KubeconfigManager(cluster, contextHandler);
expect(logger.error).not.toBeCalled();
expect(await kubeConfManager.getPath()).toBe(`tmp${path.sep}kubeconfig-foo`);
// this causes an intermittent "ENXIO: no such device or address, read" error
// const file = await fse.readFile(await kubeConfManager.getPath());

View File

@ -19,14 +19,28 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import packageInfo from "../../package.json";
import packageInfo from "../../../package.json";
import path from "path";
import { Kubectl } from "../../src/main/kubectl";
import { isWindows } from "../common/vars";
import { Kubectl } from "../kubectl";
import { isWindows } from "../../common/vars";
import { UserStore } from "../../common/user-store";
jest.mock("../common/user-store");
jest.mock("../../common/app-paths", () => ({
AppPaths: {
get: () => "tmp",
getAsync: () => "tmp",
},
}));
describe("kubectlVersion", () => {
beforeEach(() => {
UserStore.createInstance();
});
afterEach(() => {
UserStore.resetInstance();
});
it("returns bundled version if exactly same version used", async () => {
const kubectl = new Kubectl(Kubectl.bundled().kubectlVersion);
@ -42,6 +56,14 @@ describe("kubectlVersion", () => {
});
describe("getPath()", () => {
beforeEach(() => {
UserStore.createInstance();
});
afterEach(() => {
UserStore.resetInstance();
});
it("returns path to downloaded kubectl binary", async () => {
const { bundledKubectlVersion } = packageInfo.config;
const kubectl = new Kubectl(bundledKubectlVersion);
@ -61,12 +83,7 @@ describe("getPath()", () => {
const kubectl = new Kubectl(bundledKubectlVersion);
jest.spyOn(kubectl, "getBundledPath").mockReturnValue("/invalid/path/kubectl");
const kubectlPath = await kubectl.getPath();
let binaryName = "kubectl";
if (isWindows) {
binaryName += ".exe";
}
expect(kubectlPath).toBe(binaryName);
expect(await kubectl.getPath()).toBe("kubectl");
});
});

View File

@ -20,7 +20,7 @@
*/
import { autoUpdater, UpdateInfo } from "electron-updater";
import logger from "./logger";
import logger from "../common/logger";
import { isLinux, isMac, isPublishConfigured, isTestEnv } from "../common/vars";
import { delay } from "../common/utils";
import { areArgsUpdateAvailableToBackchannel, AutoUpdateChecking, AutoUpdateLogPrefix, AutoUpdateNoUpdateAvailable, broadcastMessage, onceCorrect, UpdateAvailableChannel, UpdateAvailableToBackchannel } from "../common/ipc";

View File

@ -27,7 +27,7 @@ import fs from "fs";
import path from "path";
import type stream from "stream";
import { bytesToUnits, Disposer, ExtendedObservableMap, iter, noop, Singleton, storedKubeConfigFolder } from "../../common/utils";
import logger from "../logger";
import logger from "../../common/logger";
import type { KubeConfig } from "@kubernetes/client-node";
import { loadConfigFromString, splitConfig } from "../../common/kube-helpers";
import { Cluster } from "../cluster";
@ -370,8 +370,7 @@ function watchFileChanges(filePath: string): [IComputedValue<CatalogEntity[]>, D
})
.on("error", error => logger.error(`${logPrefix} watching file/folder failed: ${error}`, { filePath }));
} catch (error) {
console.log(error.stack);
logger.warn(`${logPrefix} failed to start watching changes: ${error}`);
logger.warn(`${logPrefix} failed to start watching changes:`, error);
}
})();

View File

@ -23,7 +23,7 @@ import "../common/cluster-ipc";
import type http from "http";
import { action, makeObservable, observable, observe, reaction, toJS } from "mobx";
import { Cluster } from "./cluster";
import logger from "./logger";
import logger from "../common/logger";
import { apiKubePrefix } from "../common/vars";
import { getClusterIdFromHost, Singleton } from "../common/utils";
import { catalogEntityRegistry } from "./catalog";

View File

@ -28,7 +28,7 @@ import { Kubectl } from "./kubectl";
import { KubeconfigManager } from "./kubeconfig-manager";
import { loadConfigFromFile, loadConfigFromFileSync, validateKubeConfig } from "../common/kube-helpers";
import { apiResourceRecord, apiResources, KubeApiResource, KubeResource } from "../common/rbac";
import logger from "./logger";
import logger from "../common/logger";
import { VersionDetector } from "./cluster-detectors/version-detector";
import { DetectorRegistry } from "./cluster-detectors/detector-registry";
import plimit from "p-limit";

View File

@ -26,7 +26,7 @@ import type { Cluster } from "./cluster";
import type httpProxy from "http-proxy";
import url, { UrlWithStringQuery } from "url";
import { CoreV1Api } from "@kubernetes/client-node";
import logger from "./logger";
import logger from "../common/logger";
import { KubeAuthProxy } from "./kube-auth-proxy";
export interface PrometheusDetails {

View File

@ -19,7 +19,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "./logger";
import logger from "../common/logger";
/**
* Installs Electron developer tools in the development build.

View File

@ -23,7 +23,7 @@ import { app } from "electron";
import { WindowManager } from "./window-manager";
import { appEventBus } from "../common/event-bus";
import { ClusterManager } from "./cluster-manager";
import logger from "./logger";
import logger from "../common/logger";
export function exitApp() {
const windowManager = WindowManager.getInstance(false);

View File

@ -23,7 +23,7 @@ import fs from "fs";
import v8 from "v8";
import * as yaml from "js-yaml";
import type { HelmRepo } from "./helm-repo-manager";
import logger from "../logger";
import logger from "../../common/logger";
import { promiseExecFile } from "../../common/utils/promise-exec";
import { helmCli } from "./helm-cli";
import type { RepoHelmChartList } from "../../common/k8s-api/endpoints/helm-charts.api";

View File

@ -26,7 +26,7 @@ import { helmCli } from "./helm-cli";
import { Singleton } from "../../common/utils/singleton";
import { customRequestPromise } from "../../common/request";
import orderBy from "lodash/orderBy";
import logger from "../logger";
import logger from "../../common/logger";
import type { ExecFileOptions } from "child_process";
export type HelmEnv = Record<string, string> & {
@ -79,7 +79,6 @@ export class HelmRepoManager extends Singleton {
}
private async init() {
helmCli.setLogger(logger);
await helmCli.ensureBinary();
if (!this.initialized) {

View File

@ -20,7 +20,7 @@
*/
import type { Cluster } from "../cluster";
import logger from "../logger";
import logger from "../../common/logger";
import { HelmRepoManager } from "./helm-repo-manager";
import { HelmChartManager } from "./helm-chart-manager";
import { deleteRelease, getHistory, getRelease, getValues, installChart, listReleases, rollback, upgradeRelease } from "./helm-release-manager";

View File

@ -34,7 +34,7 @@ import { ClusterManager } from "./cluster-manager";
import { shellSync } from "./shell-sync";
import { mangleProxyEnv } from "./proxy-env";
import { registerFileProtocol } from "../common/register-protocol";
import logger from "./logger";
import logger from "../common/logger";
import { appEventBus } from "../common/event-bus";
import { InstalledExtension, ExtensionDiscovery } from "../extensions/extension-discovery";
import type { LensExtensionId } from "../extensions/lens-extension";
@ -285,8 +285,7 @@ app.on("ready", async () => {
extensionLoader.initExtensions(extensions);
} catch (error) {
dialog.showErrorBox("Lens Error", `Could not load extensions${error?.message ? `: ${error.message}` : ""}`);
console.error(error);
console.trace();
logger.error(`Could not load extensions`, error);
}
setTimeout(() => {

View File

@ -24,7 +24,7 @@ import { waitUntilUsed } from "tcp-port-used";
import { randomBytes } from "crypto";
import type { Cluster } from "./cluster";
import { Kubectl } from "./kubectl";
import logger from "./logger";
import logger from "../common/logger";
import * as url from "url";
import { getPortFrom } from "./utils/get-port";
import { makeObservable, observable, when } from "mobx";

View File

@ -25,7 +25,7 @@ import type { ContextHandler } from "./context-handler";
import path from "path";
import fs from "fs-extra";
import { dumpConfigYaml } from "../common/kube-helpers";
import logger from "./logger";
import logger from "../common/logger";
import { LensProxy } from "./lens-proxy";
import { AppPaths } from "../common/app-paths";

View File

@ -22,7 +22,7 @@
import path from "path";
import fs from "fs";
import { promiseExecFile } from "../common/utils/promise-exec";
import logger from "./logger";
import logger from "../common/logger";
import { ensureDir, pathExists } from "fs-extra";
import * as lockFile from "proper-lockfile";
import { helmCli } from "./helm/helm-cli";

View File

@ -25,7 +25,7 @@ import request from "request";
import { ensureDir, pathExists } from "fs-extra";
import * as tar from "tar";
import { isWindows } from "../common/vars";
import type winston from "winston";
import logger from "../common/logger";
export type LensBinaryOpts = {
version: string;
@ -48,7 +48,6 @@ export class LensBinary {
protected arch: string;
protected originalBinaryName: string;
protected requestOpts: request.Options;
protected logger: Console | winston.Logger;
constructor(opts: LensBinaryOpts) {
const baseDir = opts.baseDir;
@ -57,7 +56,6 @@ export class LensBinary {
this.binaryName = opts.newBinaryName || opts.originalBinaryName;
this.binaryVersion = opts.version;
this.requestOpts = opts.requestOpts;
this.logger = console;
let arch = null;
if (process.env.BINARY_ARCH) {
@ -84,10 +82,6 @@ export class LensBinary {
}
}
public setLogger(logger: Console | winston.Logger) {
this.logger = logger;
}
protected binaryDir() {
throw new Error("binaryDir not implemented");
}
@ -124,7 +118,7 @@ export class LensBinary {
return this.dirname;
} catch (err) {
this.logger.error(err);
logger.error(err);
return "";
}
@ -141,17 +135,17 @@ export class LensBinary {
if (!isValid) {
await this.downloadBinary().catch((error) => {
this.logger.error(error);
logger.error(error);
});
if (this.tarPath) await this.untarBinary();
if (this.originalBinaryName != this.binaryName) await this.renameBinary();
this.logger.info(`${this.originalBinaryName} has been downloaded to ${this.getBinaryPath()}`);
logger.info(`${this.originalBinaryName} has been downloaded to ${this.getBinaryPath()}`);
}
}
protected async untarBinary() {
return new Promise<void>(resolve => {
this.logger.debug(`Extracting ${this.originalBinaryName} binary`);
logger.debug(`Extracting ${this.originalBinaryName} binary`);
tar.x({
file: this.tarPath,
cwd: this.dirname,
@ -163,7 +157,7 @@ export class LensBinary {
protected async renameBinary() {
return new Promise<void>((resolve, reject) => {
this.logger.debug(`Renaming ${this.originalBinaryName} binary to ${this.binaryName}`);
logger.debug(`Renaming ${this.originalBinaryName} binary to ${this.binaryName}`);
fs.rename(this.getOriginalBinaryPath(), this.getBinaryPath(), (err) => {
if (err) {
reject(err);
@ -183,7 +177,7 @@ export class LensBinary {
const file = fs.createWriteStream(binaryPath);
const url = this.getUrl();
this.logger.info(`Downloading ${this.originalBinaryName} ${this.binaryVersion} from ${url} to ${binaryPath}`);
logger.info(`Downloading ${this.originalBinaryName} ${this.binaryVersion} from ${url} to ${binaryPath}`);
const requestOpts: request.UriOptions & request.CoreOptions = {
uri: url,
gzip: true,
@ -192,12 +186,12 @@ export class LensBinary {
const stream = request(requestOpts);
stream.on("complete", () => {
this.logger.info(`Download of ${this.originalBinaryName} finished`);
logger.info(`Download of ${this.originalBinaryName} finished`);
file.end();
});
stream.on("error", (error) => {
this.logger.error(error);
logger.error(error);
fs.unlink(binaryPath, () => {
// do nothing
});
@ -206,7 +200,7 @@ export class LensBinary {
return new Promise<void>((resolve, reject) => {
file.on("close", () => {
this.logger.debug(`${this.originalBinaryName} binary download closed`);
logger.debug(`${this.originalBinaryName} binary download closed`);
if (!this.tarPath) fs.chmod(binaryPath, 0o755, (err) => {
if (err) reject(err);
});

View File

@ -26,7 +26,7 @@ import httpProxy from "http-proxy";
import { apiPrefix, apiKubePrefix } from "../common/vars";
import type { Router } from "./router";
import type { ContextHandler } from "./context-handler";
import logger from "./logger";
import logger from "../common/logger";
import { Singleton } from "../common/utils";
import type { Cluster } from "./cluster";
import type { ProxyApiRequestArgs } from "./proxy-functions";

View File

@ -1,24 +0,0 @@
/**
* Copyright (c) 2021 OpenLens Authors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "../common/logger";
export default logger;

View File

@ -22,7 +22,7 @@ import { app, BrowserWindow, dialog, Menu, MenuItem, MenuItemConstructorOptions,
import { autorun, IComputedValue } from "mobx";
import type { WindowManager } from "../window-manager";
import { appName, isMac, isWindows, docsUrl, supportUrl, productName } from "../../common/vars";
import logger from "../logger";
import logger from "../../common/logger";
import { exitApp } from "../exit-app";
import { broadcastMessage } from "../../common/ipc";
import * as packageJson from "../../../package.json";

View File

@ -19,7 +19,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "../../logger";
import logger from "../../../common/logger";
import * as proto from "../../../common/protocol-handler";
import URLParse from "url-parse";
import type { LensExtension } from "../../../extensions/lens-extension";

View File

@ -19,7 +19,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "../logger";
import logger from "../../common/logger";
import { Server as WebSocketServer } from "ws";
import { NodeShellSession, LocalShellSession } from "../shell-session";
import type { ProxyApiRequestArgs } from "./types";

View File

@ -25,8 +25,8 @@ import { exec } from "child_process";
import fs from "fs-extra";
import * as yaml from "js-yaml";
import path from "path";
import tempy from "tempy";
import logger from "./logger";
import * as tempy from "tempy";
import logger from "../common/logger";
import { appEventBus } from "../common/event-bus";
import { cloneJsonObject } from "../common/utils";
import type { Patch } from "rfc6902";

View File

@ -27,7 +27,7 @@ import { readFile } from "fs-extra";
import type { Cluster } from "./cluster";
import { apiPrefix, appName, publicPath, isDevelopment, webpackDevServerPort } from "../common/vars";
import { HelmApiRoute, KubeconfigRoute, MetricsRoute, PortForwardRoute, ResourceApplierApiRoute, VersionRoute } from "./routes";
import logger from "./logger";
import logger from "../common/logger";
export interface RouterRequestOpts {
req: http.IncomingMessage;

View File

@ -21,7 +21,7 @@
import type { LensApiRequest } from "../router";
import { helmService } from "../helm/helm-service";
import logger from "../logger";
import logger from "../../common/logger";
import { respondJson, respondText } from "../utils/http-responses";
import { getBoolean } from "../utils/parse-query";

View File

@ -23,7 +23,7 @@ import type { LensApiRequest } from "../router";
import { respondJson } from "../utils/http-responses";
import type { Cluster } from "../cluster";
import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../common/cluster-types";
import logger from "../logger";
import logger from "../../common/logger";
import { getMetrics } from "../k8s-request";
import { PrometheusProviderRegistry } from "../prometheus";

View File

@ -23,7 +23,7 @@ import type { LensApiRequest } from "../router";
import { spawn, ChildProcessWithoutNullStreams } from "child_process";
import { Kubectl } from "../kubectl";
import * as tcpPortUsed from "tcp-port-used";
import logger from "../logger";
import logger from "../../common/logger";
import { getPortFrom } from "../utils/get-port";
import { respondJson } from "../utils/http-responses";
@ -138,10 +138,10 @@ export class PortForwardRoute {
if (!portForward) {
logger.info(`Creating a new port-forward ${namespace}/${resourceType}/${resourceName}:${port}`);
const thePort = 0 < forwardPort && forwardPort < 65536
? forwardPort
const thePort = 0 < forwardPort && forwardPort < 65536
? forwardPort
: 0;
portForward = new PortForward(await cluster.getProxyKubeconfigPath(), {
clusterId: cluster.id,
kind: resourceType,

View File

@ -28,7 +28,7 @@ import { ShellOpenError, ShellSession } from "./shell-session";
import { get } from "lodash";
import { Node, NodesApi } from "../../common/k8s-api/endpoints";
import { KubeJsonApi } from "../../common/k8s-api/kube-json-api";
import logger from "../logger";
import logger from "../../common/logger";
import { TerminalChannels } from "../../renderer/api/terminal-api";
export class NodeShellSession extends ShellSession {

View File

@ -31,7 +31,7 @@ import { isMac, isWindows } from "../../common/vars";
import { UserStore } from "../../common/user-store";
import * as pty from "node-pty";
import { appEventBus } from "../../common/event-bus";
import logger from "../logger";
import logger from "../../common/logger";
import { TerminalChannels, TerminalMessage } from "../../renderer/api/terminal-api";
import { deserialize, serialize } from "v8";
import { stat } from "fs/promises";

View File

@ -22,7 +22,7 @@
import { shellEnv } from "./utils/shell-env";
import os from "os";
import { app } from "electron";
import logger from "./logger";
import logger from "../common/logger";
import { isSnap } from "../common/vars";
/**

View File

@ -26,7 +26,7 @@ import { autorun, IComputedValue } from "mobx";
import { showAbout } from "../menu/menu";
import { checkForUpdates, isAutoUpdateEnabled } from "../app-updater";
import type { WindowManager } from "../window-manager";
import logger from "../logger";
import logger from "../../common/logger";
import { isDevelopment, isWindows, productName } from "../../common/vars";
import { exitApp } from "../exit-app";
import { preferencesURL } from "../../common/routes";

View File

@ -21,7 +21,7 @@
import type { Readable } from "stream";
import URLParse from "url-parse";
import logger from "../logger";
import logger from "../../common/logger";
interface GetPortArgs {
/**

View File

@ -20,7 +20,7 @@
*/
import shellEnvironment from "shell-env";
import logger from "../logger";
import logger from "../../common/logger";
export type EnvironmentVariables = Record<string, string>;

View File

@ -28,7 +28,7 @@ import { BundledExtensionsLoaded, ipcMainOn } from "../common/ipc";
import { delay, iter, Singleton } from "../common/utils";
import { ClusterFrameInfo, clusterFrameMap } from "../common/cluster-frames";
import { IpcRendererNavigationEvents } from "../renderer/navigation/events";
import logger from "./logger";
import logger from "../common/logger";
import { isMac, productName } from "../common/vars";
import { LensProxy } from "./lens-proxy";

View File

@ -21,13 +21,11 @@
import type Conf from "conf";
import type { Migrations } from "conf/dist/source/types";
import logger from "../common/logger";
import { ExtendedMap, iter } from "../common/utils";
import { isTestEnv } from "../common/vars";
export function migrationLog(...args: any[]) {
if (!isTestEnv) {
console.log(...args);
}
logger.info(...args);
}
export interface MigrationDeclaration {

View File

@ -24,6 +24,7 @@ import EventEmitter from "events";
import type TypedEventEmitter from "typed-emitter";
import type { Arguments } from "typed-emitter";
import { isDevelopment } from "../../common/vars";
import logger from "../../common/logger";
interface WebsocketApiParams {
/**
@ -136,7 +137,7 @@ export class WebSocketApi<Events extends WebSocketEvents> extends (EventEmitter
reconnect(): void {
if (!this.socket) {
return void console.error("[WEBSOCKET-API]: cannot reconnect to a socket that is not connected");
return void logger.error("[WEBSOCKET-API]: cannot reconnect to a socket that is not connected");
}
this.connect(this.socket.url);
@ -214,7 +215,7 @@ export class WebSocketApi<Events extends WebSocketEvents> extends (EventEmitter
protected writeLog(...data: any[]) {
if (this.params.logging) {
console.debug(...data);
logger.debug(...data);
}
}
}

View File

@ -31,7 +31,7 @@ import { DeploymentScaleDialog } from "./components/+workloads-deployments/deplo
import { CronJobTriggerDialog } from "./components/+workloads-cronjobs/cronjob-trigger-dialog";
import { CustomResources } from "./components/+custom-resources/custom-resources";
import { isAllowedResource } from "../common/utils/allowed-resource";
import logger from "../main/logger";
import logger from "../common/logger";
import { webFrame } from "electron";
import { ClusterPageRegistry, getExtensionPageUrl } from "../extensions/registries/page-registry";
import type { ExtensionLoader } from "../extensions/extension-loader";
@ -108,7 +108,7 @@ export class ClusterFrame extends React.Component {
{
timeout: 15_000,
onError: (error) => {
console.warn("[CLUSTER-FRAME]: error from activeEntity when()", error);
logger.warn("[CLUSTER-FRAME]: error from activeEntity when()", error);
Notifications.error("Failed to get KubernetesCluster for this view. Extensions will not be loaded.");
},
},

View File

@ -28,6 +28,7 @@ import type { Secret } from "../../../common/k8s-api/endpoints";
import { secretsStore } from "../+config-secrets/secrets.store";
import { namespaceStore } from "../+namespaces/namespace.store";
import { Notifications } from "../notifications";
import logger from "../../../common/logger";
export class ReleaseStore extends ItemStore<HelmRelease> {
releaseSecrets = observable.map<string, Secret>();
@ -95,7 +96,7 @@ export class ReleaseStore extends ItemStore<HelmRelease> {
this.failedLoading = false;
} catch (error) {
this.failedLoading = true;
console.warn("Loading Helm Chart releases has failed", error);
logger.warn("Loading Helm Chart releases has failed", error);
if (error.error) {
Notifications.error(error.error);

View File

@ -46,6 +46,7 @@ import { HotbarToggleMenuItem } from "./hotbar-toggle-menu-item";
import { Avatar } from "../avatar";
import { KubeObject } from "../../../common/k8s-api/kube-object";
import { getLabelBadges } from "./helpers";
import logger from "../../../common/logger";
export const previousActiveTab = createStorage("catalog-previous-active-tab", browseCatalogTab);
@ -105,7 +106,7 @@ export class Catalog extends React.Component<Props> {
this.catalogEntityStore.activeCategory = item;
});
} catch (error) {
console.error(error);
logger.error(`[CATALOG]: Unknown category for ${routeTab}:`, error);
Notifications.error(<p>Unknown category: {routeTab}</p>);
}
}, { fireImmediately: true }),

View File

@ -28,6 +28,7 @@ import { SemVer } from "semver";
import URLParse from "url-parse";
import type { InstallRequest } from "../attempt-install/install-request";
import lodash from "lodash";
import logger from "../../../../common/logger";
export interface ExtensionInfo {
name: string;
@ -63,10 +64,10 @@ export const attemptInstallByInfo = ({ attemptInstall, getBaseRegistryUrl }: Dep
} catch (error) {
if (error instanceof SyntaxError) {
// assume invalid JSON
console.warn("Set registry has invalid json", { url: baseUrl }, error);
logger.warn("Set registry has invalid json", { url: baseUrl }, error);
Notifications.error("Failed to get valid registry information for that extension. Registry did not return valid JSON");
} else {
console.error("Failed to download registry information", error);
logger.error("Failed to download registry information", error);
Notifications.error(`Failed to get valid registry information for that extension. ${error}`);
}

View File

@ -21,7 +21,7 @@
import { validatePackage } from "../validate-package/validate-package";
import { ExtensionDiscovery } from "../../../../../extensions/extension-discovery";
import { getMessageFromError } from "../../get-message-from-error/get-message-from-error";
import logger from "../../../../../main/logger";
import logger from "../../../../../common/logger";
import { Notifications } from "../../../notifications";
import path from "path";
import fse from "fs-extra";

View File

@ -22,7 +22,7 @@ import type { InstallRequestValidated } from "../create-temp-files-and-validate/
import { Disposer, extractTar, noop } from "../../../../../common/utils";
import { ExtensionInstallationStateStore } from "../../extension-install.store";
import { extensionDisplayName } from "../../../../../extensions/lens-extension";
import logger from "../../../../../main/logger";
import logger from "../../../../../common/logger";
import type { ExtensionLoader } from "../../../../../extensions/extension-loader";
import { Notifications } from "../../../notifications";
import { getMessageFromError } from "../../get-message-from-error/get-message-from-error";

View File

@ -20,7 +20,7 @@
*/
import { action, computed, observable } from "mobx";
import logger from "../../../main/logger";
import logger from "../../../common/logger";
import { disposer } from "../../utils";
import type { ExtendableDisposer } from "../../utils";
import * as uuid from "uuid";

View File

@ -20,6 +20,7 @@
*/
import React from "react";
import logger from "../../../../common/logger";
import { defaultExtensionRegistryUrl, ExtensionRegistry, ExtensionRegistryLocation } from "../../../../common/user-store/preferences-helpers";
import { promiseExecFile } from "../../../utils";
import { Notifications } from "../../notifications";
@ -46,7 +47,7 @@ export const getBaseRegistryUrl = ({ getRegistryUrlPreference }: Dependencies) =
return stdout.trim();
} catch (error) {
Notifications.error(<p>Failed to get configured registry from <code>.npmrc</code>. Falling back to default registry</p>);
console.warn("[EXTENSIONS]: failed to get configured registry from .npmrc", error);
logger.warn("[EXTENSIONS]: failed to get configured registry from .npmrc", error);
}
// fallthrough
}

View File

@ -22,7 +22,7 @@ import { downloadFile, ExtendableDisposer } from "../../../../common/utils";
import { InputValidators } from "../../input";
import { ExtensionInstallationStateStore } from "../extension-install.store";
import { getMessageFromError } from "../get-message-from-error/get-message-from-error";
import logger from "../../../../main/logger";
import logger from "../../../../common/logger";
import { Notifications } from "../../notifications";
import path from "path";
import React from "react";

View File

@ -18,7 +18,7 @@
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "../../../../main/logger";
import logger from "../../../../common/logger";
interface Dependencies {
attemptInstalls: (filePaths: string[]) => Promise<void>;

View File

@ -20,7 +20,7 @@
*/
import fse from "fs-extra";
import { getMessageFromError } from "../get-message-from-error/get-message-from-error";
import logger from "../../../../main/logger";
import logger from "../../../../common/logger";
import { Notifications } from "../../notifications";
export const readFileNotify = async (filePath: string, showError = true): Promise<Buffer | null> => {

View File

@ -20,7 +20,7 @@
*/
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
import { extensionDisplayName, LensExtensionId } from "../../../../extensions/lens-extension";
import logger from "../../../../main/logger";
import logger from "../../../../common/logger";
import { ExtensionInstallationStateStore } from "../extension-install.store";
import { ExtensionDiscovery } from "../../../../extensions/extension-discovery";
import { Notifications } from "../../notifications";

View File

@ -26,7 +26,7 @@ import { Notice } from "../+extensions/notice";
import { KubeconfigSyncEntry, KubeconfigSyncValue, UserStore } from "../../../common/user-store";
import { isWindows } from "../../../common/vars";
import logger from "../../../main/logger";
import logger from "../../../common/logger";
import { iter, multiSet } from "../../utils";
import { SubTitle } from "../layout/sub-title";
import { PathPicker } from "../path-picker/path-picker";

View File

@ -26,6 +26,7 @@ import { autoBind, cpuUnitsToNumber, unitsToBytes } from "../../utils";
import { Pod, PodMetrics, podMetricsApi, podsApi } from "../../../common/k8s-api/endpoints";
import { apiManager } from "../../../common/k8s-api/api-manager";
import type { WorkloadKubeObject } from "../../../common/k8s-api/workload-kube-object";
import logger from "../../../common/logger";
export class PodsStore extends KubeObjectStore<Pod> {
api = podsApi;
@ -43,7 +44,7 @@ export class PodsStore extends KubeObjectStore<Pod> {
try {
this.kubeMetrics.replace(await podMetricsApi.list({ namespace }));
} catch (error) {
console.warn("loadKubeMetrics failed", error);
logger.warn("loadKubeMetrics failed", error);
}
}

View File

@ -20,7 +20,7 @@
*/
import { action, IReactionDisposer, makeObservable, observable, when } from "mobx";
import logger from "../../../main/logger";
import logger from "../../../common/logger";
import { clusterVisibilityHandler } from "../../../common/cluster-ipc";
import { ClusterStore } from "../../../common/cluster-store";
import type { ClusterId } from "../../../common/cluster-types";

View File

@ -35,6 +35,7 @@ import { orderBy } from "lodash";
import { withInjectables } from "@ogre-tools/injectable-react";
import registeredCommandsInjectable from "./registered-commands/registered-commands.injectable";
import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
import logger from "../../../common/logger";
interface Dependencies {
commands: IComputedValue<Map<string, RegisteredCommand>>;
@ -67,7 +68,7 @@ const NonInjectedCommandDialog = observer(({ commands, activeEntity, closeComman
},
});
} catch (error) {
console.error("[COMMAND-DIALOG] failed to execute command", command.id, error);
logger.error("[COMMAND-DIALOG] failed to execute command", command.id, error);
}
};
@ -78,7 +79,7 @@ const NonInjectedCommandDialog = observer(({ commands, activeEntity, closeComman
try {
return command.isActive(context);
} catch (error) {
console.error(`[COMMAND-DIALOG]: isActive for ${command.id} threw an error, defaulting to false`, error);
logger.error(`[COMMAND-DIALOG]: isActive for ${command.id} threw an error, defaulting to false`, error);
}
return false;

View File

@ -26,6 +26,7 @@ import { TerminalApi, TerminalChannels } from "../../api/terminal-api";
import { dockStore, DockTab, DockTabCreateSpecific, TabId, TabKind } from "./dock.store";
import { WebSocketApiState } from "../../api/websocket-api";
import { Notifications } from "../notifications";
import logger from "../../../common/logger";
export interface ITerminalTab extends DockTab {
node?: string; // activate node shell mode
@ -146,7 +147,7 @@ export class TerminalStore extends Singleton {
data: command,
});
} else {
console.warn("The selected tab is does not have a connection. Cannot send command.", { tabId: dockStore.selectedTabId, command });
logger.warn("The selected tab is does not have a connection. Cannot send command.", { tabId: dockStore.selectedTabId, command });
}
}

View File

@ -24,7 +24,7 @@ import React from "react";
import { boundMethod, cssNames, IClassName } from "../../utils";
import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react";
import logger from "../../../main/logger";
import logger from "../../../common/logger";
export interface DropFileInputProps extends React.DOMAttributes<any> {
className?: IClassName;

View File

@ -18,6 +18,7 @@
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import logger from "../../../common/logger";
import { createPageParam, navigation } from "../../navigation";
/**
@ -62,7 +63,7 @@ export function hideDetails() {
}
export function getDetailsUrl(selfLink: string, resetSelected = false, mergeGlobals = true) {
console.debug("getDetailsUrl", { selfLink, resetSelected, mergeGlobals });
logger.debug("getDetailsUrl", { selfLink, resetSelected, mergeGlobals });
const params = new URLSearchParams(mergeGlobals ? navigation.searchParams : "");
params.set(kubeDetailsUrlParam.name, selfLink);

View File

@ -31,6 +31,7 @@ import { apiManager } from "../../../common/k8s-api/api-manager";
import { crdStore } from "../+custom-resources/crd.store";
import { KubeObjectMenu } from "../kube-object-menu";
import { KubeObjectDetailRegistry } from "../../api/kube-object-detail-registry";
import logger from "../../../common/logger";
import { CrdResourceDetails } from "../+custom-resources";
import { KubeObjectMeta } from "../kube-object-meta";
import { hideDetails, kubeDetailsUrlParam } from "../kube-detail-params";
@ -61,7 +62,7 @@ export class KubeObjectDetails extends React.Component {
.getStore(this.path)
?.getByPath(this.path);
} catch (error) {
console.error(`[KUBE-OBJECT-DETAILS]: failed to get store or object: ${error}`, { path: this.path });
logger.error(`[KUBE-OBJECT-DETAILS]: failed to get store or object: ${error}`, { path: this.path });
return undefined;
}

View File

@ -43,6 +43,7 @@ import { Config } from "../+config";
import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
import { SidebarCluster } from "./sidebar-cluster";
import { kubeWatchApi } from "../../../common/k8s-api/kube-watch-api";
import logger from "../../../common/logger";
interface Props {
className?: string;
@ -127,7 +128,7 @@ export class Sidebar extends React.Component<Props> {
const { extensionId, id: pageId, url, components } = page;
if (subMenu.components.Icon) {
console.warn(
logger.warn(
"ClusterPageMenuRegistration has components.Icon defined and a valid parentId. Icon will not be displayed",
{
id: subMenu.id,

View File

@ -30,6 +30,7 @@ import { debounce, merge } from "lodash";
import { cssNames, disposer } from "../../utils";
import { UserStore } from "../../../common/user-store";
import { ThemeStore } from "../../theme.store";
import logger from "../../../common/logger";
export type MonacoEditorId = string;
@ -70,11 +71,6 @@ export class MonacoEditor extends React.Component<MonacoEditorProps> {
public staticId = `editor-id#${Math.round(1e7 * Math.random())}`;
public dispose = disposer();
// TODO: investigate how to replace with "common/logger"
// currently leads for stucking UI forever & infinite loop.
// e.g. happens on tab change/create, maybe some other cases too.
logger = console;
@observable.ref containerElem: HTMLElement;
@observable.ref editor: editor.IStandaloneCodeEditor;
@observable dimensions: { width?: number, height?: number } = {};
@ -137,7 +133,7 @@ export class MonacoEditor extends React.Component<MonacoEditorProps> {
}
onModelChange = (model: editor.ITextModel, oldModel?: editor.ITextModel) => {
this.logger?.info("[MONACO]: model change", { model, oldModel }, this.logMetadata);
logger.info("[MONACO]: model change", { model, oldModel }, this.logMetadata);
if (oldModel) {
this.saveViewState(oldModel);
@ -171,9 +167,9 @@ export class MonacoEditor extends React.Component<MonacoEditorProps> {
componentDidMount() {
try {
this.createEditor();
this.logger?.info(`[MONACO]: editor did mount`, this.logMetadata);
logger.info(`[MONACO]: editor did mount`, this.logMetadata);
} catch (error) {
this.logger?.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata);
logger.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata);
}
}
@ -199,7 +195,7 @@ export class MonacoEditor extends React.Component<MonacoEditorProps> {
...this.options,
});
this.logger?.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata);
logger.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata);
this.validateLazy(); // validate initial value
this.restoreViewState(this.model); // restore previous state if any

View File

@ -78,19 +78,11 @@ describe("<ScrollSpy/>", () => {
});
it("throws if no sections founded", () => {
// Prevent writing to stderr during this render.
const err = console.error;
console.error = jest.fn();
expect(() => render(<ScrollSpy render={() => (
<div>
Content
</div>
)}/>)).toThrow();
// Restore writing to stderr.
console.error = err;
});
});
@ -176,8 +168,6 @@ describe("<TreeView/> dataTree inside <ScrollSpy/>", () => {
expect(queryByTitle("Application")).toHaveAttribute("aria-expanded");
expect(queryByTitle("Kubernetes")).toHaveAttribute("aria-expanded");
});
// console.log(prettyDOM());
});
it("skips sections without headings", async () => {

View File

@ -32,6 +32,7 @@ import { createPageParam } from "../../navigation";
import { getSortParams, setSortParams } from "./table.storage";
import { computed, makeObservable } from "mobx";
import { getSorted } from "./sorting";
import logger from "../../../common/logger";
export type TableSortBy = string;
export type TableOrderBy = "asc" | "desc" | string;
@ -110,7 +111,7 @@ export class Table<Item> extends React.Component<TableProps<Item>> {
const { sortable, tableId } = this.props;
if (sortable && !tableId) {
console.error("Table must have props.tableId if props.sortable is specified");
logger.error("Table must have props.tableId if props.sortable is specified");
}
}

View File

@ -27,12 +27,13 @@ import { catalogCategoryRegistry } from "../api/catalog-category-registry";
import { WeblinkAddCommand } from "../components/catalog-entities/weblink-add-command";
import { loadConfigFromString } from "../../common/kube-helpers";
import { DeleteClusterDialog } from "../components/delete-cluster-dialog";
import logger from "../../common/logger";
async function onClusterDelete(clusterId: string) {
async function onClusterDelete(clusterId: string): Promise<void> {
const cluster = ClusterStore.getInstance().getById(clusterId);
if (!cluster) {
return console.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId });
return void logger.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId });
}
const { config, error } = loadConfigFromString(await fs.promises.readFile(cluster.kubeConfigPath, "utf-8"));

View File

@ -23,7 +23,7 @@ import { ipcRenderer } from "electron";
import { reaction } from "mobx";
import { getMatchedClusterId, navigate } from "./helpers";
import { broadcastMessage, ipcRendererOn } from "../../common/ipc";
import logger from "../../main/logger";
import logger from "../../common/logger";
export const enum IpcRendererNavigationEvents {
RELOAD_PAGE = "renderer:page-reload",

View File

@ -22,7 +22,7 @@
import { ipcRenderer } from "electron";
import { createBrowserHistory, createMemoryHistory } from "history";
import { createObservableHistory, ObservableSearchParamsOptions } from "mobx-observable-history";
import logger from "../../main/logger";
import logger from "../../common/logger";
export const searchParamsOptions: ObservableSearchParamsOptions = {
skipEmpty: true, // skip empty params, e.g. "?x=&y2=" will be "?y=2"

View File

@ -22,7 +22,7 @@
import { comparer, computed, makeObservable, observable, reaction } from "mobx";
import { autoBind, Singleton } from "./utils";
import { UserStore } from "../common/user-store";
import logger from "../main/logger";
import logger from "../common/logger";
import lensDarkThemeJson from "./themes/lens-dark.json";
import lensLightThemeJson from "./themes/lens-light.json";
import type { SelectOption } from "./components/select";

Some files were not shown because too many files have changed in this diff Show More