diff --git a/src/bin/keycloakify/BuildOptions.ts b/src/bin/keycloakify/BuildOptions.ts index 52ddc14c..9c1a72f5 100644 --- a/src/bin/keycloakify/BuildOptions.ts +++ b/src/bin/keycloakify/BuildOptions.ts @@ -4,9 +4,10 @@ import type { Equals } from "tsafe"; import { id } from "tsafe/id"; import { parse as urlParse } from "url"; import { typeGuard } from "tsafe/typeGuard"; +import { symToStr } from "tsafe/symToStr"; -const BUNDLERS = ["mvn", "keycloakify", "none"] as const; -type Bundler = typeof BUNDLERS[number]; +const bundlers = ["mvn", "keycloakify", "none"] as const; +type Bundler = typeof bundlers[number]; type ParsedPackageJson = { name: string; version: string; @@ -32,7 +33,7 @@ const zParsedPackageJson = z.object({ "areAppAndKeycloakServerSharingSameDomain": z.boolean().optional(), "artifactId": z.string().optional(), "groupId": z.string().optional(), - "bundler": z.enum(BUNDLERS).optional() + "bundler": z.enum(bundlers).optional() }) .optional() }); @@ -51,7 +52,7 @@ export namespace BuildOptions { extraThemeProperties?: string[]; groupId: string; artifactId?: string; - bundler?: Bundler; + bundler: Bundler; }; export type Standalone = Common & { @@ -133,11 +134,12 @@ export function readBuildOptions(params: { assert( typeGuard( KEYCLOAKIFY_BUNDLER, - KEYCLOAKIFY_BUNDLER === undefined || id(BUNDLERS).includes(KEYCLOAKIFY_BUNDLER) - ) + [undefined, ...id(bundlers)].includes(KEYCLOAKIFY_BUNDLER) + ), + `${symToStr({ KEYCLOAKIFY_BUNDLER })} should be one of ${bundlers.join(", ")}` ); - return KEYCLOAKIFY_BUNDLER ?? bundler; + return KEYCLOAKIFY_BUNDLER ?? bundler ?? "keycloakify"; })(), "artifactId": process.env.KEYCLOAKIFY_ARTIFACT_ID ?? artifactId, "groupId": (() => { diff --git a/src/bin/keycloakify/keycloakify.ts b/src/bin/keycloakify/keycloakify.ts index 2f3f1d77..119e9c2d 100644 --- a/src/bin/keycloakify/keycloakify.ts +++ b/src/bin/keycloakify/keycloakify.ts @@ -8,6 +8,8 @@ import { readBuildOptions } from "./BuildOptions"; import { getLogger } from "../tools/logger"; import { getCliOptions } from "../tools/cliOptions"; import jar from "../tools/jar"; +import { assert } from "tsafe/assert"; +import type { Equals } from "tsafe"; const reactProjectDirPath = process.cwd(); @@ -51,22 +53,26 @@ export async function main() { buildOptions }); - if (buildOptions.bundler === "none") { - logger.log("😱 Skipping bundling step, there will be no jar"); - } else if (buildOptions.bundler === "keycloakify") { - logger.log("🫶 Let keycloakify do its thang"); - await jar({ - "rootPath": keycloakThemeBuildingDirPath, - "version": buildOptions.version, - "groupId": buildOptions.groupId, - "artifactId": buildOptions.artifactId || `${buildOptions.themeName}-keycloak-theme`, - "targetPath": jarFilePath - }); - } else { - logger.log("🫙 Run maven to deliver a jar"); - child_process.execSync("mvn package", { - "cwd": keycloakThemeBuildingDirPath - }); + switch (buildOptions.bundler) { + case "none": + logger.log("😱 Skipping bundling step, there will be no jar"); + break; + case "keycloakify": + logger.log("🫶 Let keycloakify do its thang"); + await jar({ + "rootPath": keycloakThemeBuildingDirPath, + "version": buildOptions.version, + "groupId": buildOptions.groupId, + "artifactId": buildOptions.artifactId || `${buildOptions.themeName}-keycloak-theme`, + "targetPath": jarFilePath + }); + break; + case "mvn": + logger.log("🫙 Run maven to deliver a jar"); + child_process.execSync("mvn package", { "cwd": keycloakThemeBuildingDirPath }); + break; + default: + assert>(false); } // We want, however, to test in a container running the latest Keycloak version