diff --git a/src/bin/add-story.ts b/src/bin/add-story.ts index d8a776d7..05e61867 100644 --- a/src/bin/add-story.ts +++ b/src/bin/add-story.ts @@ -15,13 +15,13 @@ import { kebabCaseToCamelCase } from "./tools/kebabCaseToSnakeCase"; import { assert, Equals } from "tsafe/assert"; import { getThemeSrcDirPath } from "./shared/getThemeSrcDirPath"; import type { CliCommandOptions } from "./main"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import chalk from "chalk"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ + const buildContext = getBuildContext({ cliCommandOptions }); @@ -54,7 +54,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) console.log(`→ ${pageId}`); const { themeSrcDirPath } = getThemeSrcDirPath({ - projectDirPath: buildOptions.projectDirPath + projectDirPath: buildContext.projectDirPath }); const componentBasename = capitalize(kebabCaseToCamelCase(pageId)).replace( diff --git a/src/bin/copy-keycloak-resources-to-public.ts b/src/bin/copy-keycloak-resources-to-public.ts index d7a65f48..ff23cc61 100644 --- a/src/bin/copy-keycloak-resources-to-public.ts +++ b/src/bin/copy-keycloak-resources-to-public.ts @@ -1,13 +1,13 @@ import { copyKeycloakResourcesToPublic } from "./shared/copyKeycloakResourcesToPublic"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import type { CliCommandOptions } from "./main"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ cliCommandOptions }); + const buildContext = getBuildContext({ cliCommandOptions }); await copyKeycloakResourcesToPublic({ - buildOptions + buildContext }); } diff --git a/src/bin/download-keycloak-default-theme.ts b/src/bin/download-keycloak-default-theme.ts index 7e4b3c91..886b4170 100644 --- a/src/bin/download-keycloak-default-theme.ts +++ b/src/bin/download-keycloak-default-theme.ts @@ -1,6 +1,6 @@ import { join as pathJoin, relative as pathRelative, sep as pathSep } from "path"; import { promptKeycloakVersion } from "./shared/promptKeycloakVersion"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import { downloadKeycloakDefaultTheme } from "./shared/downloadKeycloakDefaultTheme"; import { transformCodebase } from "./tools/transformCodebase"; import type { CliCommandOptions } from "./main"; @@ -9,7 +9,7 @@ import chalk from "chalk"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ + const buildContext = getBuildContext({ cliCommandOptions }); @@ -21,13 +21,13 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { keycloakVersion } = await promptKeycloakVersion({ startingFromMajor: undefined, - cacheDirPath: buildOptions.cacheDirPath + cacheDirPath: buildContext.cacheDirPath }); console.log(`→ ${keycloakVersion}`); const destDirPath = pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", @@ -51,7 +51,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({ keycloakVersion, - buildOptions + buildContext }); transformCodebase({ diff --git a/src/bin/eject-page.ts b/src/bin/eject-page.ts index c3119973..1b483ec9 100644 --- a/src/bin/eject-page.ts +++ b/src/bin/eject-page.ts @@ -17,13 +17,13 @@ import { kebabCaseToCamelCase } from "./tools/kebabCaseToSnakeCase"; import { assert, Equals } from "tsafe/assert"; import { getThemeSrcDirPath } from "./shared/getThemeSrcDirPath"; import type { CliCommandOptions } from "./main"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import chalk from "chalk"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ + const buildContext = getBuildContext({ cliCommandOptions }); @@ -69,7 +69,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) console.log(`→ ${pageIdOrComponent}`); const { themeSrcDirPath } = getThemeSrcDirPath({ - projectDirPath: buildOptions.projectDirPath + projectDirPath: buildContext.projectDirPath }); const componentBasename = (() => { diff --git a/src/bin/initialize-email-theme.ts b/src/bin/initialize-email-theme.ts index 3080f0a9..d825bb7e 100644 --- a/src/bin/initialize-email-theme.ts +++ b/src/bin/initialize-email-theme.ts @@ -2,7 +2,7 @@ import { downloadKeycloakDefaultTheme } from "./shared/downloadKeycloakDefaultTh import { join as pathJoin, relative as pathRelative } from "path"; import { transformCodebase } from "./tools/transformCodebase"; import { promptKeycloakVersion } from "./shared/promptKeycloakVersion"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import * as fs from "fs"; import { getThemeSrcDirPath } from "./shared/getThemeSrcDirPath"; import type { CliCommandOptions } from "./main"; @@ -10,10 +10,10 @@ import type { CliCommandOptions } from "./main"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ cliCommandOptions }); + const buildContext = getBuildContext({ cliCommandOptions }); const { themeSrcDirPath } = getThemeSrcDirPath({ - projectDirPath: buildOptions.projectDirPath + projectDirPath: buildContext.projectDirPath }); const emailThemeSrcDirPath = pathJoin(themeSrcDirPath, "email"); @@ -34,12 +34,12 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { keycloakVersion } = await promptKeycloakVersion({ // NOTE: This is arbitrary startingFromMajor: 17, - cacheDirPath: buildOptions.cacheDirPath + cacheDirPath: buildContext.cacheDirPath }); const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({ keycloakVersion, - buildOptions + buildContext }); transformCodebase({ diff --git a/src/bin/keycloakify/buildJars/buildJar.ts b/src/bin/keycloakify/buildJars/buildJar.ts index 6f0b1a0b..429824d4 100644 --- a/src/bin/keycloakify/buildJars/buildJar.ts +++ b/src/bin/keycloakify/buildJars/buildJar.ts @@ -5,12 +5,12 @@ import type { } from "./extensionVersions"; import { join as pathJoin, dirname as pathDirname } from "path"; import { transformCodebase } from "../../tools/transformCodebase"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import * as fs from "fs/promises"; import { accountV1ThemeName } from "../../shared/constants"; import { generatePom, - BuildOptionsLike as BuildOptionsLike_generatePom + BuildContextLike as BuildContextLike_generatePom } from "./generatePom"; import { readFileSync } from "fs"; import { isInside } from "../../tools/isInside"; @@ -18,7 +18,7 @@ import child_process from "child_process"; import { rmSync } from "../../tools/fs.rmSync"; import { getMetaInfKeycloakThemesJsonFilePath } from "../../shared/metaInfKeycloakThemes"; -export type BuildOptionsLike = BuildOptionsLike_generatePom & { +export type BuildContextLike = BuildContextLike_generatePom & { keycloakifyBuildDirPath: string; themeNames: string[]; artifactId: string; @@ -26,23 +26,23 @@ export type BuildOptionsLike = BuildOptionsLike_generatePom & { cacheDirPath: string; }; -assert(); +assert(); export async function buildJar(params: { jarFileBasename: string; keycloakAccountV1Version: KeycloakAccountV1Version; keycloakThemeAdditionalInfoExtensionVersion: KeycloakThemeAdditionalInfoExtensionVersion; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise { const { jarFileBasename, keycloakAccountV1Version, keycloakThemeAdditionalInfoExtensionVersion, - buildOptions + buildContext } = params; const keycloakifyBuildTmpDirPath = pathJoin( - buildOptions.cacheDirPath, + buildContext.cacheDirPath, jarFileBasename.replace(".jar", "") ); @@ -62,7 +62,7 @@ export async function buildJar(params: { return { modifiedSourceCode: sourceCode }; } - for (const themeName of [...buildOptions.themeNames, accountV1ThemeName]) { + for (const themeName of [...buildContext.themeNames, accountV1ThemeName]) { if ( isInside({ dirPath: pathJoin("src", "main", "resources", "theme", themeName), @@ -125,7 +125,7 @@ export async function buildJar(params: { }; } - for (const themeName of buildOptions.themeNames) { + for (const themeName of buildContext.themeNames) { if ( fileRelativePath === pathJoin( @@ -160,7 +160,7 @@ export async function buildJar(params: { }; transformCodebase({ - srcDirPath: buildOptions.keycloakifyBuildDirPath, + srcDirPath: buildContext.keycloakifyBuildDirPath, destDirPath: keycloakifyBuildTmpDirPath, transformSourceCode: params => { const resultCommon = transformCodebase_common(params); @@ -203,7 +203,7 @@ export async function buildJar(params: { } (["register.ftl", "login-update-profile.ftl"] as const).forEach(pageId => - buildOptions.themeNames.map(themeName => { + buildContext.themeNames.map(themeName => { const ftlFilePath = pathJoin( keycloakifyBuildTmpDirPath, "src", @@ -244,7 +244,7 @@ export async function buildJar(params: { { const { pomFileCode } = generatePom({ - buildOptions, + buildContext, keycloakAccountV1Version, keycloakThemeAdditionalInfoExtensionVersion }); @@ -285,9 +285,9 @@ export async function buildJar(params: { pathJoin( keycloakifyBuildTmpDirPath, "target", - `${buildOptions.artifactId}-${buildOptions.themeVersion}.jar` + `${buildContext.artifactId}-${buildContext.themeVersion}.jar` ), - pathJoin(buildOptions.keycloakifyBuildDirPath, jarFileBasename) + pathJoin(buildContext.keycloakifyBuildDirPath, jarFileBasename) ); rmSync(keycloakifyBuildTmpDirPath, { recursive: true }); diff --git a/src/bin/keycloakify/buildJars/buildJars.ts b/src/bin/keycloakify/buildJars/buildJars.ts index 05d3aecc..d7939780 100644 --- a/src/bin/keycloakify/buildJars/buildJars.ts +++ b/src/bin/keycloakify/buildJars/buildJars.ts @@ -5,25 +5,25 @@ import { keycloakThemeAdditionalInfoExtensionVersions } from "./extensionVersions"; import { getKeycloakVersionRangeForJar } from "./getKeycloakVersionRangeForJar"; -import { buildJar, BuildOptionsLike as BuildOptionsLike_buildJar } from "./buildJar"; -import type { BuildOptions } from "../../shared/buildOptions"; +import { buildJar, BuildContextLike as BuildContextLike_buildJar } from "./buildJar"; +import type { BuildContext } from "../../shared/buildContext"; import { getJarFileBasename } from "../../shared/getJarFileBasename"; import { readMetaInfKeycloakThemes } from "../../shared/metaInfKeycloakThemes"; import { accountV1ThemeName } from "../../shared/constants"; -export type BuildOptionsLike = BuildOptionsLike_buildJar & { +export type BuildContextLike = BuildContextLike_buildJar & { keycloakifyBuildDirPath: string; }; -assert(); +assert(); export async function buildJars(params: { - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise { - const { buildOptions } = params; + const { buildContext } = params; const doesImplementAccountTheme = readMetaInfKeycloakThemes({ - keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath + keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath }).themes.some(({ name }) => name === accountV1ThemeName); await Promise.all( @@ -71,7 +71,7 @@ export async function buildJars(params: { jarFileBasename, keycloakAccountV1Version, keycloakThemeAdditionalInfoExtensionVersion, - buildOptions + buildContext }) ) ) diff --git a/src/bin/keycloakify/buildJars/generatePom.ts b/src/bin/keycloakify/buildJars/generatePom.ts index e28ed841..93faa112 100644 --- a/src/bin/keycloakify/buildJars/generatePom.ts +++ b/src/bin/keycloakify/buildJars/generatePom.ts @@ -1,27 +1,27 @@ import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import type { KeycloakAccountV1Version, KeycloakThemeAdditionalInfoExtensionVersion } from "./extensionVersions"; -export type BuildOptionsLike = { +export type BuildContextLike = { groupId: string; artifactId: string; themeVersion: string; }; -assert(); +assert(); export function generatePom(params: { keycloakAccountV1Version: KeycloakAccountV1Version; keycloakThemeAdditionalInfoExtensionVersion: KeycloakThemeAdditionalInfoExtensionVersion; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { const { keycloakAccountV1Version, keycloakThemeAdditionalInfoExtensionVersion, - buildOptions + buildContext } = params; const { pomFileCode } = (function generatePomFileCode(): { @@ -33,10 +33,10 @@ export function generatePom(params: { ` xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`, ` xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">`, ` 4.0.0`, - ` ${buildOptions.groupId}`, - ` ${buildOptions.artifactId}`, - ` ${buildOptions.themeVersion}`, - ` ${buildOptions.artifactId}`, + ` ${buildContext.groupId}`, + ` ${buildContext.artifactId}`, + ` ${buildContext.themeVersion}`, + ` ${buildContext.artifactId}`, ` `, ` jar`, ` `, diff --git a/src/bin/keycloakify/generateFtl/generateFtl.ts b/src/bin/keycloakify/generateFtl/generateFtl.ts index 8aa81d68..56475d66 100644 --- a/src/bin/keycloakify/generateFtl/generateFtl.ts +++ b/src/bin/keycloakify/generateFtl/generateFtl.ts @@ -4,7 +4,7 @@ import { generateCssCodeToDefineGlobals } from "../replacers/replaceImportsInCss import { replaceImportsInInlineCssCode } from "../replacers/replaceImportsInInlineCssCode"; import * as fs from "fs"; import { join as pathJoin } from "path"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { assert } from "tsafe/assert"; import { type ThemeType, @@ -15,7 +15,7 @@ import { } from "../../shared/constants"; import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath"; -export type BuildOptionsLike = { +export type BuildContextLike = { bundler: "vite" | "webpack"; themeVersion: string; urlPathname: string | undefined; @@ -24,13 +24,13 @@ export type BuildOptionsLike = { kcContextExclusionsFtlCode: string | undefined; }; -assert(); +assert(); export function generateFtlFilesCodeFactory(params: { themeName: string; indexHtmlCode: string; cssGlobalsToDefine: Record; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; keycloakifyVersion: string; themeType: ThemeType; fieldNames: string[]; @@ -39,7 +39,7 @@ export function generateFtlFilesCodeFactory(params: { themeName, cssGlobalsToDefine, indexHtmlCode, - buildOptions, + buildContext, keycloakifyVersion, themeType, fieldNames @@ -55,7 +55,7 @@ export function generateFtlFilesCodeFactory(params: { const { fixedJsCode } = replaceImportsInJsCode({ jsCode, - buildOptions + buildContext }); $(element).text(fixedJsCode); @@ -68,7 +68,7 @@ export function generateFtlFilesCodeFactory(params: { const { fixedCssCode } = replaceImportsInInlineCssCode({ cssCode, - buildOptions + buildContext }); $(element).text(fixedCssCode); @@ -91,7 +91,7 @@ export function generateFtlFilesCodeFactory(params: { attrName, href.replace( new RegExp( - `^${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}` + `^${(buildContext.urlPathname ?? "/").replace(/\//g, "\\/")}` ), `\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/` ) @@ -106,7 +106,7 @@ export function generateFtlFilesCodeFactory(params: { "", "" @@ -134,7 +134,7 @@ export function generateFtlFilesCodeFactory(params: { fieldNames.map(name => `"${name}"`).join(", ") ) .replace("KEYCLOAKIFY_VERSION_xEdKd3xEdr", keycloakifyVersion) - .replace("KEYCLOAKIFY_THEME_VERSION_sIgKd3xEdr3dx", buildOptions.themeVersion) + .replace("KEYCLOAKIFY_THEME_VERSION_sIgKd3xEdr3dx", buildContext.themeVersion) .replace("KEYCLOAKIFY_THEME_TYPE_dExKd3xEdr", themeType) .replace("KEYCLOAKIFY_THEME_NAME_cXxKd3xEer", themeName) .replace("RESOURCES_COMMON_cLsLsMrtDkpVv", resources_common) @@ -144,7 +144,7 @@ export function generateFtlFilesCodeFactory(params: { ) .replace( "USER_DEFINED_EXCLUSIONS_eKsaY4ZsZ4eMr2", - buildOptions.kcContextExclusionsFtlCode ?? "" + buildContext.kcContextExclusionsFtlCode ?? "" ); const ftlObjectToJsCodeDeclaringAnObjectPlaceholder = '{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }'; diff --git a/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts b/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts index 5429d467..f2a9de6f 100644 --- a/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +++ b/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts @@ -1,7 +1,7 @@ import * as fs from "fs"; import { join as pathJoin } from "path"; import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { resources_common, lastKeycloakVersionWithAccountV1, @@ -10,24 +10,24 @@ import { import { downloadKeycloakDefaultTheme } from "../../shared/downloadKeycloakDefaultTheme"; import { transformCodebase } from "../../tools/transformCodebase"; -export type BuildOptionsLike = { +export type BuildContextLike = { cacheDirPath: string; npmWorkspaceRootDirPath: string; keycloakifyBuildDirPath: string; }; -assert(); +assert(); -export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike }) { - const { buildOptions } = params; +export async function bringInAccountV1(params: { buildContext: BuildContextLike }) { + const { buildContext } = params; const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({ keycloakVersion: lastKeycloakVersionWithAccountV1, - buildOptions + buildContext }); const accountV1DirPath = pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", diff --git a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts index bf0e6f5d..4e7035ee 100644 --- a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +++ b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts @@ -1,34 +1,34 @@ -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { assert } from "tsafe/assert"; import { generateSrcMainResourcesForMainTheme, - type BuildOptionsLike as BuildOptionsLike_generateSrcMainResourcesForMainTheme + type BuildContextLike as BuildContextLike_generateSrcMainResourcesForMainTheme } from "./generateSrcMainResourcesForMainTheme"; import { generateSrcMainResourcesForThemeVariant } from "./generateSrcMainResourcesForThemeVariant"; -export type BuildOptionsLike = BuildOptionsLike_generateSrcMainResourcesForMainTheme & { +export type BuildContextLike = BuildContextLike_generateSrcMainResourcesForMainTheme & { themeNames: string[]; }; -assert(); +assert(); export async function generateSrcMainResources(params: { - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise { - const { buildOptions } = params; + const { buildContext } = params; - const [themeName, ...themeVariantNames] = buildOptions.themeNames; + const [themeName, ...themeVariantNames] = buildContext.themeNames; await generateSrcMainResourcesForMainTheme({ themeName, - buildOptions + buildContext }); for (const themeVariantName of themeVariantNames) { generateSrcMainResourcesForThemeVariant({ themeName, themeVariantName, - buildOptions + buildContext }); } } diff --git a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts index 4a2e66c3..a979c8eb 100644 --- a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +++ b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts @@ -5,7 +5,7 @@ import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode"; import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode"; import { generateFtlFilesCodeFactory, - type BuildOptionsLike as BuildOptionsLike_kcContextExclusionsFtlCode + type BuildContextLike as BuildContextLike_kcContextExclusionsFtlCode } from "../generateFtl"; import { type ThemeType, @@ -17,18 +17,18 @@ import { accountThemePageIds } from "../../shared/constants"; import { isInside } from "../../tools/isInside"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { assert, type Equals } from "tsafe/assert"; import { downloadKeycloakStaticResources, - type BuildOptionsLike as BuildOptionsLike_downloadKeycloakStaticResources + type BuildContextLike as BuildContextLike_downloadKeycloakStaticResources } from "../../shared/downloadKeycloakStaticResources"; import { readFieldNameUsage } from "./readFieldNameUsage"; import { readExtraPagesNames } from "./readExtraPageNames"; import { generateMessageProperties } from "./generateMessageProperties"; import { bringInAccountV1, - type BuildOptionsLike as BuildOptionsLike_bringInAccountV1 + type BuildContextLike as BuildContextLike_bringInAccountV1 } from "./bringInAccountV1"; import { getThemeSrcDirPath } from "../../shared/getThemeSrcDirPath"; import { rmSync } from "../../tools/fs.rmSync"; @@ -40,9 +40,9 @@ import { import { objectEntries } from "tsafe/objectEntries"; import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile"; -export type BuildOptionsLike = BuildOptionsLike_kcContextExclusionsFtlCode & - BuildOptionsLike_downloadKeycloakStaticResources & - BuildOptionsLike_bringInAccountV1 & { +export type BuildContextLike = BuildContextLike_kcContextExclusionsFtlCode & + BuildContextLike_downloadKeycloakStaticResources & + BuildContextLike_bringInAccountV1 & { bundler: "vite" | "webpack"; extraThemeProperties: string[] | undefined; loginThemeResourcesFromKeycloakVersion: string; @@ -54,22 +54,22 @@ export type BuildOptionsLike = BuildOptionsLike_kcContextExclusionsFtlCode & environmentVariables: { name: string; default: string }[]; }; -assert(); +assert(); export async function generateSrcMainResourcesForMainTheme(params: { themeName: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise { - const { themeName, buildOptions } = params; + const { themeName, buildContext } = params; const { themeSrcDirPath } = getThemeSrcDirPath({ - projectDirPath: buildOptions.projectDirPath + projectDirPath: buildContext.projectDirPath }); const getThemeTypeDirPath = (params: { themeType: ThemeType | "email" }) => { const { themeType } = params; return pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", @@ -124,7 +124,7 @@ export async function generateSrcMainResourcesForMainTheme(params: { } transformCodebase({ - srcDirPath: buildOptions.projectBuildDirPath, + srcDirPath: buildContext.projectBuildDirPath, destDirPath, transformSourceCode: ({ filePath, sourceCode }) => { //NOTE: Prevent cycles, excludes the folder we generated for debug in public/ @@ -132,7 +132,7 @@ export async function generateSrcMainResourcesForMainTheme(params: { if ( isInside({ dirPath: pathJoin( - buildOptions.projectBuildDirPath, + buildContext.projectBuildDirPath, keycloak_resources ), filePath @@ -163,7 +163,7 @@ export async function generateSrcMainResourcesForMainTheme(params: { if (/\.js?$/i.test(filePath)) { const { fixedJsCode } = replaceImportsInJsCode({ jsCode: sourceCode.toString("utf8"), - buildOptions + buildContext }); return { @@ -179,10 +179,10 @@ export async function generateSrcMainResourcesForMainTheme(params: { const { generateFtlFilesCode } = generateFtlFilesCodeFactory({ themeName, indexHtmlCode: fs - .readFileSync(pathJoin(buildOptions.projectBuildDirPath, "index.html")) + .readFileSync(pathJoin(buildContext.projectBuildDirPath, "index.html")) .toString("utf8"), cssGlobalsToDefine, - buildOptions, + buildContext, keycloakifyVersion: readThisNpmPackageVersion(), themeType, fieldNames: readFieldNameUsage({ @@ -242,12 +242,12 @@ export async function generateSrcMainResourcesForMainTheme(params: { case "account": return lastKeycloakVersionWithAccountV1; case "login": - return buildOptions.loginThemeResourcesFromKeycloakVersion; + return buildContext.loginThemeResourcesFromKeycloakVersion; } })(), themeDirPath: pathResolve(pathJoin(themeTypeDirPath, "..")), themeType, - buildOptions + buildContext }); fs.writeFileSync( @@ -263,8 +263,8 @@ export async function generateSrcMainResourcesForMainTheme(params: { } assert>(false); })()}`, - ...(buildOptions.extraThemeProperties ?? []), - buildOptions.environmentVariables.map( + ...(buildContext.extraThemeProperties ?? []), + buildContext.environmentVariables.map( ({ name, default: defaultValue }) => `${name}=\${env.${name}:${escapeStringForPropertiesFile(defaultValue)}}` ) @@ -291,7 +291,7 @@ export async function generateSrcMainResourcesForMainTheme(params: { if (implementedThemeTypes.account) { await bringInAccountV1({ - buildOptions + buildContext }); } @@ -313,7 +313,7 @@ export async function generateSrcMainResourcesForMainTheme(params: { } writeMetaInfKeycloakThemes({ - keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath, + keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath, metaInfKeycloakThemes }); } diff --git a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts index 519c6c69..4a343c53 100644 --- a/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +++ b/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts @@ -1,27 +1,27 @@ import { join as pathJoin, extname as pathExtname, sep as pathSep } from "path"; import { transformCodebase } from "../../tools/transformCodebase"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { readMetaInfKeycloakThemes, writeMetaInfKeycloakThemes } from "../../shared/metaInfKeycloakThemes"; import { assert } from "tsafe/assert"; -export type BuildOptionsLike = { +export type BuildContextLike = { keycloakifyBuildDirPath: string; }; -assert(); +assert(); export function generateSrcMainResourcesForThemeVariant(params: { themeName: string; themeVariantName: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { - const { themeName, themeVariantName, buildOptions } = params; + const { themeName, themeVariantName, buildContext } = params; const mainThemeDirPath = pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", @@ -58,7 +58,7 @@ export function generateSrcMainResourcesForThemeVariant(params: { { const updatedMetaInfKeycloakThemes = readMetaInfKeycloakThemes({ - keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath + keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath }); updatedMetaInfKeycloakThemes.themes.push({ @@ -73,7 +73,7 @@ export function generateSrcMainResourcesForThemeVariant(params: { }); writeMetaInfKeycloakThemes({ - keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath, + keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath, metaInfKeycloakThemes: updatedMetaInfKeycloakThemes }); } diff --git a/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts b/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts index bf7f8ad0..98cf0c5b 100644 --- a/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +++ b/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts @@ -5,15 +5,15 @@ import { basename as pathBasename } from "path"; import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../shared/buildOptions"; +import type { BuildContext } from "../shared/buildContext"; import { accountV1ThemeName } from "../shared/constants"; -export type BuildOptionsLike = { +export type BuildContextLike = { keycloakifyBuildDirPath: string; themeNames: string[]; }; -assert(); +assert(); generateStartKeycloakTestingContainer.basename = "start_keycloak_testing_container.sh"; @@ -24,15 +24,15 @@ const keycloakVersion = "24.0.4"; export function generateStartKeycloakTestingContainer(params: { jarFilePath: string; doesImplementAccountTheme: boolean; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { - const { jarFilePath, doesImplementAccountTheme, buildOptions } = params; + const { jarFilePath, doesImplementAccountTheme, buildContext } = params; const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme"); fs.writeFileSync( pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, generateStartKeycloakTestingContainer.basename ), Buffer.from( @@ -41,7 +41,7 @@ export function generateStartKeycloakTestingContainer(params: { "", `docker rm ${containerName} || true`, "", - `cd "${buildOptions.keycloakifyBuildDirPath}"`, + `cd "${buildContext.keycloakifyBuildDirPath}"`, "", "docker run \\", " -p 8080:8080 \\", @@ -50,11 +50,11 @@ export function generateStartKeycloakTestingContainer(params: { " -e KEYCLOAK_ADMIN_PASSWORD=admin \\", ` -v "${pathJoin( "$(pwd)", - pathRelative(buildOptions.keycloakifyBuildDirPath, jarFilePath) + pathRelative(buildContext.keycloakifyBuildDirPath, jarFilePath) )}":"/opt/keycloak/providers/${pathBasename(jarFilePath)}" \\`, [ ...(doesImplementAccountTheme ? [accountV1ThemeName] : []), - ...buildOptions.themeNames + ...buildContext.themeNames ].map( themeName => ` -v "${pathJoin( diff --git a/src/bin/keycloakify/keycloakify.ts b/src/bin/keycloakify/keycloakify.ts index 759886ab..c7513c3d 100644 --- a/src/bin/keycloakify/keycloakify.ts +++ b/src/bin/keycloakify/keycloakify.ts @@ -2,7 +2,7 @@ import { generateSrcMainResources } from "./generateSrcMainResources"; import { join as pathJoin, relative as pathRelative, sep as pathSep } from "path"; import * as child_process from "child_process"; import * as fs from "fs"; -import { readBuildOptions } from "../shared/buildOptions"; +import { getBuildContext } from "../shared/buildContext"; import { vitePluginSubScriptEnvNames, skipBuildJarsEnvName } from "../shared/constants"; import { buildJars } from "./buildJars"; import type { CliCommandOptions } from "../main"; @@ -47,7 +47,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ cliCommandOptions }); + const buildContext = getBuildContext({ cliCommandOptions }); console.log( [ @@ -55,7 +55,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) chalk.green( `Building the keycloak theme in .${pathSep}${pathRelative( process.cwd(), - buildOptions.keycloakifyBuildDirPath + buildContext.keycloakifyBuildDirPath )} ...` ) ].join(" ") @@ -64,31 +64,31 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const startTime = Date.now(); { - if (!fs.existsSync(buildOptions.keycloakifyBuildDirPath)) { - fs.mkdirSync(buildOptions.keycloakifyBuildDirPath, { + if (!fs.existsSync(buildContext.keycloakifyBuildDirPath)) { + fs.mkdirSync(buildContext.keycloakifyBuildDirPath, { recursive: true }); } fs.writeFileSync( - pathJoin(buildOptions.keycloakifyBuildDirPath, ".gitignore"), + pathJoin(buildContext.keycloakifyBuildDirPath, ".gitignore"), Buffer.from("*", "utf8") ); } - await generateSrcMainResources({ buildOptions }); + await generateSrcMainResources({ buildContext }); run_post_build_script: { - if (buildOptions.bundler !== "vite") { + if (buildContext.bundler !== "vite") { break run_post_build_script; } child_process.execSync("npx vite", { - cwd: buildOptions.projectDirPath, + cwd: buildContext.projectDirPath, env: { ...process.env, [vitePluginSubScriptEnvNames.runPostBuildScript]: - JSON.stringify(buildOptions) + JSON.stringify(buildContext) } }); } @@ -98,7 +98,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) break build_jars; } - await buildJars({ buildOptions }); + await buildJars({ buildContext }); } console.log( diff --git a/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts b/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts index 780b81ae..3f20978d 100644 --- a/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +++ b/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts @@ -1,13 +1,13 @@ import * as crypto from "crypto"; -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { assert } from "tsafe/assert"; import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants"; -export type BuildOptionsLike = { +export type BuildContextLike = { urlPathname: string | undefined; }; -assert(); +assert(); export function replaceImportsInCssCode(params: { cssCode: string }): { fixedCssCode: string; @@ -44,11 +44,11 @@ export function replaceImportsInCssCode(params: { cssCode: string }): { export function generateCssCodeToDefineGlobals(params: { cssGlobalsToDefine: Record; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): { cssCodeToPrependInHead: string; } { - const { cssGlobalsToDefine, buildOptions } = params; + const { cssGlobalsToDefine, buildContext } = params; return { cssCodeToPrependInHead: [ @@ -59,7 +59,7 @@ export function generateCssCodeToDefineGlobals(params: { `--${cssVariableName}:`, cssGlobalsToDefine[cssVariableName].replace( new RegExp( - `url\\(${(buildOptions.urlPathname ?? "/").replace( + `url\\(${(buildContext.urlPathname ?? "/").replace( /\//g, "\\/" )}`, diff --git a/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts b/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts index f7d7ddb0..60faea32 100644 --- a/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +++ b/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts @@ -1,25 +1,25 @@ -import type { BuildOptions } from "../../shared/buildOptions"; +import type { BuildContext } from "../../shared/buildContext"; import { assert } from "tsafe/assert"; import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants"; -export type BuildOptionsLike = { +export type BuildContextLike = { urlPathname: string | undefined; }; -assert(); +assert(); export function replaceImportsInInlineCssCode(params: { cssCode: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): { fixedCssCode: string; } { - const { cssCode, buildOptions } = params; + const { cssCode, buildContext } = params; const fixedCssCode = cssCode.replace( - buildOptions.urlPathname === undefined + buildContext.urlPathname === undefined ? /url\(["']?\/([^/][^)"']+)["']?\)/g - : new RegExp(`url\\(["']?${buildOptions.urlPathname}([^)"']+)["']?\\)`, "g"), + : new RegExp(`url\\(["']?${buildContext.urlPathname}([^)"']+)["']?\\)`, "g"), (...[, group]) => `url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})` ); diff --git a/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts b/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts index 3bb7603f..06e08a2c 100644 --- a/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +++ b/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts @@ -1,38 +1,38 @@ import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../../../shared/buildOptions"; +import type { BuildContext } from "../../../shared/buildContext"; import { replaceImportsInJsCode_vite } from "./vite"; import { replaceImportsInJsCode_webpack } from "./webpack"; import * as fs from "fs"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectBuildDirPath: string; assetsDirPath: string; urlPathname: string | undefined; bundler: "vite" | "webpack"; }; -assert(); +assert(); export function replaceImportsInJsCode(params: { jsCode: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { - const { jsCode, buildOptions } = params; + const { jsCode, buildContext } = params; const { fixedJsCode } = (() => { - switch (buildOptions.bundler) { + switch (buildContext.bundler) { case "vite": return replaceImportsInJsCode_vite({ jsCode, - buildOptions, + buildContext, basenameOfAssetsFiles: readAssetsDirSync({ - assetsDirPath: params.buildOptions.assetsDirPath + assetsDirPath: params.buildContext.assetsDirPath }) }); case "webpack": return replaceImportsInJsCode_webpack({ jsCode, - buildOptions + buildContext }); } })(); diff --git a/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts b/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts index 008a9958..9fa0dc1f 100644 --- a/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +++ b/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts @@ -3,21 +3,21 @@ import { basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants"; import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../../../shared/buildOptions"; +import type { BuildContext } from "../../../shared/buildContext"; import * as nodePath from "path"; import { replaceAll } from "../../../tools/String.prototype.replaceAll"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectBuildDirPath: string; assetsDirPath: string; urlPathname: string | undefined; }; -assert(); +assert(); export function replaceImportsInJsCode_vite(params: { jsCode: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; basenameOfAssetsFiles: string[]; systemType?: "posix" | "win32"; }): { @@ -25,7 +25,7 @@ export function replaceImportsInJsCode_vite(params: { } { const { jsCode, - buildOptions, + buildContext, basenameOfAssetsFiles, systemType = nodePath.sep === "/" ? "posix" : "win32" } = params; @@ -35,11 +35,11 @@ export function replaceImportsInJsCode_vite(params: { let fixedJsCode = jsCode; replace_base_javacript_import: { - if (buildOptions.urlPathname === undefined) { + if (buildContext.urlPathname === undefined) { break replace_base_javacript_import; } // Optimization - if (!jsCode.includes(buildOptions.urlPathname)) { + if (!jsCode.includes(buildContext.urlPathname)) { break replace_base_javacript_import; } @@ -47,7 +47,7 @@ export function replaceImportsInJsCode_vite(params: { fixedJsCode = fixedJsCode.replace( new RegExp( `([\\w\\$][\\w\\d\\$]*)=function\\(([\\w\\$][\\w\\d\\$]*)\\)\\{return"${replaceAll( - buildOptions.urlPathname, + buildContext.urlPathname, "/", "\\/" )}"\\+\\2\\}`, @@ -62,8 +62,8 @@ export function replaceImportsInJsCode_vite(params: { // Example: "assets/ or "foo/bar/" const staticDir = (() => { let out = pathRelative( - buildOptions.projectBuildDirPath, - buildOptions.assetsDirPath + buildContext.projectBuildDirPath, + buildContext.assetsDirPath ); out = replaceAll(out, pathSep, "/") + "/"; @@ -93,7 +93,7 @@ export function replaceImportsInJsCode_vite(params: { fixedJsCode = replaceAll( fixedJsCode, - `"${buildOptions.urlPathname ?? "/"}${relativePathOfAssetFile}"`, + `"${buildContext.urlPathname ?? "/"}${relativePathOfAssetFile}"`, `(window.${nameOfTheGlobal}.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/${relativePathOfAssetFile}")` ); }); diff --git a/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts b/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts index 55c6e16a..3f392062 100644 --- a/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +++ b/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts @@ -3,28 +3,28 @@ import { basenameOfTheKeycloakifyResourcesDir } from "../../../shared/constants"; import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../../../shared/buildOptions"; +import type { BuildContext } from "../../../shared/buildContext"; import * as nodePath from "path"; import { replaceAll } from "../../../tools/String.prototype.replaceAll"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectBuildDirPath: string; assetsDirPath: string; urlPathname: string | undefined; }; -assert(); +assert(); export function replaceImportsInJsCode_webpack(params: { jsCode: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; systemType?: "posix" | "win32"; }): { fixedJsCode: string; } { const { jsCode, - buildOptions, + buildContext, systemType = nodePath.sep === "/" ? "posix" : "win32" } = params; @@ -32,12 +32,12 @@ export function replaceImportsInJsCode_webpack(params: { let fixedJsCode = jsCode; - if (buildOptions.urlPathname !== undefined) { + if (buildContext.urlPathname !== undefined) { // "__esModule",{value:!0})},n.p="/foo-bar/",function(){if("undefined" -> ... n.p="/" ... fixedJsCode = fixedJsCode.replace( new RegExp( `,([a-zA-Z]\\.[a-zA-Z])="${replaceAll( - buildOptions.urlPathname, + buildContext.urlPathname, "/", "\\/" )}",`, @@ -50,8 +50,8 @@ export function replaceImportsInJsCode_webpack(params: { // Example: "static/ or "foo/bar/" const staticDir = (() => { let out = pathRelative( - buildOptions.projectBuildDirPath, - buildOptions.assetsDirPath + buildContext.projectBuildDirPath, + buildContext.assetsDirPath ); out = replaceAll(out, pathSep, "/") + "/"; diff --git a/src/bin/shared/buildOptions.ts b/src/bin/shared/buildContext.ts similarity index 88% rename from src/bin/shared/buildOptions.ts rename to src/bin/shared/buildContext.ts index e7545524..40cfa362 100644 --- a/src/bin/shared/buildOptions.ts +++ b/src/bin/shared/buildContext.ts @@ -9,8 +9,7 @@ import { assert } from "tsafe"; import * as child_process from "child_process"; import { vitePluginSubScriptEnvNames } from "./constants"; -/** Consolidated build option gathered form CLI arguments and config in package.json */ -export type BuildOptions = { +export type BuildContext = { bundler: "vite" | "webpack"; themeVersion: string; themeNames: string[]; @@ -33,7 +32,7 @@ export type BuildOptions = { environmentVariables: { name: string; default: string }[]; }; -export type UserProvidedBuildOptions = { +export type BuildOptions = { themeName?: string | string[]; environmentVariables?: { name: string; default: string }[]; extraThemeProperties?: string[]; @@ -49,12 +48,12 @@ export type ResolvedViteConfig = { publicDir: string; assetsDir: string; urlPathname: string | undefined; - userProvidedBuildOptions: UserProvidedBuildOptions; + buildOptions: BuildOptions; }; -export function readBuildOptions(params: { +export function getBuildContext(params: { cliCommandOptions: CliCommandOptions; -}): BuildOptions { +}): BuildContext { const { cliCommandOptions } = params; const projectDirPath = (() => { @@ -107,7 +106,7 @@ export function readBuildOptions(params: { name: string; version?: string; homepage?: string; - keycloakify?: UserProvidedBuildOptions & { + keycloakify?: BuildOptions & { projectBuildDirPath?: string; }; }; @@ -143,13 +142,13 @@ export function readBuildOptions(params: { ); })(); - const userProvidedBuildOptions: UserProvidedBuildOptions = { + const buildOptions: BuildOptions = { ...parsedPackageJson.keycloakify, - ...resolvedViteConfig?.userProvidedBuildOptions + ...resolvedViteConfig?.buildOptions }; const themeNames = (() => { - if (userProvidedBuildOptions.themeName === undefined) { + if (buildOptions.themeName === undefined) { return [ parsedPackageJson.name .replace(/^@(.*)/, "$1") @@ -158,11 +157,11 @@ export function readBuildOptions(params: { ]; } - if (typeof userProvidedBuildOptions.themeName === "string") { - return [userProvidedBuildOptions.themeName]; + if (typeof buildOptions.themeName === "string") { + return [buildOptions.themeName]; } - return userProvidedBuildOptions.themeName; + return buildOptions.themeName; })(); const projectBuildDirPath = (() => { @@ -194,13 +193,13 @@ export function readBuildOptions(params: { themeVersion: process.env.KEYCLOAKIFY_THEME_VERSION ?? parsedPackageJson.version ?? "0.0.0", themeNames, - extraThemeProperties: userProvidedBuildOptions.extraThemeProperties, + extraThemeProperties: buildOptions.extraThemeProperties, groupId: (() => { const fallbackGroupId = `${themeNames[0]}.keycloak`; return ( process.env.KEYCLOAKIFY_GROUP_ID ?? - userProvidedBuildOptions.groupId ?? + buildOptions.groupId ?? (parsedPackageJson.homepage === undefined ? fallbackGroupId : urlParse(parsedPackageJson.homepage) @@ -212,16 +211,16 @@ export function readBuildOptions(params: { })(), artifactId: process.env.KEYCLOAKIFY_ARTIFACT_ID ?? - userProvidedBuildOptions.artifactId ?? + buildOptions.artifactId ?? `${themeNames[0]}-keycloak-theme`, loginThemeResourcesFromKeycloakVersion: - userProvidedBuildOptions.loginThemeResourcesFromKeycloakVersion ?? "24.0.4", + buildOptions.loginThemeResourcesFromKeycloakVersion ?? "24.0.4", projectDirPath, projectBuildDirPath, keycloakifyBuildDirPath: (() => { - if (userProvidedBuildOptions.keycloakifyBuildDirPath !== undefined) { + if (buildOptions.keycloakifyBuildDirPath !== undefined) { return getAbsoluteAndInOsFormatPath({ - pathIsh: userProvidedBuildOptions.keycloakifyBuildDirPath, + pathIsh: buildOptions.keycloakifyBuildDirPath, cwd: projectDirPath }); } @@ -304,7 +303,7 @@ export function readBuildOptions(params: { return pathJoin(projectBuildDirPath, resolvedViteConfig.assetsDir); })(), npmWorkspaceRootDirPath, - kcContextExclusionsFtlCode: userProvidedBuildOptions.kcContextExclusionsFtlCode, - environmentVariables: userProvidedBuildOptions.environmentVariables ?? [] + kcContextExclusionsFtlCode: buildOptions.kcContextExclusionsFtlCode, + environmentVariables: buildOptions.environmentVariables ?? [] }; } diff --git a/src/bin/shared/copyKeycloakResourcesToPublic.ts b/src/bin/shared/copyKeycloakResourcesToPublic.ts index d94779c4..22c863b9 100644 --- a/src/bin/shared/copyKeycloakResourcesToPublic.ts +++ b/src/bin/shared/copyKeycloakResourcesToPublic.ts @@ -1,6 +1,6 @@ import { downloadKeycloakStaticResources, - type BuildOptionsLike as BuildOptionsLike_downloadKeycloakStaticResources + type BuildContextLike as BuildContextLike_downloadKeycloakStaticResources } from "./downloadKeycloakStaticResources"; import { join as pathJoin, relative as pathRelative } from "path"; import { @@ -12,21 +12,21 @@ import { readThisNpmPackageVersion } from "../tools/readThisNpmPackageVersion"; import { assert } from "tsafe/assert"; import * as fs from "fs"; import { rmSync } from "../tools/fs.rmSync"; -import type { BuildOptions } from "./buildOptions"; +import type { BuildContext } from "./buildContext"; -export type BuildOptionsLike = BuildOptionsLike_downloadKeycloakStaticResources & { +export type BuildContextLike = BuildContextLike_downloadKeycloakStaticResources & { loginThemeResourcesFromKeycloakVersion: string; publicDirPath: string; }; -assert(); +assert(); export async function copyKeycloakResourcesToPublic(params: { - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { - const { buildOptions } = params; + const { buildContext } = params; - const destDirPath = pathJoin(buildOptions.publicDirPath, keycloak_resources); + const destDirPath = pathJoin(buildContext.publicDirPath, keycloak_resources); const keycloakifyBuildinfoFilePath = pathJoin(destDirPath, "keycloakify.buildinfo"); @@ -34,12 +34,12 @@ export async function copyKeycloakResourcesToPublic(params: { { destDirPath, keycloakifyVersion: readThisNpmPackageVersion(), - buildOptions: { + buildContext: { loginThemeResourcesFromKeycloakVersion: readThisNpmPackageVersion(), - cacheDirPath: pathRelative(destDirPath, buildOptions.cacheDirPath), + cacheDirPath: pathRelative(destDirPath, buildContext.cacheDirPath), npmWorkspaceRootDirPath: pathRelative( destDirPath, - buildOptions.npmWorkspaceRootDirPath + buildContext.npmWorkspaceRootDirPath ) } }, @@ -74,14 +74,14 @@ export async function copyKeycloakResourcesToPublic(params: { keycloakVersion: (() => { switch (themeType) { case "login": - return buildOptions.loginThemeResourcesFromKeycloakVersion; + return buildContext.loginThemeResourcesFromKeycloakVersion; case "account": return lastKeycloakVersionWithAccountV1; } })(), themeType, themeDirPath: destDirPath, - buildOptions + buildContext }); } diff --git a/src/bin/shared/downloadKeycloakDefaultTheme.ts b/src/bin/shared/downloadKeycloakDefaultTheme.ts index 4621bead..582515b6 100644 --- a/src/bin/shared/downloadKeycloakDefaultTheme.ts +++ b/src/bin/shared/downloadKeycloakDefaultTheme.ts @@ -1,27 +1,27 @@ import { join as pathJoin, relative as pathRelative } from "path"; -import { type BuildOptions } from "./buildOptions"; +import { type BuildContext } from "./buildContext"; import { assert } from "tsafe/assert"; import { lastKeycloakVersionWithAccountV1 } from "./constants"; import { downloadAndExtractArchive } from "../tools/downloadAndExtractArchive"; import { isInside } from "../tools/isInside"; -export type BuildOptionsLike = { +export type BuildContextLike = { cacheDirPath: string; npmWorkspaceRootDirPath: string; }; -assert(); +assert(); export async function downloadKeycloakDefaultTheme(params: { keycloakVersion: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise<{ defaultThemeDirPath: string }> { - const { keycloakVersion, buildOptions } = params; + const { keycloakVersion, buildContext } = params; const { extractedDirPath } = await downloadAndExtractArchive({ url: `https://repo1.maven.org/maven2/org/keycloak/keycloak-themes/${keycloakVersion}/keycloak-themes-${keycloakVersion}.jar`, - cacheDirPath: buildOptions.cacheDirPath, - npmWorkspaceRootDirPath: buildOptions.npmWorkspaceRootDirPath, + cacheDirPath: buildContext.cacheDirPath, + npmWorkspaceRootDirPath: buildContext.npmWorkspaceRootDirPath, uniqueIdOfOnOnArchiveFile: "downloadKeycloakDefaultTheme", onArchiveFile: async params => { if (!isInside({ dirPath: "theme", filePath: params.fileRelativePath })) { diff --git a/src/bin/shared/downloadKeycloakStaticResources.ts b/src/bin/shared/downloadKeycloakStaticResources.ts index 4044907e..a092abb5 100644 --- a/src/bin/shared/downloadKeycloakStaticResources.ts +++ b/src/bin/shared/downloadKeycloakStaticResources.ts @@ -2,28 +2,28 @@ import { transformCodebase } from "../tools/transformCodebase"; import { join as pathJoin } from "path"; import { downloadKeycloakDefaultTheme, - type BuildOptionsLike as BuildOptionsLike_downloadKeycloakDefaultTheme + type BuildContextLike as BuildContextLike_downloadKeycloakDefaultTheme } from "./downloadKeycloakDefaultTheme"; import { resources_common, type ThemeType } from "./constants"; -import type { BuildOptions } from "./buildOptions"; +import type { BuildContext } from "./buildContext"; import { assert } from "tsafe/assert"; import { existsAsync } from "../tools/fs.existsAsync"; -export type BuildOptionsLike = BuildOptionsLike_downloadKeycloakDefaultTheme & {}; +export type BuildContextLike = BuildContextLike_downloadKeycloakDefaultTheme & {}; -assert(); +assert(); export async function downloadKeycloakStaticResources(params: { themeType: ThemeType; themeDirPath: string; keycloakVersion: string; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }) { - const { themeType, themeDirPath, keycloakVersion, buildOptions } = params; + const { themeType, themeDirPath, keycloakVersion, buildContext } = params; const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({ keycloakVersion, - buildOptions + buildContext }); const resourcesDirPath = pathJoin(themeDirPath, themeType, "resources"); diff --git a/src/bin/shared/generateKcGenTs.ts b/src/bin/shared/generateKcGenTs.ts index a64a7abc..c0134d33 100644 --- a/src/bin/shared/generateKcGenTs.ts +++ b/src/bin/shared/generateKcGenTs.ts @@ -1,24 +1,24 @@ import { assert } from "tsafe/assert"; -import type { BuildOptions } from "./buildOptions"; +import type { BuildContext } from "./buildContext"; import { getThemeSrcDirPath } from "./getThemeSrcDirPath"; import * as fs from "fs/promises"; import { join as pathJoin } from "path"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectDirPath: string; themeNames: string[]; environmentVariables: { name: string; default: string }[]; }; -assert(); +assert(); export async function generateKcGenTs(params: { - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise { - const { buildOptions } = params; + const { buildContext } = params; const { themeSrcDirPath } = getThemeSrcDirPath({ - projectDirPath: buildOptions.projectDirPath + projectDirPath: buildContext.projectDirPath }); await fs.writeFile( @@ -35,17 +35,17 @@ export async function generateKcGenTs(params: { ``, `// This file is auto-generated by Keycloakify`, ``, - `export type ThemeName = ${buildOptions.themeNames.map(themeName => `"${themeName}"`).join(" | ")};`, + `export type ThemeName = ${buildContext.themeNames.map(themeName => `"${themeName}"`).join(" | ")};`, ``, - `export const themeNames: ThemeName[] = [${buildOptions.themeNames.map(themeName => `"${themeName}"`).join(", ")}];`, + `export const themeNames: ThemeName[] = [${buildContext.themeNames.map(themeName => `"${themeName}"`).join(", ")}];`, ``, - `export type KcEnvName = ${buildOptions.environmentVariables.length === 0 ? "never" : buildOptions.environmentVariables.map(({ name }) => `"${name}"`).join(" | ")};`, + `export type KcEnvName = ${buildContext.environmentVariables.length === 0 ? "never" : buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(" | ")};`, ``, - `export const KcEnvNames: KcEnvName[] = [${buildOptions.environmentVariables.map(({ name }) => `"${name}"`).join(", ")}];`, + `export const KcEnvNames: KcEnvName[] = [${buildContext.environmentVariables.map(({ name }) => `"${name}"`).join(", ")}];`, ``, `export const kcEnvDefaults: Record = ${JSON.stringify( Object.fromEntries( - buildOptions.environmentVariables.map( + buildContext.environmentVariables.map( ({ name, default: defaultValue }) => [name, defaultValue] ) ), diff --git a/src/bin/start-keycloak/appBuild.ts b/src/bin/start-keycloak/appBuild.ts index 8986ae99..dea258cb 100644 --- a/src/bin/start-keycloak/appBuild.ts +++ b/src/bin/start-keycloak/appBuild.ts @@ -2,11 +2,11 @@ import * as child_process from "child_process"; import { Deferred } from "evt/tools/Deferred"; import { assert } from "tsafe/assert"; import { is } from "tsafe/is"; -import type { BuildOptions } from "../shared/buildOptions"; +import type { BuildContext } from "../shared/buildContext"; import * as fs from "fs"; import { join as pathJoin } from "path"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectDirPath: string; keycloakifyBuildDirPath: string; bundler: "vite" | "webpack"; @@ -14,14 +14,14 @@ export type BuildOptionsLike = { projectBuildDirPath: string; }; -assert(); +assert(); export async function appBuild(params: { - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise<{ isAppBuildSuccess: boolean }> { - const { buildOptions } = params; + const { buildContext } = params; - const { bundler } = buildOptions; + const { bundler } = buildContext; const { command, args, cwd } = (() => { switch (bundler) { @@ -29,12 +29,12 @@ export async function appBuild(params: { return { command: "npx", args: ["vite", "build"], - cwd: buildOptions.projectDirPath + cwd: buildContext.projectDirPath }; case "webpack": { for (const dirPath of [ - buildOptions.projectDirPath, - buildOptions.npmWorkspaceRootDirPath + buildContext.projectDirPath, + buildContext.npmWorkspaceRootDirPath ]) { try { const parsedPackageJson = JSON.parse( diff --git a/src/bin/start-keycloak/keycloakifyBuild.ts b/src/bin/start-keycloak/keycloakifyBuild.ts index 884170a3..c4e46d0a 100644 --- a/src/bin/start-keycloak/keycloakifyBuild.ts +++ b/src/bin/start-keycloak/keycloakifyBuild.ts @@ -2,27 +2,27 @@ import { skipBuildJarsEnvName } from "../shared/constants"; import * as child_process from "child_process"; import { Deferred } from "evt/tools/Deferred"; import { assert } from "tsafe/assert"; -import type { BuildOptions } from "../shared/buildOptions"; +import type { BuildContext } from "../shared/buildContext"; -export type BuildOptionsLike = { +export type BuildContextLike = { projectDirPath: string; keycloakifyBuildDirPath: string; bundler: "vite" | "webpack"; npmWorkspaceRootDirPath: string; }; -assert(); +assert(); export async function keycloakifyBuild(params: { doSkipBuildJars: boolean; - buildOptions: BuildOptionsLike; + buildContext: BuildContextLike; }): Promise<{ isKeycloakifyBuildSuccess: boolean }> { - const { buildOptions, doSkipBuildJars } = params; + const { buildContext, doSkipBuildJars } = params; const dResult = new Deferred<{ isSuccess: boolean }>(); const child = child_process.spawn("npx", ["keycloakify", "build"], { - cwd: buildOptions.projectDirPath, + cwd: buildContext.projectDirPath, env: { ...process.env, ...(doSkipBuildJars ? { [skipBuildJarsEnvName]: "true" } : {}) diff --git a/src/bin/start-keycloak/start-keycloak.ts b/src/bin/start-keycloak/start-keycloak.ts index 5b041eca..ae7abf3e 100644 --- a/src/bin/start-keycloak/start-keycloak.ts +++ b/src/bin/start-keycloak/start-keycloak.ts @@ -1,4 +1,4 @@ -import { readBuildOptions } from "../shared/buildOptions"; +import { getBuildContext } from "../shared/buildContext"; import { exclude } from "tsafe/exclude"; import type { CliCommandOptions as CliCommandOptions_common } from "../main"; import { promptKeycloakVersion } from "../shared/promptKeycloakVersion"; @@ -81,11 +81,11 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ cliCommandOptions }); + const buildContext = getBuildContext({ cliCommandOptions }); { const { isAppBuildSuccess } = await appBuild({ - buildOptions + buildContext }); if (!isAppBuildSuccess) { @@ -99,7 +99,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { isKeycloakifyBuildSuccess } = await keycloakifyBuild({ doSkipBuildJars: false, - buildOptions + buildContext }); if (!isKeycloakifyBuildSuccess) { @@ -113,7 +113,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) } const metaInfKeycloakThemes = readMetaInfKeycloakThemes({ - keycloakifyBuildDirPath: buildOptions.keycloakifyBuildDirPath + keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath }); const doesImplementAccountTheme = metaInfKeycloakThemes.themes.some( @@ -139,7 +139,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { keycloakVersion } = await promptKeycloakVersion({ startingFromMajor: 17, - cacheDirPath: buildOptions.cacheDirPath + cacheDirPath: buildContext.cacheDirPath }); console.log(`→ ${keycloakVersion}`); @@ -260,7 +260,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) return pathJoin(dirPath, value); })(); - const jarFilePath = pathJoin(buildOptions.keycloakifyBuildDirPath, jarFileBasename); + const jarFilePath = pathJoin(buildContext.keycloakifyBuildDirPath, jarFileBasename); const { doUseBuiltInAccountV1Theme } = await (async () => { let doUseBuiltInAccountV1Theme = false; @@ -268,7 +268,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) await extractArchive({ archiveFilePath: jarFilePath, onArchiveFile: async ({ relativeFilePathInArchive, readFile, earlyExit }) => { - for (const themeName of buildOptions.themeNames) { + for (const themeName of buildContext.themeNames) { if ( relativeFilePathInArchive === pathJoin("theme", themeName, "account", "theme.properties") @@ -293,9 +293,9 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const accountThemePropertyPatch = !doUseBuiltInAccountV1Theme ? undefined : () => { - for (const themeName of buildOptions.themeNames) { + for (const themeName of buildContext.themeNames) { const filePath = pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", @@ -347,12 +347,12 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) ? ["-e", "JAVA_OPTS=-Dkeycloak.profile=preview"] : []), ...[ - ...buildOptions.themeNames, + ...buildContext.themeNames, ...(doUseBuiltInAccountV1Theme ? [] : [accountV1ThemeName]) ] .map(themeName => ({ localDirPath: pathJoin( - buildOptions.keycloakifyBuildDirPath, + buildContext.keycloakifyBuildDirPath, "src", "main", "resources", @@ -366,7 +366,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) `${localDirPath}:${containerDirPath}:rw` ]) .flat(), - ...buildOptions.environmentVariables + ...buildContext.environmentVariables .map(({ name }) => ({ name, envValue: process.env[name] })) .map(({ name, envValue }) => envValue === undefined ? undefined : { name, envValue } @@ -385,7 +385,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) ...(realmJsonFilePath === undefined ? [] : ["--import-realm"]) ], { - cwd: buildOptions.keycloakifyBuildDirPath + cwd: buildContext.keycloakifyBuildDirPath } ] as const; @@ -397,7 +397,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) child.on("exit", process.exit); - const srcDirPath = pathJoin(buildOptions.projectDirPath, "src"); + const srcDirPath = pathJoin(buildContext.projectDirPath, "src"); { const handler = async (data: Buffer) => { @@ -429,7 +429,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) `- password: ${chalk.cyan.bold("password123")}`, "", `Watching for changes in ${chalk.bold( - `.${pathSep}${pathRelative(process.cwd(), buildOptions.projectDirPath)}` + `.${pathSep}${pathRelative(process.cwd(), buildContext.projectDirPath)}` )}` ].join("\n") ); @@ -443,7 +443,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) console.log(chalk.cyan("Detected changes in the theme. Rebuilding ...")); const { isAppBuildSuccess } = await appBuild({ - buildOptions + buildContext }); if (!isAppBuildSuccess) { @@ -452,7 +452,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) const { isKeycloakifyBuildSuccess } = await keycloakifyBuild({ doSkipBuildJars: true, - buildOptions + buildContext }); if (!isKeycloakifyBuildSuccess) { @@ -470,11 +470,11 @@ export async function command(params: { cliCommandOptions: CliCommandOptions }) .watch( [ srcDirPath, - buildOptions.publicDirPath, - pathJoin(buildOptions.projectDirPath, "package.json"), - pathJoin(buildOptions.projectDirPath, "vite.config.ts"), - pathJoin(buildOptions.projectDirPath, "vite.config.js"), - pathJoin(buildOptions.projectDirPath, "index.html"), + buildContext.publicDirPath, + pathJoin(buildContext.projectDirPath, "package.json"), + pathJoin(buildContext.projectDirPath, "vite.config.ts"), + pathJoin(buildContext.projectDirPath, "vite.config.js"), + pathJoin(buildContext.projectDirPath, "index.html"), pathJoin(getThisCodebaseRootDirPath(), "src") ], { diff --git a/src/bin/update-kc-gen.ts b/src/bin/update-kc-gen.ts index 362b1d50..585b0f22 100644 --- a/src/bin/update-kc-gen.ts +++ b/src/bin/update-kc-gen.ts @@ -1,13 +1,13 @@ import type { CliCommandOptions } from "./main"; -import { readBuildOptions } from "./shared/buildOptions"; +import { getBuildContext } from "./shared/buildContext"; import { generateKcGenTs } from "./shared/generateKcGenTs"; export async function command(params: { cliCommandOptions: CliCommandOptions }) { const { cliCommandOptions } = params; - const buildOptions = readBuildOptions({ + const buildContext = getBuildContext({ cliCommandOptions }); - await generateKcGenTs({ buildOptions }); + await generateKcGenTs({ buildContext }); } diff --git a/src/vite-plugin/vite-plugin.ts b/src/vite-plugin/vite-plugin.ts index cc98f11f..cb5cd501 100644 --- a/src/vite-plugin/vite-plugin.ts +++ b/src/vite-plugin/vite-plugin.ts @@ -11,20 +11,20 @@ import { rm } from "../bin/tools/fs.rm"; import { copyKeycloakResourcesToPublic } from "../bin/shared/copyKeycloakResourcesToPublic"; import { assert } from "tsafe/assert"; import { - readBuildOptions, + getBuildContext, + type BuildContext, type BuildOptions, - type UserProvidedBuildOptions, type ResolvedViteConfig -} from "../bin/shared/buildOptions"; +} from "../bin/shared/buildContext"; import MagicString from "magic-string"; import { generateKcGenTs } from "../bin/shared/generateKcGenTs"; -export type Params = UserProvidedBuildOptions & { - postBuild?: (buildOptions: Omit) => Promise; +export type Params = BuildOptions & { + postBuild?: (buildContext: Omit) => Promise; }; export function keycloakify(params?: Params) { - const { postBuild, ...userProvidedBuildOptions } = params ?? {}; + const { postBuild, ...buildOptions } = params ?? {}; let projectDirPath: string | undefined = undefined; let urlPathname: string | undefined = undefined; @@ -45,9 +45,9 @@ export function keycloakify(params?: Params) { break run_post_build_script_case; } - const buildOptions = JSON.parse(envValue) as BuildOptions; + const buildContext = JSON.parse(envValue) as BuildContext; - await postBuild?.(buildOptions); + await postBuild?.(buildContext); process.exit(0); } @@ -108,7 +108,7 @@ export function keycloakify(params?: Params) { assetsDir: resolvedConfig.build.assetsDir, buildDir: resolvedConfig.build.outDir, urlPathname, - userProvidedBuildOptions + buildOptions }) ) ); @@ -116,7 +116,7 @@ export function keycloakify(params?: Params) { process.exit(0); } - const buildOptions = readBuildOptions({ + const buildContext = getBuildContext({ cliCommandOptions: { projectDirPath } @@ -124,10 +124,10 @@ export function keycloakify(params?: Params) { await Promise.all([ copyKeycloakResourcesToPublic({ - buildOptions + buildContext }), generateKcGenTs({ - buildOptions + buildContext }) ]); },