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

Fix crash due to timing issues

- Make injectable phases more explicit for renderer

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-12-16 10:49:33 -05:00
parent 266e43b557
commit c7ead83425
25 changed files with 80 additions and 61 deletions

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import getClusterByIdInjectable from "../../../../common/cluster-store/get-by-id.injectable";
import { beforeFrameStartsInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import initClusterStoreInjectable from "../../store/renderer/init.injectable";
import requestInitialClusterStatesInjectable from "./request-initial.injectable";
@ -23,7 +23,7 @@ const setupClusterStateSyncInjectable = getInjectable({
},
runAfter: di.inject(initClusterStoreInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupClusterStateSyncInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable";
import { beforeFrameStartsInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import initUserStoreInjectable from "../../../../renderer/stores/init-user-store.injectable";
const initClusterStoreInjectable = getInjectable({
@ -18,7 +18,7 @@ const initClusterStoreInjectable = getInjectable({
},
runAfter: di.inject(initUserStoreInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initClusterStoreInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import fileSystemProvisionerStoreInjectable from "../../../extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable";
import { beforeFrameStartsInjectionToken } from "../../../renderer/before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../renderer/before-frame-starts/tokens";
const initFileSystemProvisionerStoreInjectable = getInjectable({
id: "init-file-system-provisioner-store",
@ -16,7 +16,7 @@ const initFileSystemProvisionerStoreInjectable = getInjectable({
store.load();
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initFileSystemProvisionerStoreInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import hotbarStoreInjectable from "../../../../common/hotbars/store.injectable";
import { beforeFrameStartsInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import initClusterStoreInjectable from "../../../cluster/store/renderer/init.injectable";
const initHotbarStoreInjectable = getInjectable({
@ -18,7 +18,7 @@ const initHotbarStoreInjectable = getInjectable({
},
runAfter: di.inject(initClusterStoreInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initHotbarStoreInjectable;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../../renderer/before-frame-starts/tokens";
import initUserStoreInjectable from "../../../../renderer/stores/init-user-store.injectable";
import systemThemeConfigurationInjectable from "../../../../renderer/themes/system-theme.injectable";
import requestInitialSystemThemeTypeInjectable from "./request-initial.injectable";
@ -20,7 +20,7 @@ const initializeSystemThemeTypeInjectable = getInjectable({
},
runAfter: di.inject(initUserStoreInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initializeSystemThemeTypeInjectable;

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import { customMonacoThemeInjectionToken } from "../../components/monaco-editor";
import addNewMonacoThemeInjectable from "../../monaco/add-new-theme.injectable";
import { beforeFrameStartsInjectionToken } from "../tokens";
import { beforeFrameStartsSecondInjectionToken } from "../tokens";
const loadMonacoThemesInjectable = getInjectable({
id: "load-monaco-themes",
@ -18,7 +18,7 @@ const loadMonacoThemesInjectable = getInjectable({
customThemes.forEach(addNewMonacoTheme);
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default loadMonacoThemesInjectable;

View File

@ -9,7 +9,7 @@ import { CustomResourceStore } from "../../../common/k8s-api/api-manager/resourc
import type { CustomResourceDefinition } from "../../../common/k8s-api/endpoints";
import { KubeApi } from "../../../common/k8s-api/kube-api";
import { KubeObject } from "../../../common/k8s-api/kube-object";
import { beforeClusterFrameStartsInjectionToken } from "../tokens";
import { beforeClusterFrameStartsSecondInjectionToken } from "../tokens";
import type { KubeObjectStoreDependencies } from "../../../common/k8s-api/kube-object.store";
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
@ -71,6 +71,7 @@ const setupAutoRegistrationInjectable = getInjectable({
}
});
// NOTE: this MUST happen after the event emitter listeners are registered
const apiManager = di.inject(apiManagerInjectable);
beforeApiManagerInitializationCrds.forEach(autoInitCustomResourceStore);
@ -78,7 +79,7 @@ const setupAutoRegistrationInjectable = getInjectable({
initialized = true;
},
}),
injectionToken: beforeClusterFrameStartsInjectionToken,
injectionToken: beforeClusterFrameStartsSecondInjectionToken,
});
export default setupAutoRegistrationInjectable;

View File

@ -7,7 +7,7 @@ import { reaction } from "mobx";
import { currentClusterMessageChannel } from "../../../common/cluster/current-cluster-channel";
import { sendMessageToChannelInjectionToken } from "../../../common/utils/channel/message-to-channel-injection-token";
import matchedClusterIdInjectable from "../../navigation/matched-cluster-id.injectable";
import { beforeMainFrameStartsInjectionToken } from "../tokens";
import { beforeMainFrameStartsFirstInjectionToken } from "../tokens";
const setupCurrentClusterBroadcastInjectable = getInjectable({
id: "setup-current-cluster-broadcast",
@ -26,7 +26,7 @@ const setupCurrentClusterBroadcastInjectable = getInjectable({
);
},
}),
injectionToken: beforeMainFrameStartsInjectionToken,
injectionToken: beforeMainFrameStartsFirstInjectionToken,
});
export default setupCurrentClusterBroadcastInjectable;

View File

@ -9,7 +9,7 @@ import isLinuxInjectable from "../../../common/vars/is-linux.injectable";
import isWindowsInjectable from "../../../common/vars/is-windows.injectable";
import openPathPickingDialogInjectable from "../../../features/path-picking-dialog/renderer/pick-paths.injectable";
import addSyncEntriesInjectable from "../../initializers/add-sync-entries.injectable";
import { beforeFrameStartsInjectionToken } from "../tokens";
import { beforeFrameStartsSecondInjectionToken } from "../tokens";
const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({
id: "setup-kubernetes-cluster-catalog-add-menu-listener",
@ -75,7 +75,7 @@ const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({
});
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupKubernetesClusterCatalogAddMenuListenerInjectable;

View File

@ -9,7 +9,7 @@ import readFileInjectable from "../../../common/fs/read-file.injectable";
import { loadConfigFromString } from "../../../common/kube-helpers";
import loggerInjectable from "../../../common/logger.injectable";
import openDeleteClusterDialogInjectable from "../../components/delete-cluster-dialog/open.injectable";
import { beforeFrameStartsInjectionToken } from "../tokens";
import { beforeFrameStartsSecondInjectionToken } from "../tokens";
const setupKubernetesClusterContextMenuOpenInjectable = getInjectable({
id: "setup-kubernetes-cluster-context-menu-open",
@ -50,7 +50,7 @@ const setupKubernetesClusterContextMenuOpenInjectable = getInjectable({
});
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupKubernetesClusterContextMenuOpenInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import isMacInjectable from "../../../common/vars/is-mac.injectable";
import { beforeFrameStartsInjectionToken } from "../tokens";
import { beforeFrameStartsSecondInjectionToken } from "../tokens";
const setupRootMacClassnameInjectable = getInjectable({
id: "setup-root-mac-classname",
@ -17,7 +17,7 @@ const setupRootMacClassnameInjectable = getInjectable({
rootElem?.classList.toggle("is-mac", isMac);
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupRootMacClassnameInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import initializeSentryReportingWithInjectable from "../../../common/error-reporting/initialize-sentry-reporting.injectable";
import { beforeMainFrameStartsInjectionToken } from "../tokens";
import { beforeMainFrameStartsFirstInjectionToken } from "../tokens";
import { init } from "@sentry/electron/renderer";
const setupSentryInjectable = getInjectable({
@ -17,7 +17,7 @@ const setupSentryInjectable = getInjectable({
initializeSentryReportingWith(init);
},
}),
injectionToken: beforeMainFrameStartsInjectionToken,
injectionToken: beforeMainFrameStartsFirstInjectionToken,
});
export default setupSentryInjectable;

View File

@ -7,7 +7,7 @@ import React from "react";
import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable";
import { WeblinkAddCommand } from "../../components/catalog-entities/weblink-add-command";
import commandOverlayInjectable from "../../components/command-palette/command-overlay.injectable";
import { beforeFrameStartsInjectionToken } from "../tokens";
import { beforeFrameStartsSecondInjectionToken } from "../tokens";
const setupWeblickContextMenuOpenInjectable = getInjectable({
id: "setup-weblick-context-menu-open",
@ -28,7 +28,7 @@ const setupWeblickContextMenuOpenInjectable = getInjectable({
});
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupWeblickContextMenuOpenInjectable;

View File

@ -7,20 +7,30 @@ import type { Runnable } from "../../common/runnable/run-many-for";
// NOTE: these are run before any other token, mostly to set up things that all other runnables need
export const beforeFrameStartsFirstInjectionToken = getInjectionToken<Runnable>({
id: "even-before-frame-starts",
id: "before-frame-starts-first",
});
// NOTE: these are only run when process.isMainFrame === true
export const beforeMainFrameStartsInjectionToken = getInjectionToken<Runnable>({
id: "even-before-main-frame-starts",
export const beforeMainFrameStartsFirstInjectionToken = getInjectionToken<Runnable>({
id: "before-main-frame-starts-first",
});
// NOTE: these are only run when process.isMainFrame === false
export const beforeClusterFrameStartsInjectionToken = getInjectionToken<Runnable>({
id: "even-before-cluster-frame-starts",
export const beforeClusterFrameStartsFirstInjectionToken = getInjectionToken<Runnable>({
id: "before-cluster-frame-starts-first",
});
export const beforeFrameStartsInjectionToken = getInjectionToken<Runnable>({
id: "before-frame-starts",
export const beforeFrameStartsSecondInjectionToken = getInjectionToken<Runnable>({
id: "before-frame-starts-second",
});
// NOTE: these are only run when process.isMainFrame === true
export const beforeMainFrameStartsSecondInjectionToken = getInjectionToken<Runnable>({
id: "before-main-frame-starts-second",
});
// NOTE: these are only run when process.isMainFrame === false
export const beforeClusterFrameStartsSecondInjectionToken = getInjectionToken<Runnable>({
id: "before-cluster-frame-starts-second",
});

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { action } from "mobx";
import { beforeFrameStartsInjectionToken } from "../../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../before-frame-starts/tokens";
import ipcRendererInjectable from "../../../utils/channel/ipc-renderer.injectable";
import topBarStateInjectable from "./state.injectable";
@ -26,7 +26,7 @@ const startTopbarStateSyncInjectable = getInjectable({
}));
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
causesSideEffects: true,
});

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import injectSystemCAsInjectable from "../../../common/certificate-authorities/inject-system-cas.injectable";
const setupSystemCaInjectable = getInjectable({
@ -12,7 +12,7 @@ const setupSystemCaInjectable = getInjectable({
id: "setup-system-ca",
run: di.inject(injectSystemCAsInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupSystemCaInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { runManyFor } from "../../common/runnable/run-many-for";
import { beforeFrameStartsInjectionToken, beforeClusterFrameStartsInjectionToken, beforeFrameStartsFirstInjectionToken, beforeMainFrameStartsInjectionToken } from "../before-frame-starts/tokens";
import * as tokens from "../before-frame-starts/tokens";
import currentlyInClusterFrameInjectable from "../routes/currently-in-cluster-frame.injectable";
const startFrameInjectable = getInjectable({
@ -13,22 +13,30 @@ const startFrameInjectable = getInjectable({
// TODO: Consolidate contents of bootstrap.tsx here
instantiate: (di) => {
const runMany = runManyFor(di);
const beforeFrameStartsFirst = runMany(beforeFrameStartsFirstInjectionToken);
const beforeMainFrameStarts = runMany(beforeMainFrameStartsInjectionToken);
const beforeClusterFrameStarts = runMany(beforeClusterFrameStartsInjectionToken);
const beforeFrameStarts = runMany(beforeFrameStartsInjectionToken);
const beforeFrameStartsFirst = runMany(tokens.beforeFrameStartsFirstInjectionToken);
const beforeMainFrameStartsFirst = runMany(tokens.beforeMainFrameStartsFirstInjectionToken);
const beforeClusterFrameStartsFirst = runMany(tokens.beforeClusterFrameStartsFirstInjectionToken);
const beforeFrameStartsSecond = runMany(tokens.beforeFrameStartsSecondInjectionToken);
const beforeMainFrameStartsSecond = runMany(tokens.beforeMainFrameStartsSecondInjectionToken);
const beforeClusterFrameStartsSecond = runMany(tokens.beforeClusterFrameStartsSecondInjectionToken);
const currentlyInClusterFrame = di.inject(currentlyInClusterFrameInjectable);
return async () => {
await beforeFrameStartsFirst();
if (currentlyInClusterFrame) {
await beforeClusterFrameStarts();
await beforeClusterFrameStartsFirst();
} else {
await beforeMainFrameStarts();
await beforeMainFrameStartsFirst();
}
await beforeFrameStarts();
await beforeFrameStartsSecond();
if (currentlyInClusterFrame) {
await beforeClusterFrameStartsSecond();
} else {
await beforeMainFrameStartsSecond();
}
};
},
});

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import userStoreInjectable from "../../common/user-store/user-store.injectable";
import { beforeFrameStartsInjectionToken } from "../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../before-frame-starts/tokens";
import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable";
const initUserStoreInjectable = getInjectable({
@ -19,7 +19,7 @@ const initUserStoreInjectable = getInjectable({
},
runAfter: di.inject(initDefaultUpdateChannelInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initUserStoreInjectable;

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import { reaction } from "mobx";
import initializeSystemThemeTypeInjectable from "../../features/theme/system-type/renderer/initialize.injectable";
import { beforeFrameStartsInjectionToken } from "../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../before-frame-starts/tokens";
import initUserStoreInjectable from "../stores/init-user-store.injectable";
import activeThemeInjectable from "./active.injectable";
import applyLensThemeInjectable from "./apply-lens-theme.injectable";
@ -31,7 +31,7 @@ const setupApplyActiveThemeInjectable = getInjectable({
di.inject(initUserStoreInjectable),
],
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default setupApplyActiveThemeInjectable;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../../before-frame-starts/tokens";
import listeningOnMessageChannelsInjectable from "../../../../common/utils/channel/listening-on-message-channels.injectable";
const startListeningOfChannelsInjectable = getInjectable({
@ -18,7 +18,7 @@ const startListeningOfChannelsInjectable = getInjectable({
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default startListeningOfChannelsInjectable;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import { syncBoxInitialValueChannel } from "../../../common/utils/sync-box/channels";
import createSyncBoxStateInjectable from "../../../common/utils/sync-box/sync-box-state.injectable";
import { requestFromChannelInjectionToken } from "../../../common/utils/channel/request-from-channel-injection-token";
@ -32,7 +32,7 @@ const provideInitialValuesForSyncBoxesInjectable = getInjectable({
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default provideInitialValuesForSyncBoxesInjectable;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import buildVersionInjectable from "./build-version.injectable";
const initializeBuildVersionInjectable = getInjectable({
@ -16,7 +16,7 @@ const initializeBuildVersionInjectable = getInjectable({
await buildVersion.init();
},
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initializeBuildVersionInjectable;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import initReleaseChannelInjectable from "../release-channel/init.injectable";
import defaultUpdateChannelInjectable from "../../../features/application-update/common/selected-update-channel/default-update-channel.injectable";
@ -18,7 +18,7 @@ const initDefaultUpdateChannelInjectable = getInjectable({
},
runAfter: di.inject(initReleaseChannelInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initDefaultUpdateChannelInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import releaseChannelInjectable from "../../../common/vars/release-channel.injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import initSemanticBuildVersionInjectable from "../semantic-build-version/init.injectable";
const initReleaseChannelInjectable = getInjectable({
@ -18,7 +18,7 @@ const initReleaseChannelInjectable = getInjectable({
},
runAfter: di.inject(initSemanticBuildVersionInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initReleaseChannelInjectable;

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import buildSemanticVersionInjectable from "../../../common/vars/build-semantic-version.injectable";
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/tokens";
import { beforeFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens";
import initializeBuildVersionInjectable from "../build-version/init.injectable";
const initSemanticBuildVersionInjectable = getInjectable({
@ -18,7 +18,7 @@ const initSemanticBuildVersionInjectable = getInjectable({
},
runAfter: di.inject(initializeBuildVersionInjectable),
}),
injectionToken: beforeFrameStartsInjectionToken,
injectionToken: beforeFrameStartsSecondInjectionToken,
});
export default initSemanticBuildVersionInjectable;