From af3325e8169a30ee28592bc12e57a0cc2b8f7338 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 30 Mar 2022 12:04:28 +0300 Subject: [PATCH] Switch to using abstraction for joining paths to control explicit side effect Signed-off-by: Janne Savolainen --- .../directory-for-binaries.injectable.ts | 10 +++++++--- .../directory-for-kubectl-binaries.injectable.ts | 11 ++++++++--- .../directory-for-extension-data.injectable.ts | 10 +++++++--- src/main/app-paths/app-paths.injectable.ts | 5 +++-- src/main/routes/static-file-route.injectable.ts | 10 +++++++--- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/common/app-paths/directory-for-binaries/directory-for-binaries.injectable.ts b/src/common/app-paths/directory-for-binaries/directory-for-binaries.injectable.ts index 7a7aa8658d..5f6b14f5ba 100644 --- a/src/common/app-paths/directory-for-binaries/directory-for-binaries.injectable.ts +++ b/src/common/app-paths/directory-for-binaries/directory-for-binaries.injectable.ts @@ -3,14 +3,18 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import path from "path"; import directoryForUserDataInjectable from "../directory-for-user-data/directory-for-user-data.injectable"; +import getAbsolutePathInjectable from "../../path/get-absolute-path.injectable"; const directoryForBinariesInjectable = getInjectable({ id: "directory-for-binaries", - instantiate: (di) => - path.join(di.inject(directoryForUserDataInjectable), "binaries"), + instantiate: (di) => { + const getAbsolutePath = di.inject(getAbsolutePathInjectable); + const directoryForUserData = di.inject(directoryForUserDataInjectable); + + return getAbsolutePath(directoryForUserData, "binaries"); + }, }); export default directoryForBinariesInjectable; diff --git a/src/common/app-paths/directory-for-kubectl-binaries/directory-for-kubectl-binaries.injectable.ts b/src/common/app-paths/directory-for-kubectl-binaries/directory-for-kubectl-binaries.injectable.ts index d3749fc79f..4b6ce56601 100644 --- a/src/common/app-paths/directory-for-kubectl-binaries/directory-for-kubectl-binaries.injectable.ts +++ b/src/common/app-paths/directory-for-kubectl-binaries/directory-for-kubectl-binaries.injectable.ts @@ -4,13 +4,18 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import directoryForBinariesInjectable from "../directory-for-binaries/directory-for-binaries.injectable"; -import path from "path"; +import getAbsolutePathInjectable from "../../path/get-absolute-path.injectable"; const directoryForKubectlBinariesInjectable = getInjectable({ id: "directory-for-kubectl-binaries", - instantiate: (di) => - path.join(di.inject(directoryForBinariesInjectable), "kubectl"), + instantiate: (di) => { + const getAbsolutePath = di.inject(getAbsolutePathInjectable); + const directoryForBinaries = di.inject(directoryForBinariesInjectable); + + + return getAbsolutePath(directoryForBinaries, "kubectl"); + }, }); export default directoryForKubectlBinariesInjectable; diff --git a/src/extensions/extension-loader/create-extension-instance/file-system-provisioner-store/directory-for-extension-data/directory-for-extension-data.injectable.ts b/src/extensions/extension-loader/create-extension-instance/file-system-provisioner-store/directory-for-extension-data/directory-for-extension-data.injectable.ts index 7856fd84de..854953e336 100644 --- a/src/extensions/extension-loader/create-extension-instance/file-system-provisioner-store/directory-for-extension-data/directory-for-extension-data.injectable.ts +++ b/src/extensions/extension-loader/create-extension-instance/file-system-provisioner-store/directory-for-extension-data/directory-for-extension-data.injectable.ts @@ -3,14 +3,18 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import path from "path"; import directoryForUserDataInjectable from "../../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; +import getAbsolutePathInjectable from "../../../../../common/path/get-absolute-path.injectable"; const directoryForExtensionDataInjectable = getInjectable({ id: "directory-for-extension-data", - instantiate: (di) => - path.join(di.inject(directoryForUserDataInjectable), "extension_data"), + instantiate: (di) => { + const getAbsolutePath = di.inject(getAbsolutePathInjectable); + const directoryForUserData = di.inject(directoryForUserDataInjectable); + + return getAbsolutePath(directoryForUserData, "extension_data"); + }, }); export default directoryForExtensionDataInjectable; diff --git a/src/main/app-paths/app-paths.injectable.ts b/src/main/app-paths/app-paths.injectable.ts index 654f34d29b..b9df2c7f57 100644 --- a/src/main/app-paths/app-paths.injectable.ts +++ b/src/main/app-paths/app-paths.injectable.ts @@ -16,9 +16,9 @@ import registerChannelInjectable from "./register-channel/register-channel.injec import { getAppPaths } from "./get-app-paths"; import getElectronAppPathInjectable from "./get-electron-app-path/get-electron-app-path.injectable"; import setElectronAppPathInjectable from "./set-electron-app-path/set-electron-app-path.injectable"; -import path from "path"; import appNameInjectable from "./app-name/app-name.injectable"; import directoryForIntegrationTestingInjectable from "./directory-for-integration-testing/directory-for-integration-testing.injectable"; +import joinPathsInjectable from "../../common/path/join-paths.injectable"; const appPathsInjectable = getInjectable({ id: "app-paths", @@ -55,10 +55,11 @@ const setupPathForUserData = async (di: DiContainerForSetup) => { const setElectronAppPath = await di.inject(setElectronAppPathInjectable); const appName = await di.inject(appNameInjectable); const getAppPath = await di.inject(getElectronAppPathInjectable); + const joinPaths = await di.inject(joinPathsInjectable); const appDataPath = getAppPath("appData"); - setElectronAppPath("userData", path.join(appDataPath, appName)); + setElectronAppPath("userData", joinPaths(appDataPath, appName)); }; // Todo: this kludge is here only until we have a proper place to setup integration testing. diff --git a/src/main/routes/static-file-route.injectable.ts b/src/main/routes/static-file-route.injectable.ts index 410629c9db..21b4025a8d 100644 --- a/src/main/routes/static-file-route.injectable.ts +++ b/src/main/routes/static-file-route.injectable.ts @@ -13,20 +13,23 @@ import isDevelopmentInjectable from "../../common/vars/is-development.injectable import httpProxy from "http-proxy"; import readFileBufferInjectable from "../../common/fs/read-file-buffer.injectable"; import getAbsolutePathInjectable, { GetAbsolutePath } from "../../common/path/get-absolute-path.injectable"; +import type { JoinPaths } from "../../common/path/join-paths.injectable"; +import joinPathsInjectable from "../../common/path/join-paths.injectable"; interface ProductionDependencies { readFileBuffer: (path: string) => Promise; getAbsolutePath: GetAbsolutePath; + joinPaths: JoinPaths; } const handleStaticFileInProduction = - ({ readFileBuffer, getAbsolutePath }: ProductionDependencies) => + ({ readFileBuffer, getAbsolutePath, joinPaths }: ProductionDependencies) => async ({ params }: LensApiRequest) => { const staticPath = getAbsolutePath(__static); let filePath = params.path; for (let retryCount = 0; retryCount < 5; retryCount += 1) { - const asset = path.join(staticPath, filePath); + const asset = joinPaths(staticPath, filePath); const normalizedFilePath = getAbsolutePath(asset); if (!normalizedFilePath.startsWith(staticPath)) { @@ -82,13 +85,14 @@ const staticFileRouteInjectable = getInjectable({ const isDevelopment = di.inject(isDevelopmentInjectable); const readFileBuffer = di.inject(readFileBufferInjectable); const getAbsolutePath = di.inject(getAbsolutePathInjectable); + const joinPaths = di.inject(joinPathsInjectable); return { method: "get", path: `/{path*}`, handler: isDevelopment ? handleStaticFileInDevelopment({ proxy: httpProxy.createProxy() }) - : handleStaticFileInProduction({ readFileBuffer, getAbsolutePath }), + : handleStaticFileInProduction({ readFileBuffer, getAbsolutePath, joinPaths }), }; },