diff --git a/src/bin/build-keycloak-theme/build-keycloak-theme.ts b/src/bin/build-keycloak-theme/build-keycloak-theme.ts index aad67d8d..81d03374 100644 --- a/src/bin/build-keycloak-theme/build-keycloak-theme.ts +++ b/src/bin/build-keycloak-theme/build-keycloak-theme.ts @@ -1,11 +1,16 @@ import { generateKeycloakThemeResources } from "./generateKeycloakThemeResources"; import { generateJavaStackFiles } from "./generateJavaStackFiles"; -import type { ParsedPackageJson } from "./generateJavaStackFiles"; import { join as pathJoin, relative as pathRelative, basename as pathBasename } from "path"; import * as child_process from "child_process"; import { generateDebugFiles, containerLaunchScriptBasename } from "./generateDebugFiles"; import { URL } from "url"; +type ParsedPackageJson = { + name: string; + version: string; + homepage?: string; +}; + const reactProjectDirPath = process.cwd(); const doUseExternalAssets = process.argv[2]?.toLowerCase() === "--external-assets"; @@ -14,17 +19,21 @@ const parsedPackageJson: ParsedPackageJson = require(pathJoin(reactProjectDirPat export const keycloakThemeBuildingDirPath = pathJoin(reactProjectDirPath, "build_keycloak"); -export function main() { +function sanitizeThemeName(name: string) { + return name.replace(/^@(.*)/, '$1').split('/').join('-'); +} +export function main() { console.log("🔏 Building the keycloak theme...⌚"); const extraPagesId: string[] = (parsedPackageJson as any)["keycloakify"]?.["extraPages"] ?? []; const extraThemeProperties: string[] = (parsedPackageJson as any)["keycloakify"]?.["extraThemeProperties"] ?? []; + const themeName = sanitizeThemeName(parsedPackageJson.name); generateKeycloakThemeResources({ keycloakThemeBuildingDirPath, "reactAppBuildDirPath": pathJoin(reactProjectDirPath, "build"), - "themeName": parsedPackageJson.name, + themeName, ...(() => { const url = (() => { @@ -61,7 +70,9 @@ export function main() { }); const { jarFilePath } = generateJavaStackFiles({ - parsedPackageJson, + version: parsedPackageJson.version, + themeName, + homepage: parsedPackageJson.homepage, keycloakThemeBuildingDirPath }); @@ -72,7 +83,7 @@ export function main() { generateDebugFiles({ keycloakThemeBuildingDirPath, - "packageJsonName": parsedPackageJson.name + themeName }); console.log([ @@ -106,7 +117,7 @@ export function main() { `👉 $ ./${pathRelative(reactProjectDirPath, pathJoin(keycloakThemeBuildingDirPath, containerLaunchScriptBasename))} 👈`, '', 'To enable the theme within keycloak log into the admin console ( 👉 http://localhost:8080 username: admin, password: admin 👈), create a realm (called "myrealm" for example),', - `go to your realm settings, click on the theme tab then select ${parsedPackageJson.name}.`, + `go to your realm settings, click on the theme tab then select ${themeName}.`, `More details: https://www.keycloak.org/getting-started/getting-started-docker`, '', 'Once your container is up and configured 👉 http://localhost:8080/auth/realms/myrealm/account 👈', diff --git a/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts b/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts index 5e93b189..5ccb30f0 100644 --- a/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +++ b/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts @@ -7,12 +7,12 @@ export const containerLaunchScriptBasename = "start_keycloak_testing_container.s /** Files for being able to run a hot reload keycloak container */ export function generateDebugFiles( params: { - packageJsonName: string; + themeName: string; keycloakThemeBuildingDirPath: string; } ) { - const { packageJsonName, keycloakThemeBuildingDirPath } = params; + const { themeName, keycloakThemeBuildingDirPath } = params; fs.writeFileSync( pathJoin(keycloakThemeBuildingDirPath, "Dockerfile"), @@ -32,7 +32,7 @@ export function generateDebugFiles( ) ); - const dockerImage = `${packageJsonName}/keycloak-hot-reload`; + const dockerImage = `${themeName}/keycloak-hot-reload`; const containerName = "keycloak-testing-container"; fs.writeFileSync( @@ -52,8 +52,8 @@ export function generateDebugFiles( ` --name ${containerName} \\`, " -e KEYCLOAK_USER=admin \\", " -e KEYCLOAK_PASSWORD=admin \\", - ` -v ${pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", packageJsonName) - }:/opt/jboss/keycloak/themes/${packageJsonName}:rw \\`, + ` -v ${pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", themeName) + }:/opt/jboss/keycloak/themes/${themeName}:rw \\`, ` -it ${dockerImage}:latest`, "" ].join("\n"), diff --git a/src/bin/build-keycloak-theme/generateJavaStackFiles.ts b/src/bin/build-keycloak-theme/generateJavaStackFiles.ts index ac44a9d1..7111dd7c 100644 --- a/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +++ b/src/bin/build-keycloak-theme/generateJavaStackFiles.ts @@ -3,21 +3,20 @@ import * as url from "url"; import * as fs from "fs"; import { join as pathJoin, dirname as pathDirname } from "path"; -export type ParsedPackageJson = { - name: string; - version: string; - homepage?: string; -}; export function generateJavaStackFiles( params: { - parsedPackageJson: ParsedPackageJson; + version: string; + themeName: string; + homepage?: string; keycloakThemeBuildingDirPath: string; } ): { jarFilePath: string; } { const { - parsedPackageJson: { name, version, homepage }, + themeName, + version, + homepage, keycloakThemeBuildingDirPath } = params; @@ -28,7 +27,7 @@ export function generateJavaStackFiles( const groupId = (() => { - const fallbackGroupId = `there.was.no.homepage.field.in.the.package.json.${name}`; + const fallbackGroupId = `there.was.no.homepage.field.in.the.package.json.${themeName}`; return (!homepage ? fallbackGroupId : @@ -37,7 +36,7 @@ export function generateJavaStackFiles( })(); - const artefactId = `${name}-keycloak-theme`; + const artefactId = `${themeName}-keycloak-theme`; const pomFileCode = [ ``, @@ -83,7 +82,7 @@ export function generateJavaStackFiles( JSON.stringify({ "themes": [ { - "name": name, + "name": themeName, "types": ["login"] } ] @@ -94,7 +93,7 @@ export function generateJavaStackFiles( } - return { "jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${name}-${version}.jar`) }; + return { "jarFilePath": pathJoin(keycloakThemeBuildingDirPath, "target", `${themeName}-${version}.jar`) }; }