diff --git a/src/bin/update-kc-gen.ts b/src/bin/update-kc-gen.ts index f839ac7f..847ddd46 100644 --- a/src/bin/update-kc-gen.ts +++ b/src/bin/update-kc-gen.ts @@ -52,7 +52,7 @@ export async function command(params: { buildContext: BuildContext }) { 2 )};`, ``, - `export type KcContext =`, + `type KcContext =`, hasLoginTheme && ` | import("./login/KcContext").KcContext`, hasAccountTheme && ` | import("./account/KcContext").KcContext`, hasAdminTheme && ` | import("./admin/KcContext").KcContext`, diff --git a/src/login/KcContext/KcContext.ts b/src/login/KcContext/KcContext.ts index 161e45de..37cbc486 100644 --- a/src/login/KcContext/KcContext.ts +++ b/src/login/KcContext/KcContext.ts @@ -102,7 +102,7 @@ export declare namespace KcContext { showTryAnotherWayLink?: boolean; attemptedUsername?: string; }; - scripts: string[]; + scripts?: string[]; message?: { type: "success" | "warning" | "error" | "info"; summary: string; diff --git a/src/login/Template.useInitialize.ts b/src/login/Template.useInitialize.ts index 2ab120a5..d01318ab 100644 --- a/src/login/Template.useInitialize.ts +++ b/src/login/Template.useInitialize.ts @@ -10,7 +10,7 @@ export type KcContextLike = { resourcesPath: string; ssoLoginInOtherTabsUrl: string; }; - scripts: string[]; + scripts?: string[]; }; assert(); @@ -45,10 +45,12 @@ export function useInitialize(params: { type: "module", src: `${url.resourcesPath}/js/menu-button-links.js` }, - ...scripts.map(src => ({ - type: "text/javascript" as const, - src - })), + ...(scripts === undefined + ? [] + : scripts.map(src => ({ + type: "text/javascript" as const, + src + }))), { type: "module", textContent: ` diff --git a/src/login/i18n/noJsx/getI18n.tsx b/src/login/i18n/noJsx/getI18n.tsx index f619a303..b902b6e2 100644 --- a/src/login/i18n/noJsx/getI18n.tsx +++ b/src/login/i18n/noJsx/getI18n.tsx @@ -16,6 +16,9 @@ import type { GenericI18n_noJsx } from "./GenericI18n_noJsx"; export type KcContextLike = { themeName: string; + realm: { + internationalizationEnabled: boolean; + }; locale?: { currentLanguageTag: string; supported: { languageTag: string; url: string; label: string }[]; @@ -91,14 +94,16 @@ export function createGetI18n< return cachedResult; } + const kcContextLocale = params.kcContext.realm.internationalizationEnabled ? params.kcContext.locale : undefined; + { - const currentLanguageTag = kcContext.locale?.currentLanguageTag ?? FALLBACK_LANGUAGE_TAG; + const currentLanguageTag = kcContextLocale?.currentLanguageTag ?? FALLBACK_LANGUAGE_TAG; const html = document.querySelector("html"); assert(html !== null); html.lang = currentLanguageTag; const isRtl = (() => { - const { rtl } = kcContext.locale ?? {}; + const { rtl } = kcContextLocale ?? {}; if (rtl !== undefined) { return rtl; @@ -154,11 +159,11 @@ export function createGetI18n< } from_server: { - if (kcContext.locale === undefined) { + if (kcContextLocale === undefined) { break from_server; } - const supportedEntry = kcContext.locale.supported.find(entry => entry.languageTag === languageTag); + const supportedEntry = kcContextLocale.supported.find(entry => entry.languageTag === languageTag); if (supportedEntry === undefined) { break from_server; @@ -180,7 +185,7 @@ export function createGetI18n< }; const currentLanguage: I18n["currentLanguage"] = (() => { - const languageTag = id(kcContext.locale?.currentLanguageTag ?? FALLBACK_LANGUAGE_TAG) as LanguageTag; + const languageTag = id(kcContextLocale?.currentLanguageTag ?? FALLBACK_LANGUAGE_TAG) as LanguageTag; return { languageTag, @@ -191,8 +196,8 @@ export function createGetI18n< const enabledLanguages: I18n["enabledLanguages"] = (() => { const enabledLanguages: I18n["enabledLanguages"] = []; - if (kcContext.locale !== undefined) { - for (const entry of kcContext.locale.supported ?? []) { + if (kcContextLocale !== undefined) { + for (const entry of kcContextLocale.supported ?? []) { const languageTag = id(entry.languageTag) as LanguageTag; enabledLanguages.push({ diff --git a/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx b/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx index d56f934f..f10a711d 100644 --- a/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +++ b/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx @@ -70,9 +70,9 @@ export default function LoginRecoveryAuthnCodeConfig(props: PageProps { + //@ts-expect-error: This is inherited from the original code + document.getElementById("saveRecoveryAuthnCodesBtn").disabled = !event.target.checked; }} /> diff --git a/src/vite-plugin/vite-plugin.ts b/src/vite-plugin/vite-plugin.ts index d7ec06d5..258bed28 100644 --- a/src/vite-plugin/vite-plugin.ts +++ b/src/vite-plugin/vite-plugin.ts @@ -16,6 +16,7 @@ import { } from "../bin/shared/buildContext"; import MagicString from "magic-string"; import { command as updateKcGenCommand } from "../bin/update-kc-gen"; +import { replaceAll } from "../bin/tools/String.prototype.replaceAll"; export namespace keycloakify { export type Params = BuildOptions & { @@ -130,6 +131,8 @@ export function keycloakify(params: keycloakify.Params) { await updateKcGenCommand({ buildContext }); }, transform: (code, id) => { + id = replaceAll(id, "/", pathSep); + assert(command !== undefined); assert(shouldGenerateSourcemap !== undefined);