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 resources_common = "resources-common";
export const lastKeycloakVersionWithAccountV1 = "21.1.2";
export const keycloakifyViteConfigJsonBasename = ".keycloakifyViteConfig.json";
export const resolvedViteConfigJsonBasename = ".keycloakifyViteConfig.json";
export const basenameOfTheKeycloakifyResourcesDir = "build";
export const themeTypes = ["login", "account"] as const;

View File

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

View File

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

View File

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