keycloakify 10.0.0-rc.17 → 10.0.0-rc.19
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/PUBLIC_URL.js.map +1 -1
- package/account/Template.js +5 -5
- package/account/Template.js.map +1 -1
- package/account/i18n/i18n.js +37 -29
- package/account/i18n/i18n.js.map +1 -1
- package/account/kcContext/KcContext.js.map +1 -1
- package/account/kcContext/createGetKcContext.js +20 -15
- package/account/kcContext/createGetKcContext.js.map +1 -1
- package/account/kcContext/getKcContext.js.map +1 -1
- package/account/kcContext/getKcContextFromWindow.d.ts +3 -1
- package/account/kcContext/getKcContextFromWindow.js.map +1 -1
- package/account/kcContext/kcContextMocks.js +148 -144
- package/account/kcContext/kcContextMocks.js.map +1 -1
- package/account/lib/useGetClassName.js +14 -14
- package/account/lib/useGetClassName.js.map +1 -1
- package/account/pages/Account.js +1 -1
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Password.js +7 -7
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Totp.js +4 -4
- package/account/pages/Totp.js.map +1 -1
- package/bin/main.js +2265 -2028
- package/bin/shared/constants.d.ts +1 -0
- package/bin/shared/constants.js +4 -3
- package/bin/shared/constants.js.map +1 -1
- package/lib/isStorybook.js +2 -1
- package/lib/isStorybook.js.map +1 -1
- package/lib/useGetClassName.js.map +1 -1
- package/login/Template.js +13 -13
- package/login/Template.js.map +1 -1
- package/login/UserProfileFormFields.js +43 -41
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/i18n/baseMessages/ca.d.ts +1 -1
- package/login/i18n/baseMessages/ca.js +1 -1
- package/login/i18n/baseMessages/el.d.ts +0 -1
- package/login/i18n/baseMessages/el.js +0 -1
- package/login/i18n/baseMessages/el.js.map +1 -1
- package/login/i18n/baseMessages/en.d.ts +1 -1
- package/login/i18n/baseMessages/en.js +1 -1
- package/login/i18n/baseMessages/es.d.ts +1 -1
- package/login/i18n/baseMessages/es.js +1 -1
- package/login/i18n/baseMessages/fa.d.ts +0 -1
- package/login/i18n/baseMessages/fa.js +0 -1
- package/login/i18n/baseMessages/fa.js.map +1 -1
- package/login/i18n/baseMessages/hu.d.ts +1 -1
- package/login/i18n/baseMessages/hu.js +1 -1
- package/login/i18n/baseMessages/index.d.ts +1 -2
- package/login/i18n/baseMessages/zh-CN.d.ts +1 -1
- package/login/i18n/baseMessages/zh-CN.js +1 -1
- package/login/i18n/i18n.js +39 -31
- package/login/i18n/i18n.js.map +1 -1
- package/login/kcContext/KcContext.js.map +1 -1
- package/login/kcContext/createGetKcContext.js +30 -22
- package/login/kcContext/createGetKcContext.js.map +1 -1
- package/login/kcContext/getKcContext.js.map +1 -1
- package/login/kcContext/getKcContextFromWindow.d.ts +3 -1
- package/login/kcContext/getKcContextFromWindow.js.map +1 -1
- package/login/kcContext/kcContextMocks.js +233 -231
- package/login/kcContext/kcContextMocks.js.map +1 -1
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/lib/useGetClassName.js +112 -112
- package/login/lib/useGetClassName.js.map +1 -1
- package/login/lib/useUserProfileForm.js +181 -181
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.js +5 -1
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/FrontchannelLogout.js +1 -1
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +3 -3
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.js +11 -8
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnRegister.js +7 -7
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +232 -226
- package/src/PUBLIC_URL.ts +4 -1
- package/src/account/Template.tsx +5 -5
- package/src/account/TemplateProps.ts +4 -1
- package/src/account/i18n/i18n.tsx +40 -30
- package/src/account/kcContext/KcContext.ts +4 -1
- package/src/account/kcContext/createGetKcContext.ts +48 -22
- package/src/account/kcContext/getKcContext.ts +3 -1
- package/src/account/kcContext/getKcContextFromWindow.ts +6 -2
- package/src/account/kcContext/kcContextMocks.ts +164 -160
- package/src/account/lib/useGetClassName.ts +15 -14
- package/src/account/pages/Account.tsx +2 -2
- package/src/account/pages/Password.tsx +8 -8
- package/src/account/pages/Totp.tsx +4 -6
- package/src/bin/copy-keycloak-resources-to-public.ts +2 -2
- package/src/bin/download-keycloak-default-theme.ts +30 -8
- package/src/bin/eject-page.ts +48 -11
- package/src/bin/initialize-email-theme.ts +25 -17
- package/src/bin/keycloakify/buildJars/buildJar.ts +179 -104
- package/src/bin/keycloakify/buildJars/buildJars.ts +35 -16
- package/src/bin/keycloakify/buildJars/extensionVersions.ts +2 -1
- package/src/bin/keycloakify/buildJars/generatePom.ts +11 -3
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +33 -8
- package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +20 -2
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +49 -12
- package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +29 -18
- package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +35 -12
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +3 -1
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +86 -41
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +39 -15
- package/src/bin/keycloakify/generateSrcMainResources/readExtraPageNames.ts +21 -7
- package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +34 -7
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +19 -5
- package/src/bin/keycloakify/keycloakify.ts +28 -9
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +24 -5
- package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +6 -2
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +6 -3
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +24 -6
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +49 -11
- package/src/bin/main.ts +78 -41
- package/src/bin/shared/KeycloakVersionRange.ts +3 -1
- package/src/bin/shared/buildOptions.ts +70 -43
- package/src/bin/shared/constants.ts +4 -2
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +27 -13
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +161 -218
- package/src/bin/shared/downloadKeycloakStaticResources.ts +25 -21
- package/src/bin/shared/getJarFileBasename.ts +3 -1
- package/src/bin/shared/getThemeSrcDirPath.ts +5 -2
- package/src/bin/shared/metaInfKeycloakThemes.ts +35 -8
- package/src/bin/shared/promptKeycloakVersion.ts +33 -14
- package/src/bin/start-keycloak/appBuild.ts +128 -0
- package/src/bin/start-keycloak/index.ts +1 -0
- package/src/bin/start-keycloak/keycloakifyBuild.ts +41 -0
- package/src/bin/start-keycloak/myrealm-realm-23.json +2142 -0
- package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
- package/src/bin/start-keycloak/start-keycloak.ts +469 -0
- package/src/bin/tools/SemVer.ts +32 -13
- package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
- package/src/bin/tools/crawl.ts +4 -1
- package/src/bin/tools/crc32.ts +42 -24
- package/src/bin/tools/downloadAndExtractArchive/downloadAndExtractArchive.ts +262 -0
- package/src/bin/tools/downloadAndExtractArchive/fetchProxyOptions.ts +96 -0
- package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
- package/src/bin/tools/extractArchive.ts +132 -0
- package/src/bin/tools/fetchProxyOptions.ts +31 -8
- package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +10 -2
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +18 -5
- package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
- package/src/bin/tools/octokit-addons/listTags.ts +15 -4
- package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
- package/src/bin/tools/readThisNpmPackageVersion.ts +5 -1
- package/src/bin/tools/transformCodebase.ts +29 -10
- package/src/bin/tools/trimIndent.ts +4 -1
- package/src/lib/isStorybook.ts +3 -1
- package/src/lib/useGetClassName.ts +12 -3
- package/src/login/Template.tsx +14 -14
- package/src/login/TemplateProps.ts +4 -1
- package/src/login/UserProfileFormFields.tsx +44 -42
- package/src/login/i18n/baseMessages/ca.ts +1 -1
- package/src/login/i18n/baseMessages/el.ts +0 -1
- package/src/login/i18n/baseMessages/en.ts +1 -1
- package/src/login/i18n/baseMessages/es.ts +1 -1
- package/src/login/i18n/baseMessages/fa.ts +0 -1
- package/src/login/i18n/baseMessages/hu.ts +1 -1
- package/src/login/i18n/baseMessages/zh-CN.ts +1 -1
- package/src/login/i18n/i18n.tsx +42 -32
- package/src/login/kcContext/KcContext.ts +8 -2
- package/src/login/kcContext/createGetKcContext.ts +84 -37
- package/src/login/kcContext/getKcContext.ts +3 -1
- package/src/login/kcContext/getKcContextFromWindow.ts +6 -2
- package/src/login/kcContext/kcContextMocks.ts +339 -325
- package/src/login/lib/useDownloadTerms.ts +6 -4
- package/src/login/lib/useGetClassName.ts +119 -112
- package/src/login/lib/useUserProfileForm.tsx +219 -205
- package/src/login/pages/DeleteAccountConfirm.tsx +9 -3
- package/src/login/pages/FrontchannelLogout.tsx +1 -1
- package/src/login/pages/Login.tsx +2 -2
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +3 -3
- package/src/login/pages/LoginResetPassword.tsx +2 -2
- package/src/login/pages/LoginUsername.tsx +2 -2
- package/src/login/pages/WebauthnAuthenticate.tsx +11 -8
- package/src/login/pages/WebauthnRegister.tsx +7 -7
- package/src/tools/AndByDiscriminatingKey.ts +12 -6
- package/src/tools/Array.prototype.every.ts +4 -1
- package/src/tools/LazyOrNot.ts +3 -1
- package/src/tools/clsx.ts +7 -1
- package/src/tools/deepAssign.ts +15 -8
- package/src/tools/deepClone.ts +3 -1
- package/src/tools/formatNumber.ts +4 -1
- package/src/tools/useConstCallback.ts +3 -1
- package/src/tools/useInsertLinkTags.ts +20 -7
- package/src/tools/useInsertScriptTags.ts +7 -2
- package/src/tools/useSetClassName.ts +4 -1
- package/src/vite-plugin/vite-plugin.ts +45 -21
- package/tools/Array.prototype.every.js +2 -1
- package/tools/Array.prototype.every.js.map +1 -1
- package/tools/clsx.js.map +1 -1
- package/tools/deepAssign.js +9 -7
- package/tools/deepAssign.js.map +1 -1
- package/tools/deepClone.js.map +1 -1
- package/tools/formatNumber.js.map +1 -1
- package/tools/useConstCallback.js.map +1 -1
- package/tools/useInsertLinkTags.js +5 -4
- package/tools/useInsertLinkTags.js.map +1 -1
- package/tools/useInsertScriptTags.js +5 -2
- package/tools/useInsertScriptTags.js.map +1 -1
- package/tools/useSetClassName.js.map +1 -1
- package/vite-plugin/index.js +985 -1651
- package/src/bin/shared/downloadAndUnzip.ts +0 -203
- package/src/bin/start-keycloak.ts +0 -309
- package/src/bin/tools/unzip.ts +0 -141
@@ -1,5 +1,8 @@
|
|
1
1
|
import { assert, type Equals } from "tsafe/assert";
|
2
|
-
import type {
|
2
|
+
import type {
|
3
|
+
KeycloakAccountV1Version,
|
4
|
+
KeycloakThemeAdditionalInfoExtensionVersion
|
5
|
+
} from "./extensionVersions";
|
3
6
|
import type { KeycloakVersionRange } from "../../shared/KeycloakVersionRange";
|
4
7
|
|
5
8
|
export function getKeycloakVersionRangeForJar(params: {
|
@@ -7,7 +10,11 @@ export function getKeycloakVersionRangeForJar(params: {
|
|
7
10
|
keycloakAccountV1Version: KeycloakAccountV1Version;
|
8
11
|
keycloakThemeAdditionalInfoExtensionVersion: KeycloakThemeAdditionalInfoExtensionVersion;
|
9
12
|
}): KeycloakVersionRange | undefined {
|
10
|
-
const {
|
13
|
+
const {
|
14
|
+
keycloakAccountV1Version,
|
15
|
+
keycloakThemeAdditionalInfoExtensionVersion,
|
16
|
+
doesImplementAccountTheme
|
17
|
+
} = params;
|
11
18
|
|
12
19
|
if (doesImplementAccountTheme) {
|
13
20
|
const keycloakVersionRange = (() => {
|
@@ -19,7 +26,9 @@ export function getKeycloakVersionRangeForJar(params: {
|
|
19
26
|
case "1.1.5":
|
20
27
|
return undefined;
|
21
28
|
}
|
22
|
-
assert<
|
29
|
+
assert<
|
30
|
+
Equals<typeof keycloakThemeAdditionalInfoExtensionVersion, never>
|
31
|
+
>(false);
|
23
32
|
case "0.3":
|
24
33
|
switch (keycloakThemeAdditionalInfoExtensionVersion) {
|
25
34
|
case null:
|
@@ -27,7 +36,9 @@ export function getKeycloakVersionRangeForJar(params: {
|
|
27
36
|
case "1.1.5":
|
28
37
|
return "23" as const;
|
29
38
|
}
|
30
|
-
assert<
|
39
|
+
assert<
|
40
|
+
Equals<typeof keycloakThemeAdditionalInfoExtensionVersion, never>
|
41
|
+
>(false);
|
31
42
|
case "0.4":
|
32
43
|
switch (keycloakThemeAdditionalInfoExtensionVersion) {
|
33
44
|
case null:
|
@@ -35,11 +46,18 @@ export function getKeycloakVersionRangeForJar(params: {
|
|
35
46
|
case "1.1.5":
|
36
47
|
return "24-and-above" as const;
|
37
48
|
}
|
38
|
-
assert<
|
49
|
+
assert<
|
50
|
+
Equals<typeof keycloakThemeAdditionalInfoExtensionVersion, never>
|
51
|
+
>(false);
|
39
52
|
}
|
40
53
|
})();
|
41
54
|
|
42
|
-
assert<
|
55
|
+
assert<
|
56
|
+
Equals<
|
57
|
+
typeof keycloakVersionRange,
|
58
|
+
KeycloakVersionRange.WithAccountTheme | undefined
|
59
|
+
>
|
60
|
+
>();
|
43
61
|
|
44
62
|
return keycloakVersionRange;
|
45
63
|
} else {
|
@@ -54,10 +72,17 @@ export function getKeycloakVersionRangeForJar(params: {
|
|
54
72
|
case "1.1.5":
|
55
73
|
return "22-and-above";
|
56
74
|
}
|
57
|
-
assert<Equals<typeof keycloakThemeAdditionalInfoExtensionVersion, never>>(
|
75
|
+
assert<Equals<typeof keycloakThemeAdditionalInfoExtensionVersion, never>>(
|
76
|
+
false
|
77
|
+
);
|
58
78
|
})();
|
59
79
|
|
60
|
-
assert<
|
80
|
+
assert<
|
81
|
+
Equals<
|
82
|
+
typeof keycloakVersionRange,
|
83
|
+
KeycloakVersionRange.WithoutAccountTheme | undefined
|
84
|
+
>
|
85
|
+
>();
|
61
86
|
|
62
87
|
return keycloakVersionRange;
|
63
88
|
}
|
@@ -2,8 +2,6 @@
|
|
2
2
|
(()=>{
|
3
3
|
<#assign pageId="PAGE_ID_xIgLsPgGId9D8e">
|
4
4
|
const out = ${ftl_object_to_js_code_declaring_an_object(.data_model, [])?no_esc};
|
5
|
-
out["msg"]= function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); };
|
6
|
-
out["advancedMsg"]= function(){ throw new Error("use import { useKcMessage } from 'keycloakify'"); };
|
7
5
|
out["messagesPerField"]= {
|
8
6
|
<#assign fieldNames = [ FIELD_NAMES_eKsIY4ZsZ4xeM ]>
|
9
7
|
<#attempt>
|
@@ -181,6 +179,26 @@ try {
|
|
181
179
|
out["url"]["resourcesCommonPath"] = out["url"]["resourcesPath"] + "/" + "RESOURCES_COMMON_cLsLsMrtDkpVv";
|
182
180
|
} catch(error) { }
|
183
181
|
|
182
|
+
<#if profile?? && profile.attributes??>
|
183
|
+
out["__localizationReamlOverrides_userProfile"] = {
|
184
|
+
<#list profile.attributes as attribute>
|
185
|
+
<#if attribute.annotations?? && attribute.displayName??>
|
186
|
+
"${attribute.displayName}xx": "${advancedMsg(attribute.displayName)?no_esc}",
|
187
|
+
</#if>
|
188
|
+
<#if attribute.annotations.inputHelperTextBefore??>
|
189
|
+
"${attribute.annotations.inputHelperTextBefore}": "${advancedMsg(attribute.annotations.inputHelperTextBefore)?no_esc}",
|
190
|
+
</#if>
|
191
|
+
<#if attribute.annotations.inputHelperTextAfter??>
|
192
|
+
"${attribute.annotations.inputHelperTextAfter}": "${advancedMsg(attribute.annotations.inputHelperTextAfter)?no_esc}",
|
193
|
+
</#if>
|
194
|
+
<#if attribute.annotations.inputTypePlaceholder??>
|
195
|
+
"${attribute.annotations.inputTypePlaceholder}": "${advancedMsg(attribute.annotations.inputTypePlaceholder)?no_esc}",
|
196
|
+
</#if>
|
197
|
+
</#list>
|
198
|
+
};
|
199
|
+
</#if>
|
200
|
+
|
201
|
+
|
184
202
|
return out;
|
185
203
|
|
186
204
|
})();
|
@@ -6,7 +6,12 @@ import * as fs from "fs";
|
|
6
6
|
import { join as pathJoin } from "path";
|
7
7
|
import type { BuildOptions } from "../../shared/buildOptions";
|
8
8
|
import { assert } from "tsafe/assert";
|
9
|
-
import {
|
9
|
+
import {
|
10
|
+
type ThemeType,
|
11
|
+
nameOfTheGlobal,
|
12
|
+
basenameOfTheKeycloakifyResourcesDir,
|
13
|
+
resources_common
|
14
|
+
} from "../../shared/constants";
|
10
15
|
import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
|
11
16
|
|
12
17
|
export type BuildOptionsLike = {
|
@@ -28,7 +33,15 @@ export function generateFtlFilesCodeFactory(params: {
|
|
28
33
|
themeType: ThemeType;
|
29
34
|
fieldNames: string[];
|
30
35
|
}) {
|
31
|
-
const {
|
36
|
+
const {
|
37
|
+
themeName,
|
38
|
+
cssGlobalsToDefine,
|
39
|
+
indexHtmlCode,
|
40
|
+
buildOptions,
|
41
|
+
keycloakifyVersion,
|
42
|
+
themeType,
|
43
|
+
fieldNames
|
44
|
+
} = params;
|
32
45
|
|
33
46
|
const $ = cheerio.load(indexHtmlCode);
|
34
47
|
|
@@ -38,7 +51,10 @@ export function generateFtlFilesCodeFactory(params: {
|
|
38
51
|
|
39
52
|
assert(jsCode !== null);
|
40
53
|
|
41
|
-
const { fixedJsCode } = replaceImportsInJsCode({
|
54
|
+
const { fixedJsCode } = replaceImportsInJsCode({
|
55
|
+
jsCode,
|
56
|
+
buildOptions
|
57
|
+
});
|
42
58
|
|
43
59
|
$(element).text(fixedJsCode);
|
44
60
|
});
|
@@ -72,7 +88,9 @@ export function generateFtlFilesCodeFactory(params: {
|
|
72
88
|
$(element).attr(
|
73
89
|
attrName,
|
74
90
|
href.replace(
|
75
|
-
new RegExp(
|
91
|
+
new RegExp(
|
92
|
+
`^${(buildOptions.urlPathname ?? "/").replace(/\//g, "\\/")}`
|
93
|
+
),
|
76
94
|
`\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/`
|
77
95
|
)
|
78
96
|
);
|
@@ -98,20 +116,33 @@ export function generateFtlFilesCodeFactory(params: {
|
|
98
116
|
//FTL is no valid html, we can't insert with cheerio, we put placeholder for injecting later.
|
99
117
|
const ftlObjectToJsCodeDeclaringAnObject = fs
|
100
118
|
.readFileSync(
|
101
|
-
pathJoin(
|
119
|
+
pathJoin(
|
120
|
+
getThisCodebaseRootDirPath(),
|
121
|
+
"src",
|
122
|
+
"bin",
|
123
|
+
"keycloakify",
|
124
|
+
"generateFtl",
|
125
|
+
"ftl_object_to_js_code_declaring_an_object.ftl"
|
126
|
+
)
|
102
127
|
)
|
103
128
|
.toString("utf8")
|
104
129
|
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1]
|
105
|
-
.replace(
|
130
|
+
.replace(
|
131
|
+
"FIELD_NAMES_eKsIY4ZsZ4xeM",
|
132
|
+
fieldNames.map(name => `"${name}"`).join(", ")
|
133
|
+
)
|
106
134
|
.replace("KEYCLOAKIFY_VERSION_xEdKd3xEdr", keycloakifyVersion)
|
107
135
|
.replace("KEYCLOAKIFY_THEME_VERSION_sIgKd3xEdr3dx", buildOptions.themeVersion)
|
108
136
|
.replace("KEYCLOAKIFY_THEME_TYPE_dExKd3xEdr", themeType)
|
109
137
|
.replace("KEYCLOAKIFY_THEME_NAME_cXxKd3xEer", themeName)
|
110
138
|
.replace("RESOURCES_COMMON_cLsLsMrtDkpVv", resources_common);
|
111
139
|
|
112
|
-
const ftlObjectToJsCodeDeclaringAnObjectPlaceholder =
|
140
|
+
const ftlObjectToJsCodeDeclaringAnObjectPlaceholder =
|
141
|
+
'{ "x": "vIdLqMeOed9sdLdIdOxdK0d" }';
|
113
142
|
|
114
|
-
$("head").prepend(
|
143
|
+
$("head").prepend(
|
144
|
+
`<script>\nwindow.${nameOfTheGlobal}=${ftlObjectToJsCodeDeclaringAnObjectPlaceholder}</script>`
|
145
|
+
);
|
115
146
|
|
116
147
|
// Remove part of the document marked as ignored.
|
117
148
|
{
|
@@ -119,7 +150,9 @@ export function generateFtlFilesCodeFactory(params: {
|
|
119
150
|
|
120
151
|
startTags.each((...[, startTag]) => {
|
121
152
|
const $startTag = $(startTag);
|
122
|
-
const $endTag = $startTag
|
153
|
+
const $endTag = $startTag
|
154
|
+
.nextAll('meta[name="keycloakify-ignore-end"]')
|
155
|
+
.first();
|
123
156
|
|
124
157
|
if ($endTag.length) {
|
125
158
|
let currentNode = $startTag.next();
|
@@ -146,9 +179,13 @@ export function generateFtlFilesCodeFactory(params: {
|
|
146
179
|
let ftlCode = $.html();
|
147
180
|
|
148
181
|
Object.entries({
|
149
|
-
[ftlObjectToJsCodeDeclaringAnObjectPlaceholder]:
|
150
|
-
|
151
|
-
|
182
|
+
[ftlObjectToJsCodeDeclaringAnObjectPlaceholder]:
|
183
|
+
ftlObjectToJsCodeDeclaringAnObject,
|
184
|
+
PAGE_ID_xIgLsPgGId9D8e: pageId
|
185
|
+
}).map(
|
186
|
+
([searchValue, replaceValue]) =>
|
187
|
+
(ftlCode = ftlCode.replace(searchValue, replaceValue))
|
188
|
+
);
|
152
189
|
|
153
190
|
return { ftlCode };
|
154
191
|
}
|
@@ -2,10 +2,13 @@ import * as fs from "fs";
|
|
2
2
|
import { join as pathJoin } from "path";
|
3
3
|
import { assert } from "tsafe/assert";
|
4
4
|
import type { BuildOptions } from "../../shared/buildOptions";
|
5
|
-
import {
|
5
|
+
import {
|
6
|
+
resources_common,
|
7
|
+
lastKeycloakVersionWithAccountV1,
|
8
|
+
accountV1ThemeName
|
9
|
+
} from "../../shared/constants";
|
6
10
|
import { downloadKeycloakDefaultTheme } from "../../shared/downloadKeycloakDefaultTheme";
|
7
11
|
import { transformCodebase } from "../../tools/transformCodebase";
|
8
|
-
import { rmSync } from "../../tools/fs.rmSync";
|
9
12
|
|
10
13
|
type BuildOptionsLike = {
|
11
14
|
cacheDirPath: string;
|
@@ -18,33 +21,36 @@ assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
|
18
21
|
export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike }) {
|
19
22
|
const { buildOptions } = params;
|
20
23
|
|
21
|
-
const
|
22
|
-
|
23
|
-
await downloadKeycloakDefaultTheme({
|
24
|
-
"destDirPath": builtinKeycloakThemeTmpDirPath,
|
25
|
-
"keycloakVersion": lastKeycloakVersionWithAccountV1,
|
24
|
+
const { defaultThemeDirPath } = await downloadKeycloakDefaultTheme({
|
25
|
+
keycloakVersion: lastKeycloakVersionWithAccountV1,
|
26
26
|
buildOptions
|
27
27
|
});
|
28
28
|
|
29
|
-
const accountV1DirPath = pathJoin(
|
29
|
+
const accountV1DirPath = pathJoin(
|
30
|
+
buildOptions.keycloakifyBuildDirPath,
|
31
|
+
"src",
|
32
|
+
"main",
|
33
|
+
"resources",
|
34
|
+
"theme",
|
35
|
+
accountV1ThemeName,
|
36
|
+
"account"
|
37
|
+
);
|
30
38
|
|
31
39
|
transformCodebase({
|
32
|
-
|
33
|
-
|
40
|
+
srcDirPath: pathJoin(defaultThemeDirPath, "base", "account"),
|
41
|
+
destDirPath: accountV1DirPath
|
34
42
|
});
|
35
43
|
|
36
44
|
transformCodebase({
|
37
|
-
|
38
|
-
|
45
|
+
srcDirPath: pathJoin(defaultThemeDirPath, "keycloak", "account", "resources"),
|
46
|
+
destDirPath: pathJoin(accountV1DirPath, "resources")
|
39
47
|
});
|
40
48
|
|
41
49
|
transformCodebase({
|
42
|
-
|
43
|
-
|
50
|
+
srcDirPath: pathJoin(defaultThemeDirPath, "keycloak", "common", "resources"),
|
51
|
+
destDirPath: pathJoin(accountV1DirPath, "resources", resources_common)
|
44
52
|
});
|
45
53
|
|
46
|
-
rmSync(builtinKeycloakThemeTmpDirPath, { "recursive": true });
|
47
|
-
|
48
54
|
fs.writeFileSync(
|
49
55
|
pathJoin(accountV1DirPath, "theme.properties"),
|
50
56
|
Buffer.from(
|
@@ -58,8 +64,13 @@ export async function bringInAccountV1(params: { buildOptions: BuildOptionsLike
|
|
58
64
|
"css/account.css",
|
59
65
|
"img/icon-sidebar-active.png",
|
60
66
|
"img/logo.png",
|
61
|
-
...[
|
62
|
-
|
67
|
+
...[
|
68
|
+
"patternfly.min.css",
|
69
|
+
"patternfly-additions.min.css",
|
70
|
+
"patternfly-additions.min.css"
|
71
|
+
].map(
|
72
|
+
fileBasename =>
|
73
|
+
`${resources_common}/node_modules/patternfly/dist/css/${fileBasename}`
|
63
74
|
)
|
64
75
|
].join(" "),
|
65
76
|
"",
|
@@ -16,8 +16,8 @@ export function generateMessageProperties(params: {
|
|
16
16
|
const { themeSrcDirPath, themeType } = params;
|
17
17
|
|
18
18
|
let files = crawl({
|
19
|
-
|
20
|
-
|
19
|
+
dirPath: pathJoin(themeSrcDirPath, themeType),
|
20
|
+
returnedPathsType: "absolute"
|
21
21
|
});
|
22
22
|
|
23
23
|
files = files.filter(file => {
|
@@ -34,7 +34,9 @@ export function generateMessageProperties(params: {
|
|
34
34
|
|
35
35
|
files = files.sort((a, b) => a.length - b.length);
|
36
36
|
|
37
|
-
files = files.filter(file =>
|
37
|
+
files = files.filter(file =>
|
38
|
+
readFileSync(file).toString("utf8").includes("createUseI18n")
|
39
|
+
);
|
38
40
|
|
39
41
|
if (files.length === 0) {
|
40
42
|
return [];
|
@@ -43,18 +45,25 @@ export function generateMessageProperties(params: {
|
|
43
45
|
const extraMessages = files
|
44
46
|
.map(file => {
|
45
47
|
const root = recast.parse(readFileSync(file).toString("utf8"), {
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
parser: {
|
49
|
+
parse: (code: string) =>
|
50
|
+
babelParser.parse(code, {
|
51
|
+
sourceType: "module",
|
52
|
+
plugins: ["typescript"]
|
53
|
+
}),
|
54
|
+
generator: babelGenerate,
|
55
|
+
types: babelTypes
|
50
56
|
}
|
51
57
|
});
|
52
58
|
|
53
59
|
const codes: string[] = [];
|
54
60
|
|
55
61
|
recast.visit(root, {
|
56
|
-
|
57
|
-
if (
|
62
|
+
visitCallExpression: function (path) {
|
63
|
+
if (
|
64
|
+
path.node.callee.type === "Identifier" &&
|
65
|
+
path.node.callee.name === "createUseI18n"
|
66
|
+
) {
|
58
67
|
codes.push(babelGenerate(path.node.arguments[0] as any).code);
|
59
68
|
}
|
60
69
|
this.traverse(path);
|
@@ -65,7 +74,9 @@ export function generateMessageProperties(params: {
|
|
65
74
|
})
|
66
75
|
.flat()
|
67
76
|
.map(code => {
|
68
|
-
let extraMessages: {
|
77
|
+
let extraMessages: {
|
78
|
+
[languageTag: string]: Record<string, string>;
|
79
|
+
} = {};
|
69
80
|
|
70
81
|
try {
|
71
82
|
eval(`${symToStr({ extraMessages })} = ${code}`);
|
@@ -140,7 +151,14 @@ export function generateMessageProperties(params: {
|
|
140
151
|
|
141
152
|
out.push({
|
142
153
|
languageTag,
|
143
|
-
|
154
|
+
propertiesFileSource: [
|
155
|
+
"# This file was generated by keycloakify",
|
156
|
+
"",
|
157
|
+
"parent=base",
|
158
|
+
"",
|
159
|
+
propertiesFileSource,
|
160
|
+
""
|
161
|
+
].join("\n")
|
144
162
|
});
|
145
163
|
}
|
146
164
|
|
@@ -157,7 +175,12 @@ function toUTF16(codePoint: number): string {
|
|
157
175
|
codePoint -= 0x10000;
|
158
176
|
let highSurrogate = (codePoint >> 10) + 0xd800;
|
159
177
|
let lowSurrogate = (codePoint % 0x400) + 0xdc00;
|
160
|
-
return
|
178
|
+
return (
|
179
|
+
"\\u" +
|
180
|
+
highSurrogate.toString(16).padStart(4, "0") +
|
181
|
+
"\\u" +
|
182
|
+
lowSurrogate.toString(16).padStart(4, "0")
|
183
|
+
);
|
161
184
|
}
|
162
185
|
}
|
163
186
|
|
@@ -12,7 +12,9 @@ export type BuildOptionsLike = BuildOptionsLike_generateSrcMainResourcesForMainT
|
|
12
12
|
|
13
13
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
14
14
|
|
15
|
-
export async function generateSrcMainResources(params: {
|
15
|
+
export async function generateSrcMainResources(params: {
|
16
|
+
buildOptions: BuildOptionsLike;
|
17
|
+
}): Promise<void> {
|
16
18
|
const { buildOptions } = params;
|
17
19
|
|
18
20
|
const [themeName, ...themeVariantNames] = buildOptions.themeNames;
|