diff --git a/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl b/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl index ef4a1276..456aa4a4 100644 --- a/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +++ b/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl @@ -299,6 +299,8 @@ function decodeHtmlEntities(htmlStr){ <#local out_seq += ["/*" + path?join(".") + "." + key + " excluded*/"]> <#continue> + + USER_DEFINED_EXCLUSIONS_eKsaY4ZsZ4eMr2 <#-- https://github.com/keycloakify/keycloakify/discussions/406 --> <#if ( diff --git a/src/bin/keycloakify/generateFtl/generateFtl.ts b/src/bin/keycloakify/generateFtl/generateFtl.ts index 5de7fa87..f153d323 100644 --- a/src/bin/keycloakify/generateFtl/generateFtl.ts +++ b/src/bin/keycloakify/generateFtl/generateFtl.ts @@ -21,6 +21,7 @@ export type BuildOptionsLike = { urlPathname: string | undefined; reactAppBuildDirPath: string; assetsDirPath: string; + kcContextExclusionsFtlCode: string | undefined; }; assert(); @@ -140,6 +141,10 @@ export function generateFtlFilesCodeFactory(params: { .replace( "lOCALIZATION_REALM_OVERRIDES_USER_PROFILE_PROPERTY_KEY_aaGLsPgGIdeeX", nameOfTheLocalizationRealmOverridesUserProfileProperty + ) + .replace( + "USER_DEFINED_EXCLUSIONS_eKsaY4ZsZ4eMr2", + buildOptions.kcContextExclusionsFtlCode ?? "" ); const ftlObjectToJsCodeDeclaringAnObjectPlaceholder = '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }'; diff --git a/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts b/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts index 65ef3923..5429d467 100644 --- a/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +++ b/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts @@ -10,7 +10,7 @@ import { import { downloadKeycloakDefaultTheme } from "../../shared/downloadKeycloakDefaultTheme"; import { transformCodebase } from "../../tools/transformCodebase"; -type BuildOptionsLike = { +export type BuildOptionsLike = { cacheDirPath: string; npmWorkspaceRootDirPath: string; keycloakifyBuildDirPath: string; diff --git a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts index 3f38ac0a..46ed88b6 100644 --- a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +++ b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts @@ -3,7 +3,10 @@ import * as fs from "fs"; import { join as pathJoin, resolve as pathResolve } from "path"; import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode"; import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode"; -import { generateFtlFilesCodeFactory } from "../generateFtl"; +import { + generateFtlFilesCodeFactory, + type BuildOptionsLike as BuildOptionsLike_kcContextExclusionsFtlCode +} from "../generateFtl"; import { type ThemeType, lastKeycloakVersionWithAccountV1, @@ -16,11 +19,17 @@ import { import { isInside } from "../../tools/isInside"; import type { BuildOptions } from "../../shared/buildOptions"; import { assert, type Equals } from "tsafe/assert"; -import { downloadKeycloakStaticResources } from "../../shared/downloadKeycloakStaticResources"; +import { + downloadKeycloakStaticResources, + type BuildOptionsLike as BuildOptionsLike_downloadKeycloakStaticResources +} from "../../shared/downloadKeycloakStaticResources"; import { readFieldNameUsage } from "./readFieldNameUsage"; import { readExtraPagesNames } from "./readExtraPageNames"; import { generateMessageProperties } from "./generateMessageProperties"; -import { bringInAccountV1 } from "./bringInAccountV1"; +import { + bringInAccountV1, + type BuildOptionsLike as BuildOptionsLike_bringInAccountV1 +} from "./bringInAccountV1"; import { getThemeSrcDirPath } from "../../shared/getThemeSrcDirPath"; import { rmSync } from "../../tools/fs.rmSync"; import { readThisNpmPackageVersion } from "../../tools/readThisNpmPackageVersion"; @@ -30,19 +39,18 @@ import { } from "../../shared/metaInfKeycloakThemes"; import { objectEntries } from "tsafe/objectEntries"; -export type BuildOptionsLike = { - bundler: "vite" | "webpack"; - extraThemeProperties: string[] | undefined; - themeVersion: string; - loginThemeResourcesFromKeycloakVersion: string; - reactAppBuildDirPath: string; - cacheDirPath: string; - assetsDirPath: string; - urlPathname: string | undefined; - npmWorkspaceRootDirPath: string; - reactAppRootDirPath: string; - keycloakifyBuildDirPath: string; -}; +export type BuildOptionsLike = BuildOptionsLike_kcContextExclusionsFtlCode & + BuildOptionsLike_downloadKeycloakStaticResources & + BuildOptionsLike_bringInAccountV1 & { + bundler: "vite" | "webpack"; + extraThemeProperties: string[] | undefined; + loginThemeResourcesFromKeycloakVersion: string; + reactAppBuildDirPath: string; + assetsDirPath: string; + urlPathname: string | undefined; + reactAppRootDirPath: string; + keycloakifyBuildDirPath: string; + }; assert(); diff --git a/src/bin/shared/buildOptions.ts b/src/bin/shared/buildOptions.ts index 7d9d8a33..7ee5e32c 100644 --- a/src/bin/shared/buildOptions.ts +++ b/src/bin/shared/buildOptions.ts @@ -30,6 +30,7 @@ export type BuildOptions = { urlPathname: string | undefined; assetsDirPath: string; npmWorkspaceRootDirPath: string; + kcContextExclusionsFtlCode: string | undefined; }; export type UserProvidedBuildOptions = { @@ -39,6 +40,7 @@ export type UserProvidedBuildOptions = { loginThemeResourcesFromKeycloakVersion?: string; keycloakifyBuildDirPath?: string; themeName?: string | string[]; + kcContextExclusionsFtlCode?: string; }; export type ResolvedViteConfig = { @@ -302,6 +304,7 @@ export function readBuildOptions(params: { return pathJoin(reactAppBuildDirPath, resolvedViteConfig.assetsDir); })(), - npmWorkspaceRootDirPath + npmWorkspaceRootDirPath, + kcContextExclusionsFtlCode: userProvidedBuildOptions.kcContextExclusionsFtlCode }; }