keycloakify 10.0.0-rc.37 → 10.0.0-rc.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/account/Fallback.d.ts +1 -2
- package/account/Fallback.js.map +1 -1
- package/account/KcContext/KcContext.d.ts +6 -6
- package/account/KcContext/getKcContextMock.d.ts +9 -9
- package/account/KcContext/getKcContextMock.js +3 -3
- package/account/KcContext/getKcContextMock.js.map +1 -1
- package/account/Template.d.ts +1 -2
- package/account/Template.js +7 -6
- package/account/Template.js.map +1 -1
- package/account/TemplateProps.d.ts +1 -3
- package/account/i18n/i18n.d.ts +9 -4
- package/account/i18n/i18n.js +132 -87
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +9 -2
- package/account/i18n/index.js +5 -1
- package/account/i18n/index.js.map +1 -1
- package/account/lib/kcClsx.d.ts +9 -0
- package/account/lib/{useGetClassName.js → kcClsx.js} +3 -3
- package/account/lib/kcClsx.js.map +1 -0
- package/account/pages/Account.d.ts +1 -2
- package/account/pages/Account.js +9 -7
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.d.ts +1 -2
- package/account/pages/Applications.js +7 -7
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.d.ts +1 -2
- package/account/pages/FederatedIdentity.js +4 -3
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Log.d.ts +1 -2
- package/account/pages/Log.js +6 -5
- package/account/pages/Log.js.map +1 -1
- package/account/pages/PageProps.d.ts +2 -4
- package/account/pages/Password.d.ts +1 -2
- package/account/pages/Password.js +10 -9
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.d.ts +1 -2
- package/account/pages/Sessions.js +6 -6
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.d.ts +1 -2
- package/account/pages/Totp.js +6 -5
- package/account/pages/Totp.js.map +1 -1
- package/bin/193.index.js +13 -13
- package/bin/{430.index.js → 214.index.js} +161 -2
- package/bin/3.index.js +165 -149
- package/bin/322.index.js +595 -0
- package/bin/453.index.js +3 -3
- package/bin/526.index.js +42 -632
- package/bin/538.index.js +563 -0
- package/bin/932.index.js +7 -7
- package/bin/{890.index.js → 941.index.js} +2 -159
- package/bin/944.index.js +621 -0
- package/bin/961.index.js +5 -5
- package/bin/97.index.js +3 -3
- package/bin/{314.index.js → 98.index.js} +217 -48
- package/bin/main.js +20 -8
- package/lib/getKcClsx.d.ts +11 -0
- package/lib/getKcClsx.js +55 -0
- package/lib/getKcClsx.js.map +1 -0
- package/login/Fallback.d.ts +2 -2
- package/login/Fallback.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +6 -6
- package/login/KcContext/getKcContextMock.d.ts +9 -9
- package/login/KcContext/getKcContextMock.js +3 -3
- package/login/KcContext/getKcContextMock.js.map +1 -1
- package/login/Template.d.ts +1 -2
- package/login/Template.js +10 -9
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +1 -3
- package/login/UserProfileFormFields.d.ts +6 -5
- package/login/UserProfileFormFields.js +35 -36
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/i18n/i18n.d.ts +9 -4
- package/login/i18n/i18n.js +136 -91
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +9 -2
- package/login/i18n/index.js +5 -1
- package/login/i18n/index.js.map +1 -1
- package/login/lib/kcClsx.d.ts +9 -0
- package/login/lib/{useGetClassName.js → kcClsx.js} +3 -3
- package/login/lib/kcClsx.js.map +1 -0
- package/login/lib/useUserProfileForm.d.ts +9 -6
- package/login/lib/useUserProfileForm.js +7 -5
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.d.ts +1 -2
- package/login/pages/Code.js +6 -5
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.d.ts +1 -2
- package/login/pages/DeleteAccountConfirm.js +7 -7
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.d.ts +1 -2
- package/login/pages/DeleteCredential.js +6 -6
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.d.ts +1 -2
- package/login/pages/Error.js +4 -3
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.d.ts +1 -2
- package/login/pages/FrontchannelLogout.js +4 -3
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/IdpReviewUserProfile.d.ts +2 -2
- package/login/pages/IdpReviewUserProfile.js +6 -6
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.d.ts +1 -2
- package/login/pages/Info.js +4 -3
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.d.ts +1 -2
- package/login/pages/Login.js +10 -8
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.d.ts +1 -2
- package/login/pages/LoginConfigTotp.js +8 -7
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.d.ts +1 -2
- package/login/pages/LoginIdpLinkConfirm.js +6 -6
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.d.ts +1 -2
- package/login/pages/LoginIdpLinkEmail.js +4 -3
- package/login/pages/LoginIdpLinkEmail.js.map +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +1 -2
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js +6 -6
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.d.ts +1 -2
- package/login/pages/LoginOauthGrant.js +7 -7
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.d.ts +1 -2
- package/login/pages/LoginOtp.js +6 -6
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.d.ts +1 -2
- package/login/pages/LoginPageExpired.js +4 -3
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.d.ts +1 -2
- package/login/pages/LoginPassword.js +9 -7
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -2
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +9 -7
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -2
- package/login/pages/LoginRecoveryAuthnCodeInput.js +6 -6
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.d.ts +1 -2
- package/login/pages/LoginResetOtp.js +6 -6
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.d.ts +1 -2
- package/login/pages/LoginResetPassword.js +7 -7
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.d.ts +1 -2
- package/login/pages/LoginUpdatePassword.js +10 -9
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +2 -2
- package/login/pages/LoginUpdateProfile.js +7 -12
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.d.ts +1 -2
- package/login/pages/LoginUsername.js +8 -7
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.d.ts +1 -2
- package/login/pages/LoginVerifyEmail.js +4 -3
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.d.ts +1 -2
- package/login/pages/LoginX509Info.js +6 -6
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.d.ts +1 -2
- package/login/pages/LogoutConfirm.js +6 -6
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/PageProps.d.ts +2 -4
- package/login/pages/Register.d.ts +2 -2
- package/login/pages/Register.js +8 -16
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.d.ts +1 -2
- package/login/pages/SamlPostForm.js +4 -3
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.d.ts +1 -2
- package/login/pages/SelectAuthenticator.js +6 -9
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.d.ts +1 -2
- package/login/pages/Terms.js +6 -6
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +2 -2
- package/login/pages/UpdateEmail.js +8 -12
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.d.ts +1 -2
- package/login/pages/WebauthnAuthenticate.js +13 -12
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +1 -2
- package/login/pages/WebauthnError.js +7 -7
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.d.ts +1 -2
- package/login/pages/WebauthnRegister.js +9 -8
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +27 -22
- package/src/account/Fallback.tsx +1 -2
- package/src/account/KcContext/KcContext.ts +7 -7
- package/src/account/KcContext/getKcContextMock.ts +13 -24
- package/src/account/Template.tsx +8 -8
- package/src/account/TemplateProps.ts +1 -6
- package/src/account/i18n/i18n.tsx +204 -125
- package/src/account/i18n/index.ts +10 -2
- package/src/account/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
- package/src/account/pages/Account.tsx +15 -21
- package/src/account/pages/Applications.tsx +8 -9
- package/src/account/pages/FederatedIdentity.tsx +5 -5
- package/src/account/pages/Log.tsx +8 -8
- package/src/account/pages/PageProps.ts +2 -4
- package/src/account/pages/Password.tsx +13 -16
- package/src/account/pages/Sessions.tsx +9 -10
- package/src/account/pages/Totp.tsx +19 -28
- package/src/bin/add-story.ts +3 -3
- package/src/bin/copy-keycloak-resources-to-public.ts +3 -3
- package/src/bin/download-keycloak-default-theme.ts +5 -5
- package/src/bin/eject-page.ts +3 -3
- package/src/bin/initialize-email-theme.ts +5 -5
- package/src/bin/keycloakify/buildJars/buildJar.ts +14 -14
- package/src/bin/keycloakify/buildJars/buildJars.ts +8 -8
- package/src/bin/keycloakify/buildJars/generatePom.ts +9 -9
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +12 -12
- package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +7 -7
- package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +2 -66
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +9 -9
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +30 -24
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +8 -8
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +9 -9
- package/src/bin/keycloakify/keycloakify.ts +11 -11
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +6 -6
- package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +7 -7
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +10 -10
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +13 -13
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +11 -11
- package/src/bin/main.ts +17 -2
- package/src/bin/shared/{buildOptions.ts → buildContext.ts} +65 -51
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +12 -12
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +7 -7
- package/src/bin/shared/downloadKeycloakStaticResources.ts +7 -7
- package/src/bin/shared/generateKcGenTs.ts +61 -0
- package/src/bin/shared/getThemeSrcDirPath.ts +3 -3
- package/src/bin/start-keycloak/appBuild.ts +11 -11
- package/src/bin/start-keycloak/keycloakifyBuild.ts +7 -7
- package/src/bin/start-keycloak/start-keycloak.ts +34 -22
- package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +3 -3
- package/src/bin/update-kc-gen.ts +13 -0
- package/src/lib/getKcClsx.ts +89 -0
- package/src/login/Fallback.tsx +2 -2
- package/src/login/KcContext/KcContext.ts +7 -7
- package/src/login/KcContext/getKcContextMock.ts +13 -24
- package/src/login/Template.tsx +36 -37
- package/src/login/TemplateProps.ts +1 -6
- package/src/login/UserProfileFormFields.tsx +67 -84
- package/src/login/i18n/i18n.tsx +208 -129
- package/src/login/i18n/index.ts +10 -2
- package/src/login/lib/{useGetClassName.ts → kcClsx.ts} +6 -2
- package/src/login/lib/useUserProfileForm.tsx +29 -21
- package/src/login/pages/Code.tsx +10 -8
- package/src/login/pages/DeleteAccountConfirm.tsx +9 -10
- package/src/login/pages/DeleteCredential.tsx +11 -10
- package/src/login/pages/Error.tsx +5 -5
- package/src/login/pages/FrontchannelLogout.tsx +7 -5
- package/src/login/pages/IdpReviewUserProfile.tsx +18 -21
- package/src/login/pages/Info.tsx +7 -5
- package/src/login/pages/Login.tsx +34 -53
- package/src/login/pages/LoginConfigTotp.tsx +30 -38
- package/src/login/pages/LoginIdpLinkConfirm.tsx +10 -21
- package/src/login/pages/LoginIdpLinkEmail.tsx +5 -5
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +19 -24
- package/src/login/pages/LoginOauthGrant.tsx +14 -21
- package/src/login/pages/LoginOtp.tsx +29 -33
- package/src/login/pages/LoginPageExpired.tsx +5 -5
- package/src/login/pages/LoginPassword.tsx +23 -33
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +21 -25
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +21 -25
- package/src/login/pages/LoginResetOtp.tsx +21 -25
- package/src/login/pages/LoginResetPassword.tsx +21 -25
- package/src/login/pages/LoginUpdatePassword.tsx +42 -52
- package/src/login/pages/LoginUpdateProfile.tsx +29 -30
- package/src/login/pages/LoginUsername.tsx +23 -35
- package/src/login/pages/LoginVerifyEmail.tsx +7 -5
- package/src/login/pages/LoginX509Info.tsx +27 -36
- package/src/login/pages/LogoutConfirm.tsx +11 -17
- package/src/login/pages/PageProps.ts +2 -4
- package/src/login/pages/Register.tsx +27 -46
- package/src/login/pages/SamlPostForm.tsx +5 -5
- package/src/login/pages/SelectAuthenticator.tsx +24 -26
- package/src/login/pages/Terms.tsx +9 -16
- package/src/login/pages/UpdateEmail.tsx +29 -33
- package/src/login/pages/WebauthnAuthenticate.tsx +26 -32
- package/src/login/pages/WebauthnError.tsx +11 -22
- package/src/login/pages/WebauthnRegister.tsx +20 -28
- package/src/tools/clsx.ts +6 -48
- package/src/tools/clsx_withTransform.ts +55 -0
- package/src/vite-plugin/vite-plugin.ts +29 -21
- package/tools/clsx.d.ts +3 -2
- package/tools/clsx.js +5 -41
- package/tools/clsx.js.map +1 -1
- package/tools/clsx_withTransform.d.ts +5 -0
- package/tools/clsx_withTransform.js +43 -0
- package/tools/clsx_withTransform.js.map +1 -0
- package/vite-plugin/index.js +243 -102
- package/vite-plugin/vite-plugin.d.ts +3 -3
- package/account/lib/useGetClassName.d.ts +0 -7
- package/account/lib/useGetClassName.js.map +0 -1
- package/bin/795.index.js +0 -1197
- package/lib/isStorybook.d.ts +0 -1
- package/lib/isStorybook.js +0 -3
- package/lib/isStorybook.js.map +0 -1
- package/lib/useGetClassName.d.ts +0 -10
- package/lib/useGetClassName.js +0 -14
- package/lib/useGetClassName.js.map +0 -1
- package/login/lib/useGetClassName.d.ts +0 -7
- package/login/lib/useGetClassName.js.map +0 -1
- package/src/lib/isStorybook.ts +0 -3
- package/src/lib/useGetClassName.ts +0 -27
@@ -8,6 +8,7 @@ import * as recast from "recast";
|
|
8
8
|
import * as babelParser from "@babel/parser";
|
9
9
|
import babelGenerate from "@babel/generator";
|
10
10
|
import * as babelTypes from "@babel/types";
|
11
|
+
import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
|
11
12
|
|
12
13
|
export function generateMessageProperties(params: {
|
13
14
|
themeSrcDirPath: string;
|
@@ -146,7 +147,7 @@ export function generateMessageProperties(params: {
|
|
146
147
|
|
147
148
|
for (const [languageTag, keyValueMap] of Object.entries(keyValueMapByLanguageTag)) {
|
148
149
|
const propertiesFileSource = Object.entries(keyValueMap)
|
149
|
-
.map(([key, value]) => `${key}=${
|
150
|
+
.map(([key, value]) => `${key}=${escapeStringForPropertiesFile(value)}`)
|
150
151
|
.join("\n");
|
151
152
|
|
152
153
|
out.push({
|
@@ -164,68 +165,3 @@ export function generateMessageProperties(params: {
|
|
164
165
|
|
165
166
|
return out;
|
166
167
|
}
|
167
|
-
|
168
|
-
// Convert a JavaScript string to UTF-16 encoding
|
169
|
-
function toUTF16(codePoint: number): string {
|
170
|
-
if (codePoint <= 0xffff) {
|
171
|
-
// BMP character
|
172
|
-
return "\\u" + codePoint.toString(16).padStart(4, "0");
|
173
|
-
} else {
|
174
|
-
// Non-BMP character
|
175
|
-
codePoint -= 0x10000;
|
176
|
-
let highSurrogate = (codePoint >> 10) + 0xd800;
|
177
|
-
let lowSurrogate = (codePoint % 0x400) + 0xdc00;
|
178
|
-
return (
|
179
|
-
"\\u" +
|
180
|
-
highSurrogate.toString(16).padStart(4, "0") +
|
181
|
-
"\\u" +
|
182
|
-
lowSurrogate.toString(16).padStart(4, "0")
|
183
|
-
);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
// Escapes special characters for use in a .properties file
|
188
|
-
function escapeString(str: string): string {
|
189
|
-
let escapedStr = "";
|
190
|
-
for (const char of [...str]) {
|
191
|
-
const codePoint = char.codePointAt(0);
|
192
|
-
if (!codePoint) continue;
|
193
|
-
|
194
|
-
switch (char) {
|
195
|
-
case "\n":
|
196
|
-
escapedStr += "\\n";
|
197
|
-
break;
|
198
|
-
case "\r":
|
199
|
-
escapedStr += "\\r";
|
200
|
-
break;
|
201
|
-
case "\t":
|
202
|
-
escapedStr += "\\t";
|
203
|
-
break;
|
204
|
-
case "\\":
|
205
|
-
escapedStr += "\\\\";
|
206
|
-
break;
|
207
|
-
case ":":
|
208
|
-
escapedStr += "\\:";
|
209
|
-
break;
|
210
|
-
case "=":
|
211
|
-
escapedStr += "\\=";
|
212
|
-
break;
|
213
|
-
case "#":
|
214
|
-
escapedStr += "\\#";
|
215
|
-
break;
|
216
|
-
case "!":
|
217
|
-
escapedStr += "\\!";
|
218
|
-
break;
|
219
|
-
case "'":
|
220
|
-
escapedStr += "''";
|
221
|
-
break;
|
222
|
-
default:
|
223
|
-
if (codePoint > 0x7f) {
|
224
|
-
escapedStr += toUTF16(codePoint); // Non-ASCII characters
|
225
|
-
} else {
|
226
|
-
escapedStr += char; // ASCII character needs no escape
|
227
|
-
}
|
228
|
-
}
|
229
|
-
}
|
230
|
-
return escapedStr;
|
231
|
-
}
|
@@ -1,34 +1,34 @@
|
|
1
|
-
import type {
|
1
|
+
import type { BuildContext } from "../../shared/buildContext";
|
2
2
|
import { assert } from "tsafe/assert";
|
3
3
|
import {
|
4
4
|
generateSrcMainResourcesForMainTheme,
|
5
|
-
type
|
5
|
+
type BuildContextLike as BuildContextLike_generateSrcMainResourcesForMainTheme
|
6
6
|
} from "./generateSrcMainResourcesForMainTheme";
|
7
7
|
import { generateSrcMainResourcesForThemeVariant } from "./generateSrcMainResourcesForThemeVariant";
|
8
8
|
|
9
|
-
export type
|
9
|
+
export type BuildContextLike = BuildContextLike_generateSrcMainResourcesForMainTheme & {
|
10
10
|
themeNames: string[];
|
11
11
|
};
|
12
12
|
|
13
|
-
assert<
|
13
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
14
14
|
|
15
15
|
export async function generateSrcMainResources(params: {
|
16
|
-
|
16
|
+
buildContext: BuildContextLike;
|
17
17
|
}): Promise<void> {
|
18
|
-
const {
|
18
|
+
const { buildContext } = params;
|
19
19
|
|
20
|
-
const [themeName, ...themeVariantNames] =
|
20
|
+
const [themeName, ...themeVariantNames] = buildContext.themeNames;
|
21
21
|
|
22
22
|
await generateSrcMainResourcesForMainTheme({
|
23
23
|
themeName,
|
24
|
-
|
24
|
+
buildContext
|
25
25
|
});
|
26
26
|
|
27
27
|
for (const themeVariantName of themeVariantNames) {
|
28
28
|
generateSrcMainResourcesForThemeVariant({
|
29
29
|
themeName,
|
30
30
|
themeVariantName,
|
31
|
-
|
31
|
+
buildContext
|
32
32
|
});
|
33
33
|
}
|
34
34
|
}
|
package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts
CHANGED
@@ -5,7 +5,7 @@ import { replaceImportsInJsCode } from "../replacers/replaceImportsInJsCode";
|
|
5
5
|
import { replaceImportsInCssCode } from "../replacers/replaceImportsInCssCode";
|
6
6
|
import {
|
7
7
|
generateFtlFilesCodeFactory,
|
8
|
-
type
|
8
|
+
type BuildContextLike as BuildContextLike_kcContextExclusionsFtlCode
|
9
9
|
} from "../generateFtl";
|
10
10
|
import {
|
11
11
|
type ThemeType,
|
@@ -17,18 +17,18 @@ import {
|
|
17
17
|
accountThemePageIds
|
18
18
|
} from "../../shared/constants";
|
19
19
|
import { isInside } from "../../tools/isInside";
|
20
|
-
import type {
|
20
|
+
import type { BuildContext } from "../../shared/buildContext";
|
21
21
|
import { assert, type Equals } from "tsafe/assert";
|
22
22
|
import {
|
23
23
|
downloadKeycloakStaticResources,
|
24
|
-
type
|
24
|
+
type BuildContextLike as BuildContextLike_downloadKeycloakStaticResources
|
25
25
|
} from "../../shared/downloadKeycloakStaticResources";
|
26
26
|
import { readFieldNameUsage } from "./readFieldNameUsage";
|
27
27
|
import { readExtraPagesNames } from "./readExtraPageNames";
|
28
28
|
import { generateMessageProperties } from "./generateMessageProperties";
|
29
29
|
import {
|
30
30
|
bringInAccountV1,
|
31
|
-
type
|
31
|
+
type BuildContextLike as BuildContextLike_bringInAccountV1
|
32
32
|
} from "./bringInAccountV1";
|
33
33
|
import { getThemeSrcDirPath } from "../../shared/getThemeSrcDirPath";
|
34
34
|
import { rmSync } from "../../tools/fs.rmSync";
|
@@ -38,36 +38,38 @@ import {
|
|
38
38
|
type MetaInfKeycloakTheme
|
39
39
|
} from "../../shared/metaInfKeycloakThemes";
|
40
40
|
import { objectEntries } from "tsafe/objectEntries";
|
41
|
+
import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
|
41
42
|
|
42
|
-
export type
|
43
|
-
|
44
|
-
|
43
|
+
export type BuildContextLike = BuildContextLike_kcContextExclusionsFtlCode &
|
44
|
+
BuildContextLike_downloadKeycloakStaticResources &
|
45
|
+
BuildContextLike_bringInAccountV1 & {
|
45
46
|
bundler: "vite" | "webpack";
|
46
47
|
extraThemeProperties: string[] | undefined;
|
47
48
|
loginThemeResourcesFromKeycloakVersion: string;
|
48
|
-
|
49
|
+
projectBuildDirPath: string;
|
49
50
|
assetsDirPath: string;
|
50
51
|
urlPathname: string | undefined;
|
51
|
-
|
52
|
+
projectDirPath: string;
|
52
53
|
keycloakifyBuildDirPath: string;
|
54
|
+
environmentVariables: { name: string; default: string }[];
|
53
55
|
};
|
54
56
|
|
55
|
-
assert<
|
57
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
56
58
|
|
57
59
|
export async function generateSrcMainResourcesForMainTheme(params: {
|
58
60
|
themeName: string;
|
59
|
-
|
61
|
+
buildContext: BuildContextLike;
|
60
62
|
}): Promise<void> {
|
61
|
-
const { themeName,
|
63
|
+
const { themeName, buildContext } = params;
|
62
64
|
|
63
65
|
const { themeSrcDirPath } = getThemeSrcDirPath({
|
64
|
-
|
66
|
+
projectDirPath: buildContext.projectDirPath
|
65
67
|
});
|
66
68
|
|
67
69
|
const getThemeTypeDirPath = (params: { themeType: ThemeType | "email" }) => {
|
68
70
|
const { themeType } = params;
|
69
71
|
return pathJoin(
|
70
|
-
|
72
|
+
buildContext.keycloakifyBuildDirPath,
|
71
73
|
"src",
|
72
74
|
"main",
|
73
75
|
"resources",
|
@@ -122,7 +124,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
122
124
|
}
|
123
125
|
|
124
126
|
transformCodebase({
|
125
|
-
srcDirPath:
|
127
|
+
srcDirPath: buildContext.projectBuildDirPath,
|
126
128
|
destDirPath,
|
127
129
|
transformSourceCode: ({ filePath, sourceCode }) => {
|
128
130
|
//NOTE: Prevent cycles, excludes the folder we generated for debug in public/
|
@@ -130,7 +132,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
130
132
|
if (
|
131
133
|
isInside({
|
132
134
|
dirPath: pathJoin(
|
133
|
-
|
135
|
+
buildContext.projectBuildDirPath,
|
134
136
|
keycloak_resources
|
135
137
|
),
|
136
138
|
filePath
|
@@ -161,7 +163,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
161
163
|
if (/\.js?$/i.test(filePath)) {
|
162
164
|
const { fixedJsCode } = replaceImportsInJsCode({
|
163
165
|
jsCode: sourceCode.toString("utf8"),
|
164
|
-
|
166
|
+
buildContext
|
165
167
|
});
|
166
168
|
|
167
169
|
return {
|
@@ -177,10 +179,10 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
177
179
|
const { generateFtlFilesCode } = generateFtlFilesCodeFactory({
|
178
180
|
themeName,
|
179
181
|
indexHtmlCode: fs
|
180
|
-
.readFileSync(pathJoin(
|
182
|
+
.readFileSync(pathJoin(buildContext.projectBuildDirPath, "index.html"))
|
181
183
|
.toString("utf8"),
|
182
184
|
cssGlobalsToDefine,
|
183
|
-
|
185
|
+
buildContext,
|
184
186
|
keycloakifyVersion: readThisNpmPackageVersion(),
|
185
187
|
themeType,
|
186
188
|
fieldNames: readFieldNameUsage({
|
@@ -240,12 +242,12 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
240
242
|
case "account":
|
241
243
|
return lastKeycloakVersionWithAccountV1;
|
242
244
|
case "login":
|
243
|
-
return
|
245
|
+
return buildContext.loginThemeResourcesFromKeycloakVersion;
|
244
246
|
}
|
245
247
|
})(),
|
246
248
|
themeDirPath: pathResolve(pathJoin(themeTypeDirPath, "..")),
|
247
249
|
themeType,
|
248
|
-
|
250
|
+
buildContext
|
249
251
|
});
|
250
252
|
|
251
253
|
fs.writeFileSync(
|
@@ -261,7 +263,11 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
261
263
|
}
|
262
264
|
assert<Equals<typeof themeType, never>>(false);
|
263
265
|
})()}`,
|
264
|
-
...(
|
266
|
+
...(buildContext.extraThemeProperties ?? []),
|
267
|
+
buildContext.environmentVariables.map(
|
268
|
+
({ name, default: defaultValue }) =>
|
269
|
+
`${name}=\${env.${name}:${escapeStringForPropertiesFile(defaultValue)}}`
|
270
|
+
)
|
265
271
|
].join("\n\n"),
|
266
272
|
"utf8"
|
267
273
|
)
|
@@ -285,7 +291,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
285
291
|
|
286
292
|
if (implementedThemeTypes.account) {
|
287
293
|
await bringInAccountV1({
|
288
|
-
|
294
|
+
buildContext
|
289
295
|
});
|
290
296
|
}
|
291
297
|
|
@@ -307,7 +313,7 @@ export async function generateSrcMainResourcesForMainTheme(params: {
|
|
307
313
|
}
|
308
314
|
|
309
315
|
writeMetaInfKeycloakThemes({
|
310
|
-
keycloakifyBuildDirPath:
|
316
|
+
keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath,
|
311
317
|
metaInfKeycloakThemes
|
312
318
|
});
|
313
319
|
}
|
package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
import { join as pathJoin, extname as pathExtname, sep as pathSep } from "path";
|
2
2
|
import { transformCodebase } from "../../tools/transformCodebase";
|
3
|
-
import type {
|
3
|
+
import type { BuildContext } from "../../shared/buildContext";
|
4
4
|
import {
|
5
5
|
readMetaInfKeycloakThemes,
|
6
6
|
writeMetaInfKeycloakThemes
|
7
7
|
} from "../../shared/metaInfKeycloakThemes";
|
8
8
|
import { assert } from "tsafe/assert";
|
9
9
|
|
10
|
-
export type
|
10
|
+
export type BuildContextLike = {
|
11
11
|
keycloakifyBuildDirPath: string;
|
12
12
|
};
|
13
13
|
|
14
|
-
assert<
|
14
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
15
15
|
|
16
16
|
export function generateSrcMainResourcesForThemeVariant(params: {
|
17
17
|
themeName: string;
|
18
18
|
themeVariantName: string;
|
19
|
-
|
19
|
+
buildContext: BuildContextLike;
|
20
20
|
}) {
|
21
|
-
const { themeName, themeVariantName,
|
21
|
+
const { themeName, themeVariantName, buildContext } = params;
|
22
22
|
|
23
23
|
const mainThemeDirPath = pathJoin(
|
24
|
-
|
24
|
+
buildContext.keycloakifyBuildDirPath,
|
25
25
|
"src",
|
26
26
|
"main",
|
27
27
|
"resources",
|
@@ -58,7 +58,7 @@ export function generateSrcMainResourcesForThemeVariant(params: {
|
|
58
58
|
|
59
59
|
{
|
60
60
|
const updatedMetaInfKeycloakThemes = readMetaInfKeycloakThemes({
|
61
|
-
keycloakifyBuildDirPath:
|
61
|
+
keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath
|
62
62
|
});
|
63
63
|
|
64
64
|
updatedMetaInfKeycloakThemes.themes.push({
|
@@ -73,7 +73,7 @@ export function generateSrcMainResourcesForThemeVariant(params: {
|
|
73
73
|
});
|
74
74
|
|
75
75
|
writeMetaInfKeycloakThemes({
|
76
|
-
keycloakifyBuildDirPath:
|
76
|
+
keycloakifyBuildDirPath: buildContext.keycloakifyBuildDirPath,
|
77
77
|
metaInfKeycloakThemes: updatedMetaInfKeycloakThemes
|
78
78
|
});
|
79
79
|
}
|
@@ -5,15 +5,15 @@ import {
|
|
5
5
|
basename as pathBasename
|
6
6
|
} from "path";
|
7
7
|
import { assert } from "tsafe/assert";
|
8
|
-
import type {
|
8
|
+
import type { BuildContext } from "../shared/buildContext";
|
9
9
|
import { accountV1ThemeName } from "../shared/constants";
|
10
10
|
|
11
|
-
export type
|
11
|
+
export type BuildContextLike = {
|
12
12
|
keycloakifyBuildDirPath: string;
|
13
13
|
themeNames: string[];
|
14
14
|
};
|
15
15
|
|
16
|
-
assert<
|
16
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
17
17
|
|
18
18
|
generateStartKeycloakTestingContainer.basename = "start_keycloak_testing_container.sh";
|
19
19
|
|
@@ -24,15 +24,15 @@ const keycloakVersion = "24.0.4";
|
|
24
24
|
export function generateStartKeycloakTestingContainer(params: {
|
25
25
|
jarFilePath: string;
|
26
26
|
doesImplementAccountTheme: boolean;
|
27
|
-
|
27
|
+
buildContext: BuildContextLike;
|
28
28
|
}) {
|
29
|
-
const { jarFilePath, doesImplementAccountTheme,
|
29
|
+
const { jarFilePath, doesImplementAccountTheme, buildContext } = params;
|
30
30
|
|
31
31
|
const themeRelativeDirPath = pathJoin("src", "main", "resources", "theme");
|
32
32
|
|
33
33
|
fs.writeFileSync(
|
34
34
|
pathJoin(
|
35
|
-
|
35
|
+
buildContext.keycloakifyBuildDirPath,
|
36
36
|
generateStartKeycloakTestingContainer.basename
|
37
37
|
),
|
38
38
|
Buffer.from(
|
@@ -41,7 +41,7 @@ export function generateStartKeycloakTestingContainer(params: {
|
|
41
41
|
"",
|
42
42
|
`docker rm ${containerName} || true`,
|
43
43
|
"",
|
44
|
-
`cd "${
|
44
|
+
`cd "${buildContext.keycloakifyBuildDirPath}"`,
|
45
45
|
"",
|
46
46
|
"docker run \\",
|
47
47
|
" -p 8080:8080 \\",
|
@@ -50,11 +50,11 @@ export function generateStartKeycloakTestingContainer(params: {
|
|
50
50
|
" -e KEYCLOAK_ADMIN_PASSWORD=admin \\",
|
51
51
|
` -v "${pathJoin(
|
52
52
|
"$(pwd)",
|
53
|
-
pathRelative(
|
53
|
+
pathRelative(buildContext.keycloakifyBuildDirPath, jarFilePath)
|
54
54
|
)}":"/opt/keycloak/providers/${pathBasename(jarFilePath)}" \\`,
|
55
55
|
[
|
56
56
|
...(doesImplementAccountTheme ? [accountV1ThemeName] : []),
|
57
|
-
...
|
57
|
+
...buildContext.themeNames
|
58
58
|
].map(
|
59
59
|
themeName =>
|
60
60
|
` -v "${pathJoin(
|
@@ -2,7 +2,7 @@ import { generateSrcMainResources } from "./generateSrcMainResources";
|
|
2
2
|
import { join as pathJoin, relative as pathRelative, sep as pathSep } from "path";
|
3
3
|
import * as child_process from "child_process";
|
4
4
|
import * as fs from "fs";
|
5
|
-
import {
|
5
|
+
import { getBuildContext } from "../shared/buildContext";
|
6
6
|
import { vitePluginSubScriptEnvNames, skipBuildJarsEnvName } from "../shared/constants";
|
7
7
|
import { buildJars } from "./buildJars";
|
8
8
|
import type { CliCommandOptions } from "../main";
|
@@ -47,7 +47,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
47
47
|
|
48
48
|
const { cliCommandOptions } = params;
|
49
49
|
|
50
|
-
const
|
50
|
+
const buildContext = getBuildContext({ cliCommandOptions });
|
51
51
|
|
52
52
|
console.log(
|
53
53
|
[
|
@@ -55,7 +55,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
55
55
|
chalk.green(
|
56
56
|
`Building the keycloak theme in .${pathSep}${pathRelative(
|
57
57
|
process.cwd(),
|
58
|
-
|
58
|
+
buildContext.keycloakifyBuildDirPath
|
59
59
|
)} ...`
|
60
60
|
)
|
61
61
|
].join(" ")
|
@@ -64,31 +64,31 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
64
64
|
const startTime = Date.now();
|
65
65
|
|
66
66
|
{
|
67
|
-
if (!fs.existsSync(
|
68
|
-
fs.mkdirSync(
|
67
|
+
if (!fs.existsSync(buildContext.keycloakifyBuildDirPath)) {
|
68
|
+
fs.mkdirSync(buildContext.keycloakifyBuildDirPath, {
|
69
69
|
recursive: true
|
70
70
|
});
|
71
71
|
}
|
72
72
|
|
73
73
|
fs.writeFileSync(
|
74
|
-
pathJoin(
|
74
|
+
pathJoin(buildContext.keycloakifyBuildDirPath, ".gitignore"),
|
75
75
|
Buffer.from("*", "utf8")
|
76
76
|
);
|
77
77
|
}
|
78
78
|
|
79
|
-
await generateSrcMainResources({
|
79
|
+
await generateSrcMainResources({ buildContext });
|
80
80
|
|
81
81
|
run_post_build_script: {
|
82
|
-
if (
|
82
|
+
if (buildContext.bundler !== "vite") {
|
83
83
|
break run_post_build_script;
|
84
84
|
}
|
85
85
|
|
86
86
|
child_process.execSync("npx vite", {
|
87
|
-
cwd:
|
87
|
+
cwd: buildContext.projectDirPath,
|
88
88
|
env: {
|
89
89
|
...process.env,
|
90
90
|
[vitePluginSubScriptEnvNames.runPostBuildScript]:
|
91
|
-
JSON.stringify(
|
91
|
+
JSON.stringify(buildContext)
|
92
92
|
}
|
93
93
|
});
|
94
94
|
}
|
@@ -98,7 +98,7 @@ export async function command(params: { cliCommandOptions: CliCommandOptions })
|
|
98
98
|
break build_jars;
|
99
99
|
}
|
100
100
|
|
101
|
-
await buildJars({
|
101
|
+
await buildJars({ buildContext });
|
102
102
|
}
|
103
103
|
|
104
104
|
console.log(
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import * as crypto from "crypto";
|
2
|
-
import type {
|
2
|
+
import type { BuildContext } from "../../shared/buildContext";
|
3
3
|
import { assert } from "tsafe/assert";
|
4
4
|
import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
|
5
5
|
|
6
|
-
export type
|
6
|
+
export type BuildContextLike = {
|
7
7
|
urlPathname: string | undefined;
|
8
8
|
};
|
9
9
|
|
10
|
-
assert<
|
10
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
11
11
|
|
12
12
|
export function replaceImportsInCssCode(params: { cssCode: string }): {
|
13
13
|
fixedCssCode: string;
|
@@ -44,11 +44,11 @@ export function replaceImportsInCssCode(params: { cssCode: string }): {
|
|
44
44
|
|
45
45
|
export function generateCssCodeToDefineGlobals(params: {
|
46
46
|
cssGlobalsToDefine: Record<string, string>;
|
47
|
-
|
47
|
+
buildContext: BuildContextLike;
|
48
48
|
}): {
|
49
49
|
cssCodeToPrependInHead: string;
|
50
50
|
} {
|
51
|
-
const { cssGlobalsToDefine,
|
51
|
+
const { cssGlobalsToDefine, buildContext } = params;
|
52
52
|
|
53
53
|
return {
|
54
54
|
cssCodeToPrependInHead: [
|
@@ -59,7 +59,7 @@ export function generateCssCodeToDefineGlobals(params: {
|
|
59
59
|
`--${cssVariableName}:`,
|
60
60
|
cssGlobalsToDefine[cssVariableName].replace(
|
61
61
|
new RegExp(
|
62
|
-
`url\\(${(
|
62
|
+
`url\\(${(buildContext.urlPathname ?? "/").replace(
|
63
63
|
/\//g,
|
64
64
|
"\\/"
|
65
65
|
)}`,
|
@@ -1,25 +1,25 @@
|
|
1
|
-
import type {
|
1
|
+
import type { BuildContext } from "../../shared/buildContext";
|
2
2
|
import { assert } from "tsafe/assert";
|
3
3
|
import { basenameOfTheKeycloakifyResourcesDir } from "../../shared/constants";
|
4
4
|
|
5
|
-
export type
|
5
|
+
export type BuildContextLike = {
|
6
6
|
urlPathname: string | undefined;
|
7
7
|
};
|
8
8
|
|
9
|
-
assert<
|
9
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
10
10
|
|
11
11
|
export function replaceImportsInInlineCssCode(params: {
|
12
12
|
cssCode: string;
|
13
|
-
|
13
|
+
buildContext: BuildContextLike;
|
14
14
|
}): {
|
15
15
|
fixedCssCode: string;
|
16
16
|
} {
|
17
|
-
const { cssCode,
|
17
|
+
const { cssCode, buildContext } = params;
|
18
18
|
|
19
19
|
const fixedCssCode = cssCode.replace(
|
20
|
-
|
20
|
+
buildContext.urlPathname === undefined
|
21
21
|
? /url\(["']?\/([^/][^)"']+)["']?\)/g
|
22
|
-
: new RegExp(`url\\(["']?${
|
22
|
+
: new RegExp(`url\\(["']?${buildContext.urlPathname}([^)"']+)["']?\\)`, "g"),
|
23
23
|
(...[, group]) =>
|
24
24
|
`url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})`
|
25
25
|
);
|
@@ -1,38 +1,38 @@
|
|
1
1
|
import { assert } from "tsafe/assert";
|
2
|
-
import type {
|
2
|
+
import type { BuildContext } from "../../../shared/buildContext";
|
3
3
|
import { replaceImportsInJsCode_vite } from "./vite";
|
4
4
|
import { replaceImportsInJsCode_webpack } from "./webpack";
|
5
5
|
import * as fs from "fs";
|
6
6
|
|
7
|
-
export type
|
8
|
-
|
7
|
+
export type BuildContextLike = {
|
8
|
+
projectBuildDirPath: string;
|
9
9
|
assetsDirPath: string;
|
10
10
|
urlPathname: string | undefined;
|
11
11
|
bundler: "vite" | "webpack";
|
12
12
|
};
|
13
13
|
|
14
|
-
assert<
|
14
|
+
assert<BuildContext extends BuildContextLike ? true : false>();
|
15
15
|
|
16
16
|
export function replaceImportsInJsCode(params: {
|
17
17
|
jsCode: string;
|
18
|
-
|
18
|
+
buildContext: BuildContextLike;
|
19
19
|
}) {
|
20
|
-
const { jsCode,
|
20
|
+
const { jsCode, buildContext } = params;
|
21
21
|
|
22
22
|
const { fixedJsCode } = (() => {
|
23
|
-
switch (
|
23
|
+
switch (buildContext.bundler) {
|
24
24
|
case "vite":
|
25
25
|
return replaceImportsInJsCode_vite({
|
26
26
|
jsCode,
|
27
|
-
|
27
|
+
buildContext,
|
28
28
|
basenameOfAssetsFiles: readAssetsDirSync({
|
29
|
-
assetsDirPath: params.
|
29
|
+
assetsDirPath: params.buildContext.assetsDirPath
|
30
30
|
})
|
31
31
|
});
|
32
32
|
case "webpack":
|
33
33
|
return replaceImportsInJsCode_webpack({
|
34
34
|
jsCode,
|
35
|
-
|
35
|
+
buildContext
|
36
36
|
});
|
37
37
|
}
|
38
38
|
})();
|