From bda76200d701219e7c19b5d9cc4f548f7fb930be Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sat, 10 Feb 2024 19:51:24 +0100 Subject: [PATCH] Base url that works everywhere in mocks --- src/account/kcContext/createGetKcContext.ts | 3 +- src/account/kcContext/kcContextMocks.ts | 8 ++-- src/bin/tools/pathJoin.ts | 6 --- src/lib/BASE_URL.ts | 41 +++++++++++++++++++++ src/login/kcContext/createGetKcContext.ts | 3 +- src/login/kcContext/kcContextMocks.ts | 8 ++-- 6 files changed, 49 insertions(+), 20 deletions(-) delete mode 100644 src/bin/tools/pathJoin.ts create mode 100644 src/lib/BASE_URL.ts diff --git a/src/account/kcContext/createGetKcContext.ts b/src/account/kcContext/createGetKcContext.ts index e1e37fbc..857b4831 100644 --- a/src/account/kcContext/createGetKcContext.ts +++ b/src/account/kcContext/createGetKcContext.ts @@ -2,7 +2,6 @@ import type { DeepPartial } from "keycloakify/tools/DeepPartial"; import { deepAssign } from "keycloakify/tools/deepAssign"; import type { ExtendKcContext } from "./getKcContextFromWindow"; import { getKcContextFromWindow } from "./getKcContextFromWindow"; -import { pathJoin } from "keycloakify/bin/tools/pathJoin"; import { symToStr } from "tsafe/symToStr"; import { resources_common } from "keycloakify/bin/constants"; import { kcContextMocks, kcContextCommonMock } from "keycloakify/account/kcContext/kcContextMocks"; @@ -88,7 +87,7 @@ export function createGetKcContext (i === 0 ? part : part.replace(/^\/+/, ""))) - .map((part, i) => (i === path.length - 1 ? part : part.replace(/\/+$/, ""))) - .join(typeof process !== "undefined" && process.platform === "win32" ? "\\" : "/"); -} diff --git a/src/lib/BASE_URL.ts b/src/lib/BASE_URL.ts new file mode 100644 index 00000000..df86e13a --- /dev/null +++ b/src/lib/BASE_URL.ts @@ -0,0 +1,41 @@ +import { assert } from "tsafe/assert"; + +/** + * WARNING: Internal use only!! + * This is just a way to know what's the base url that works + * both in webpack and vite. + * THIS DOES NOT WORK IN KEYCLOAK! It's only for resolving mock assets. + */ +export const BASE_URL = (() => { + vite: { + let BASE_URL: string; + + try { + // @ts-expect-error + BASE_URL = import.meta.env.BASE_URL; + + assert(typeof BASE_URL === "string"); + } catch { + break vite; + } + + return BASE_URL; + } + + webpack: { + let BASE_URL: string; + + try { + // @ts-expect-error + BASE_URL = process.env.PUBLIC_URL; + + assert(typeof BASE_URL === "string"); + } catch { + break webpack; + } + + return BASE_URL === "" ? "/" : `${BASE_URL}/`; + } + + return "/"; +})(); diff --git a/src/login/kcContext/createGetKcContext.ts b/src/login/kcContext/createGetKcContext.ts index 211ec856..799a8988 100644 --- a/src/login/kcContext/createGetKcContext.ts +++ b/src/login/kcContext/createGetKcContext.ts @@ -7,7 +7,6 @@ import { exclude } from "tsafe/exclude"; import { assert } from "tsafe/assert"; import type { ExtendKcContext } from "./getKcContextFromWindow"; import { getKcContextFromWindow } from "./getKcContextFromWindow"; -import { pathJoin } from "keycloakify/bin/tools/pathJoin"; import { symToStr } from "tsafe/symToStr"; import { resources_common } from "keycloakify/bin/constants"; @@ -147,7 +146,7 @@ export function createGetKcContext [attribute.name, attribute])) as any; -const PUBLIC_URL = (typeof process !== "object" ? undefined : process.env?.["PUBLIC_URL"]) || "/"; - -const resourcesPath = pathJoin(PUBLIC_URL, keycloak_resources, "login", "resources"); +const resourcesPath = `${BASE_URL}${keycloak_resources}/login/resources`; export const kcContextCommonMock: KcContext.Common = { "themeVersion": "0.0.0", @@ -112,7 +110,7 @@ export const kcContextCommonMock: KcContext.Common = { "url": { "loginAction": "#", resourcesPath, - "resourcesCommonPath": pathJoin(resourcesPath, resources_common), + "resourcesCommonPath": `${resourcesPath}/${resources_common}`, "loginRestartFlowUrl": "/auth/realms/myrealm/login-actions/restart?client_id=account&tab_id=HoAx28ja4xg", "loginUrl": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg" },