This commit is contained in:
Joseph Garrone
2024-01-30 06:04:05 +01:00
parent 22fa1411bf
commit 8b24e23721
4 changed files with 28 additions and 29 deletions

View File

@ -2,7 +2,7 @@ export const nameOfTheGlobal = "kcContext";
export const keycloak_resources = "keycloak-resources"; export const keycloak_resources = "keycloak-resources";
export const resources_common = "resources-common"; export const resources_common = "resources-common";
export const lastKeycloakVersionWithAccountV1 = "21.1.2"; export const lastKeycloakVersionWithAccountV1 = "21.1.2";
export const keycloakifyViteConfigJsonBasename = ".keycloakifyViteConfig.json"; export const resolvedViteConfigJsonBasename = ".keycloakifyViteConfig.json";
export const basenameOfTheKeycloakifyResourcesDir = "build"; export const basenameOfTheKeycloakifyResourcesDir = "build";
export const themeTypes = ["login", "account"] as const; export const themeTypes = ["login", "account"] as const;

View File

@ -3,8 +3,7 @@ import { getParsedPackageJson } from "./parsedPackageJson";
import { join as pathJoin } from "path"; import { join as pathJoin } from "path";
import parseArgv from "minimist"; import parseArgv from "minimist";
import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath"; import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath";
import * as fs from "fs"; import { readResolvedViteConfig, getKeycloakifyBuildDirPath } from "./resolvedViteConfig";
import { getParsedKeycloakifyViteConfig, getKeycloakifyBuildDirPath } from "./parsedKeycloakifyViteConfig";
/** Consolidated build option gathered form CLI arguments and config in package.json */ /** Consolidated build option gathered form CLI arguments and config in package.json */
export type BuildOptions = { export type BuildOptions = {
@ -34,8 +33,8 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
const parsedPackageJson = getParsedPackageJson({ reactAppRootDirPath }); const parsedPackageJson = getParsedPackageJson({ reactAppRootDirPath });
const { parsedKeycloakifyViteConfig } = const { resolvedViteConfig } =
getParsedKeycloakifyViteConfig({ readResolvedViteConfig({
"parsedPackageJson_keycloakify_keycloakifyBuildDirPath": parsedPackageJson.keycloakify?.keycloakifyBuildDirPath, "parsedPackageJson_keycloakify_keycloakifyBuildDirPath": parsedPackageJson.keycloakify?.keycloakifyBuildDirPath,
reactAppRootDirPath reactAppRootDirPath
}) ?? {}; }) ?? {};
@ -60,12 +59,12 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
const { keycloakifyBuildDirPath } = getKeycloakifyBuildDirPath({ const { keycloakifyBuildDirPath } = getKeycloakifyBuildDirPath({
"parsedPackageJson_keycloakify_keycloakifyBuildDirPath": parsedPackageJson.keycloakify?.keycloakifyBuildDirPath, "parsedPackageJson_keycloakify_keycloakifyBuildDirPath": parsedPackageJson.keycloakify?.keycloakifyBuildDirPath,
reactAppRootDirPath, reactAppRootDirPath,
"bundler": parsedKeycloakifyViteConfig !== undefined ? "vite" : "webpack" "bundler": resolvedViteConfig !== undefined ? "vite" : "webpack"
}); });
//const keycloakifyBuildDirPath = keycloakifyBuildDirPath_vite ?? pathJoin(reactAppRootDirPath, "build_keycloak"); //const keycloakifyBuildDirPath = keycloakifyBuildDirPath_vite ?? pathJoin(reactAppRootDirPath, "build_keycloak");
return { return {
"bundler": parsedKeycloakifyViteConfig !== undefined ? "vite" : "webpack", "bundler": resolvedViteConfig !== undefined ? "vite" : "webpack",
"isSilent": (() => { "isSilent": (() => {
const argv = parseArgv(processArgv); const argv = parseArgv(processArgv);
@ -94,8 +93,8 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
"loginThemeResourcesFromKeycloakVersion": parsedPackageJson.keycloakify?.loginThemeResourcesFromKeycloakVersion ?? "11.0.3", "loginThemeResourcesFromKeycloakVersion": parsedPackageJson.keycloakify?.loginThemeResourcesFromKeycloakVersion ?? "11.0.3",
reactAppRootDirPath, reactAppRootDirPath,
"reactAppBuildDirPath": (() => { "reactAppBuildDirPath": (() => {
if (parsedKeycloakifyViteConfig !== undefined) { if (resolvedViteConfig !== undefined) {
return pathJoin(reactAppRootDirPath, parsedKeycloakifyViteConfig.buildDir); return pathJoin(reactAppRootDirPath, resolvedViteConfig.buildDir);
} }
if (parsedPackageJson.keycloakify?.reactAppBuildDirPath !== undefined) { if (parsedPackageJson.keycloakify?.reactAppBuildDirPath !== undefined) {
@ -109,8 +108,8 @@ export function readBuildOptions(params: { reactAppRootDirPath: string; processA
})(), })(),
"publicDirPath": (() => { "publicDirPath": (() => {
if (parsedKeycloakifyViteConfig !== undefined) { if (resolvedViteConfig !== undefined) {
return parsedKeycloakifyViteConfig.publicDirPath; return resolvedViteConfig.publicDirPath;
} }
if (process.env.PUBLIC_DIR_PATH !== undefined) { if (process.env.PUBLIC_DIR_PATH !== undefined) {

View File

@ -3,18 +3,18 @@ import { assert } from "tsafe";
import type { Equals } from "tsafe"; import type { Equals } from "tsafe";
import { z } from "zod"; import { z } from "zod";
import { pathJoin } from "../tools/pathJoin"; import { pathJoin } from "../tools/pathJoin";
import { keycloakifyViteConfigJsonBasename } from "../constants"; import { resolvedViteConfigJsonBasename } from "../constants";
import type { OptionalIfCanBeUndefined } from "../tools/OptionalIfCanBeUndefined"; import type { OptionalIfCanBeUndefined } from "../tools/OptionalIfCanBeUndefined";
import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath"; import { getAbsoluteAndInOsFormatPath } from "../tools/getAbsoluteAndInOsFormatPath";
export type ParsedKeycloakifyViteConfig = { export type ResolvedViteConfig = {
buildDir: string; buildDir: string;
publicDir: string; publicDir: string;
assetsDir: string; assetsDir: string;
urlPathname: string | undefined; urlPathname: string | undefined;
}; };
const zParsedKeycloakifyViteConfig = z.object({ const zResolvedViteConfig = z.object({
"buildDir": z.string(), "buildDir": z.string(),
"publicDir": z.string(), "publicDir": z.string(),
"assetsDir": z.string(), "assetsDir": z.string(),
@ -22,18 +22,18 @@ const zParsedKeycloakifyViteConfig = z.object({
}); });
{ {
type Got = ReturnType<(typeof zParsedKeycloakifyViteConfig)["parse"]>; type Got = ReturnType<(typeof zResolvedViteConfig)["parse"]>;
type Expected = OptionalIfCanBeUndefined<ParsedKeycloakifyViteConfig>; type Expected = OptionalIfCanBeUndefined<ResolvedViteConfig>;
assert<Equals<Got, Expected>>(); assert<Equals<Got, Expected>>();
} }
export function getParsedKeycloakifyViteConfig(params: { export function readResolvedViteConfig(params: {
reactAppRootDirPath: string; reactAppRootDirPath: string;
parsedPackageJson_keycloakify_keycloakifyBuildDirPath: string | undefined; parsedPackageJson_keycloakify_keycloakifyBuildDirPath: string | undefined;
}): }):
| { | {
parsedKeycloakifyViteConfig: ParsedKeycloakifyViteConfig; resolvedViteConfig: ResolvedViteConfig;
} }
| undefined { | undefined {
const { reactAppRootDirPath, parsedPackageJson_keycloakify_keycloakifyBuildDirPath } = params; const { reactAppRootDirPath, parsedPackageJson_keycloakify_keycloakifyBuildDirPath } = params;
@ -50,23 +50,23 @@ export function getParsedKeycloakifyViteConfig(params: {
"bundler": "vite" "bundler": "vite"
}); });
const parsedKeycloakifyViteConfig = (() => { const resolvedViteConfig = (() => {
const keycloakifyViteConfigJsonFilePath = pathJoin(keycloakifyBuildDirPath, keycloakifyViteConfigJsonBasename); const resolvedViteConfigJsonFilePath = pathJoin(keycloakifyBuildDirPath, resolvedViteConfigJsonBasename);
if (!fs.existsSync(keycloakifyViteConfigJsonFilePath)) { if (!fs.existsSync(resolvedViteConfigJsonFilePath)) {
throw new Error("Missing Keycloakify Vite plugin output."); throw new Error("Missing Keycloakify Vite plugin output.");
} }
let out: ParsedKeycloakifyViteConfig; let out: ResolvedViteConfig;
try { try {
out = JSON.parse(fs.readFileSync(keycloakifyViteConfigJsonFilePath).toString("utf8")); out = JSON.parse(fs.readFileSync(resolvedViteConfigJsonFilePath).toString("utf8"));
} catch { } catch {
throw new Error("The output of the Keycloakify Vite plugin is not a valid JSON."); throw new Error("The output of the Keycloakify Vite plugin is not a valid JSON.");
} }
try { try {
const zodParseReturn = zParsedKeycloakifyViteConfig.parse(out); const zodParseReturn = zResolvedViteConfig.parse(out);
// So that objectKeys from tsafe return the expected result no matter what. // So that objectKeys from tsafe return the expected result no matter what.
Object.keys(zodParseReturn) Object.keys(zodParseReturn)
@ -81,7 +81,7 @@ export function getParsedKeycloakifyViteConfig(params: {
return out; return out;
})(); })();
return { parsedKeycloakifyViteConfig }; return { resolvedViteConfig };
} }
export function getKeycloakifyBuildDirPath(params: { export function getKeycloakifyBuildDirPath(params: {

View File

@ -3,8 +3,8 @@ import { getParsedPackageJson } from "../bin/keycloakify/parsedPackageJson";
import type { Plugin } from "vite"; import type { Plugin } from "vite";
import { assert } from "tsafe/assert"; import { assert } from "tsafe/assert";
import * as fs from "fs"; import * as fs from "fs";
import { keycloakifyViteConfigJsonBasename, nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../bin/constants"; import { resolvedViteConfigJsonBasename, nameOfTheGlobal, basenameOfTheKeycloakifyResourcesDir } from "../bin/constants";
import { type ParsedKeycloakifyViteConfig, getKeycloakifyBuildDirPath } from "../bin/keycloakify/parsedKeycloakifyViteConfig"; import { type ResolvedViteConfig, getKeycloakifyBuildDirPath } from "../bin/keycloakify/resolvedViteConfig";
import { replaceAll } from "../bin/tools/String.prototype.replaceAll"; import { replaceAll } from "../bin/tools/String.prototype.replaceAll";
import { id } from "tsafe/id"; import { id } from "tsafe/id";
@ -46,10 +46,10 @@ export function keycloakify(): Plugin {
} }
fs.writeFileSync( fs.writeFileSync(
pathJoin(keycloakifyBuildDirPath, keycloakifyViteConfigJsonBasename), pathJoin(keycloakifyBuildDirPath, resolvedViteConfigJsonBasename),
Buffer.from( Buffer.from(
JSON.stringify( JSON.stringify(
id<ParsedKeycloakifyViteConfig>({ id<ResolvedViteConfig>({
"publicDir": pathRelative(reactAppRootDirPath, resolvedConfig.publicDir), "publicDir": pathRelative(reactAppRootDirPath, resolvedConfig.publicDir),
"assetsDir": resolvedConfig.build.assetsDir, "assetsDir": resolvedConfig.build.assetsDir,
"buildDir": resolvedConfig.build.outDir, "buildDir": resolvedConfig.build.outDir,