This commit is contained in:
@ -52,7 +52,7 @@ assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
||||
export async function generateTheme(params: {
|
||||
reactAppBuildDirPath: string;
|
||||
keycloakThemeBuildingDirPath: string;
|
||||
themeSrcDirPath: string | undefined;
|
||||
themeSrcDirPath: string;
|
||||
keycloakifySrcDirPath: string;
|
||||
buildOptions: BuildOptionsLike;
|
||||
keycloakifyVersion: string;
|
||||
@ -67,6 +67,10 @@ export async function generateTheme(params: {
|
||||
let generateFtlFilesCode_glob: ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"] | undefined = undefined;
|
||||
|
||||
for (const themeType of themeTypes) {
|
||||
if (!fs.existsSync(pathJoin(themeSrcDirPath, themeType))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const themeDirPath = getThemeDirPath(themeType);
|
||||
|
||||
copy_app_resources_to_theme_path: {
|
||||
@ -132,26 +136,21 @@ export async function generateTheme(params: {
|
||||
});
|
||||
}
|
||||
|
||||
const generateFtlFilesCode = (() => {
|
||||
if (generateFtlFilesCode_glob !== undefined) {
|
||||
return generateFtlFilesCode_glob;
|
||||
}
|
||||
|
||||
const { generateFtlFilesCode } = generateFtlFilesCodeFactory({
|
||||
"indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"),
|
||||
"cssGlobalsToDefine": allCssGlobalsToDefine,
|
||||
buildOptions,
|
||||
keycloakifyVersion,
|
||||
themeType,
|
||||
"fieldNames": readFieldNameUsage({
|
||||
keycloakifySrcDirPath,
|
||||
themeSrcDirPath,
|
||||
themeType
|
||||
})
|
||||
});
|
||||
|
||||
return generateFtlFilesCode;
|
||||
})();
|
||||
const generateFtlFilesCode =
|
||||
generateFtlFilesCode_glob !== undefined
|
||||
? generateFtlFilesCode_glob
|
||||
: generateFtlFilesCodeFactory({
|
||||
"indexHtmlCode": fs.readFileSync(pathJoin(reactAppBuildDirPath, "index.html")).toString("utf8"),
|
||||
"cssGlobalsToDefine": allCssGlobalsToDefine,
|
||||
buildOptions,
|
||||
keycloakifyVersion,
|
||||
themeType,
|
||||
"fieldNames": readFieldNameUsage({
|
||||
keycloakifySrcDirPath,
|
||||
themeSrcDirPath,
|
||||
themeType
|
||||
})
|
||||
}).generateFtlFilesCode;
|
||||
|
||||
[
|
||||
...(() => {
|
||||
@ -162,12 +161,10 @@ export async function generateTheme(params: {
|
||||
return accountThemePageIds;
|
||||
}
|
||||
})(),
|
||||
...(themeSrcDirPath === undefined
|
||||
? []
|
||||
: readExtraPagesNames({
|
||||
themeType,
|
||||
themeSrcDirPath
|
||||
}))
|
||||
...readExtraPagesNames({
|
||||
themeType,
|
||||
themeSrcDirPath
|
||||
})
|
||||
].forEach(pageId => {
|
||||
const { ftlCode } = generateFtlFilesCode({ pageId });
|
||||
|
||||
@ -224,10 +221,6 @@ export async function generateTheme(params: {
|
||||
}
|
||||
|
||||
email: {
|
||||
if (themeSrcDirPath === undefined) {
|
||||
break email;
|
||||
}
|
||||
|
||||
const emailThemeSrcDirPath = pathJoin(themeSrcDirPath, "email");
|
||||
|
||||
if (!fs.existsSync(emailThemeSrcDirPath)) {
|
||||
|
@ -5,74 +5,15 @@ import * as fs from "fs";
|
||||
import type { ThemeType } from "../generateFtl";
|
||||
import { exclude } from "tsafe/exclude";
|
||||
|
||||
export function readFieldNameUsage(params: {
|
||||
keycloakifySrcDirPath: string;
|
||||
themeSrcDirPath: string | undefined;
|
||||
themeType: ThemeType | "email";
|
||||
}): string[] {
|
||||
/** Assumes the theme type exists */
|
||||
export function readFieldNameUsage(params: { keycloakifySrcDirPath: string; themeSrcDirPath: string; themeType: ThemeType }): string[] {
|
||||
const { keycloakifySrcDirPath, themeSrcDirPath, themeType } = params;
|
||||
|
||||
const fieldNames: string[] = [];
|
||||
|
||||
if (themeSrcDirPath === undefined) {
|
||||
//If we can't detect the user theme directory we restore the fieldNames we had previously to prevent errors.
|
||||
fieldNames.push(
|
||||
...[
|
||||
"global",
|
||||
"userLabel",
|
||||
"username",
|
||||
"email",
|
||||
"firstName",
|
||||
"lastName",
|
||||
"password",
|
||||
"password-confirm",
|
||||
"totp",
|
||||
"totpSecret",
|
||||
"SAMLRequest",
|
||||
"SAMLResponse",
|
||||
"relayState",
|
||||
"device_user_code",
|
||||
"code",
|
||||
"password-new",
|
||||
"rememberMe",
|
||||
"login",
|
||||
"authenticationExecution",
|
||||
"cancel-aia",
|
||||
"clientDataJSON",
|
||||
"authenticatorData",
|
||||
"signature",
|
||||
"credentialId",
|
||||
"userHandle",
|
||||
"error",
|
||||
"authn_use_chk",
|
||||
"authenticationExecution",
|
||||
"isSetRetry",
|
||||
"try-again",
|
||||
"attestationObject",
|
||||
"publicKeyCredentialId",
|
||||
"authenticatorLabel"
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
for (const srcDirPath of (
|
||||
[
|
||||
pathJoin(keycloakifySrcDirPath, themeType),
|
||||
(() => {
|
||||
if (themeSrcDirPath === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const srcDirPath = pathJoin(themeSrcDirPath, themeType);
|
||||
|
||||
if (!fs.existsSync(srcDirPath)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return srcDirPath;
|
||||
})()
|
||||
] as const
|
||||
).filter(exclude(undefined))) {
|
||||
for (const srcDirPath of ([pathJoin(keycloakifySrcDirPath, themeType), pathJoin(themeSrcDirPath, themeType)] as const).filter(
|
||||
exclude(undefined)
|
||||
)) {
|
||||
const filePaths = crawl({ "dirPath": srcDirPath, "returnedPathsType": "absolute" }).filter(filePath => /\.(ts|tsx|js|jsx)$/.test(filePath));
|
||||
|
||||
for (const filePath of filePaths) {
|
||||
|
@ -57,12 +57,6 @@ export async function main() {
|
||||
"email": false
|
||||
};
|
||||
|
||||
if (themeSrcDirPath === undefined) {
|
||||
implementedThemeTypes["login"] = true;
|
||||
implementedThemeTypes["account"] = true;
|
||||
return implementedThemeTypes;
|
||||
}
|
||||
|
||||
for (const themeType of objectKeys(implementedThemeTypes)) {
|
||||
if (!fs.existsSync(pathJoin(themeSrcDirPath, themeType))) {
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user