refactor
This commit is contained in:
@ -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;
|
||||||
|
@ -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) {
|
||||||
|
@ -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: {
|
@ -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,
|
||||||
|
Reference in New Issue
Block a user