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
@@ -8,7 +8,10 @@ export type BuildOptionsLike = {
|
|
8
8
|
|
9
9
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
10
10
|
|
11
|
-
export function replaceImportsInInlineCssCode(params: {
|
11
|
+
export function replaceImportsInInlineCssCode(params: {
|
12
|
+
cssCode: string;
|
13
|
+
buildOptions: BuildOptionsLike;
|
14
|
+
}): {
|
12
15
|
fixedCssCode: string;
|
13
16
|
} {
|
14
17
|
const { cssCode, buildOptions } = params;
|
@@ -17,7 +20,8 @@ export function replaceImportsInInlineCssCode(params: { cssCode: string; buildOp
|
|
17
20
|
buildOptions.urlPathname === undefined
|
18
21
|
? /url\(["']?\/([^/][^)"']+)["']?\)/g
|
19
22
|
: new RegExp(`url\\(["']?${buildOptions.urlPathname}([^)"']+)["']?\\)`, "g"),
|
20
|
-
(...[, group]) =>
|
23
|
+
(...[, group]) =>
|
24
|
+
`url(\${url.resourcesPath}/${basenameOfTheKeycloakifyResourcesDir}/${group})`
|
21
25
|
);
|
22
26
|
|
23
27
|
return { fixedCssCode };
|
@@ -13,7 +13,10 @@ export type BuildOptionsLike = {
|
|
13
13
|
|
14
14
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
15
15
|
|
16
|
-
export function replaceImportsInJsCode(params: {
|
16
|
+
export function replaceImportsInJsCode(params: {
|
17
|
+
jsCode: string;
|
18
|
+
buildOptions: BuildOptionsLike;
|
19
|
+
}) {
|
17
20
|
const { jsCode, buildOptions } = params;
|
18
21
|
|
19
22
|
const { fixedJsCode } = (() => {
|
@@ -22,8 +25,8 @@ export function replaceImportsInJsCode(params: { jsCode: string; buildOptions: B
|
|
22
25
|
return replaceImportsInJsCode_vite({
|
23
26
|
jsCode,
|
24
27
|
buildOptions,
|
25
|
-
|
26
|
-
|
28
|
+
basenameOfAssetsFiles: readAssetsDirSync({
|
29
|
+
assetsDirPath: params.buildOptions.assetsDirPath
|
27
30
|
})
|
28
31
|
});
|
29
32
|
case "webpack":
|
@@ -1,4 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import {
|
2
|
+
nameOfTheGlobal,
|
3
|
+
basenameOfTheKeycloakifyResourcesDir
|
4
|
+
} from "../../../shared/constants";
|
2
5
|
import { assert } from "tsafe/assert";
|
3
6
|
import type { BuildOptions } from "../../../shared/buildOptions";
|
4
7
|
import * as nodePath from "path";
|
@@ -20,7 +23,12 @@ export function replaceImportsInJsCode_vite(params: {
|
|
20
23
|
}): {
|
21
24
|
fixedJsCode: string;
|
22
25
|
} {
|
23
|
-
const {
|
26
|
+
const {
|
27
|
+
jsCode,
|
28
|
+
buildOptions,
|
29
|
+
basenameOfAssetsFiles,
|
30
|
+
systemType = nodePath.sep === "/" ? "posix" : "win32"
|
31
|
+
} = params;
|
24
32
|
|
25
33
|
const { relative: pathRelative, sep: pathSep } = nodePath[systemType];
|
26
34
|
|
@@ -38,22 +46,32 @@ export function replaceImportsInJsCode_vite(params: {
|
|
38
46
|
// Replace `Hv=function(e){return"/abcde12345/"+e}` by `Hv=function(e){return"/"+e}`
|
39
47
|
fixedJsCode = fixedJsCode.replace(
|
40
48
|
new RegExp(
|
41
|
-
`([\\w\\$][\\w\\d\\$]*)=function\\(([\\w\\$][\\w\\d\\$]*)\\)\\{return"${replaceAll(
|
49
|
+
`([\\w\\$][\\w\\d\\$]*)=function\\(([\\w\\$][\\w\\d\\$]*)\\)\\{return"${replaceAll(
|
50
|
+
buildOptions.urlPathname,
|
51
|
+
"/",
|
52
|
+
"\\/"
|
53
|
+
)}"\\+\\2\\}`,
|
42
54
|
"g"
|
43
55
|
),
|
44
|
-
(...[, funcName, paramName]) =>
|
56
|
+
(...[, funcName, paramName]) =>
|
57
|
+
`${funcName}=function(${paramName}){return"/"+${paramName}}`
|
45
58
|
);
|
46
59
|
}
|
47
60
|
|
48
61
|
replace_javascript_relatives_import_paths: {
|
49
62
|
// Example: "assets/ or "foo/bar/"
|
50
63
|
const staticDir = (() => {
|
51
|
-
let out = pathRelative(
|
64
|
+
let out = pathRelative(
|
65
|
+
buildOptions.reactAppBuildDirPath,
|
66
|
+
buildOptions.assetsDirPath
|
67
|
+
);
|
52
68
|
|
53
69
|
out = replaceAll(out, pathSep, "/") + "/";
|
54
70
|
|
55
71
|
if (out === "/") {
|
56
|
-
throw new Error(
|
72
|
+
throw new Error(
|
73
|
+
`The assetsDirPath must be a subdirectory of reactAppBuildDirPath`
|
74
|
+
);
|
57
75
|
}
|
58
76
|
|
59
77
|
return out;
|
@@ -1,4 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import {
|
2
|
+
nameOfTheGlobal,
|
3
|
+
basenameOfTheKeycloakifyResourcesDir
|
4
|
+
} from "../../../shared/constants";
|
2
5
|
import { assert } from "tsafe/assert";
|
3
6
|
import type { BuildOptions } from "../../../shared/buildOptions";
|
4
7
|
import * as nodePath from "path";
|
@@ -12,10 +15,18 @@ export type BuildOptionsLike = {
|
|
12
15
|
|
13
16
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
14
17
|
|
15
|
-
export function replaceImportsInJsCode_webpack(params: {
|
18
|
+
export function replaceImportsInJsCode_webpack(params: {
|
19
|
+
jsCode: string;
|
20
|
+
buildOptions: BuildOptionsLike;
|
21
|
+
systemType?: "posix" | "win32";
|
22
|
+
}): {
|
16
23
|
fixedJsCode: string;
|
17
24
|
} {
|
18
|
-
const {
|
25
|
+
const {
|
26
|
+
jsCode,
|
27
|
+
buildOptions,
|
28
|
+
systemType = nodePath.sep === "/" ? "posix" : "win32"
|
29
|
+
} = params;
|
19
30
|
|
20
31
|
const { relative: pathRelative, sep: pathSep } = nodePath[systemType];
|
21
32
|
|
@@ -24,29 +35,51 @@ export function replaceImportsInJsCode_webpack(params: { jsCode: string; buildOp
|
|
24
35
|
if (buildOptions.urlPathname !== undefined) {
|
25
36
|
// "__esModule",{value:!0})},n.p="/foo-bar/",function(){if("undefined" -> ... n.p="/" ...
|
26
37
|
fixedJsCode = fixedJsCode.replace(
|
27
|
-
new RegExp(
|
38
|
+
new RegExp(
|
39
|
+
`,([a-zA-Z]\\.[a-zA-Z])="${replaceAll(
|
40
|
+
buildOptions.urlPathname,
|
41
|
+
"/",
|
42
|
+
"\\/"
|
43
|
+
)}",`,
|
44
|
+
"g"
|
45
|
+
),
|
28
46
|
(...[, assignTo]) => `,${assignTo}="/",`
|
29
47
|
);
|
30
48
|
}
|
31
49
|
|
32
50
|
// Example: "static/ or "foo/bar/"
|
33
51
|
const staticDir = (() => {
|
34
|
-
let out = pathRelative(
|
52
|
+
let out = pathRelative(
|
53
|
+
buildOptions.reactAppBuildDirPath,
|
54
|
+
buildOptions.assetsDirPath
|
55
|
+
);
|
35
56
|
|
36
57
|
out = replaceAll(out, pathSep, "/") + "/";
|
37
58
|
|
38
59
|
if (out === "/") {
|
39
|
-
throw new Error(
|
60
|
+
throw new Error(
|
61
|
+
`The assetsDirPath must be a subdirectory of reactAppBuildDirPath`
|
62
|
+
);
|
40
63
|
}
|
41
64
|
|
42
65
|
return out;
|
43
66
|
})();
|
44
67
|
|
45
|
-
const getReplaceArgs = (
|
46
|
-
|
68
|
+
const getReplaceArgs = (
|
69
|
+
language: "js" | "css"
|
70
|
+
): Parameters<typeof String.prototype.replace> => [
|
71
|
+
new RegExp(
|
72
|
+
`([a-zA-Z_]+)\\.([a-zA-Z]+)=(function\\(([a-z]+)\\){return|([a-z]+)=>)"${staticDir.replace(
|
73
|
+
/\//g,
|
74
|
+
"\\/"
|
75
|
+
)}${language}\\/"`,
|
76
|
+
"g"
|
77
|
+
),
|
47
78
|
(...[, n, u, matchedFunction, eForFunction]) => {
|
48
79
|
const isArrowFunction = matchedFunction.includes("=>");
|
49
|
-
const e = isArrowFunction
|
80
|
+
const e = isArrowFunction
|
81
|
+
? matchedFunction.replace("=>", "").trim()
|
82
|
+
: eForFunction;
|
50
83
|
|
51
84
|
return `
|
52
85
|
${n}[(function(){
|
@@ -58,7 +91,9 @@ export function replaceImportsInJsCode_webpack(params: { jsCode: string; buildOp
|
|
58
91
|
});
|
59
92
|
}
|
60
93
|
return "${u}";
|
61
|
-
})()] = ${
|
94
|
+
})()] = ${
|
95
|
+
isArrowFunction ? `${e} =>` : `function(${e}) { return `
|
96
|
+
} "/${basenameOfTheKeycloakifyResourcesDir}/${staticDir}${language}/"`
|
62
97
|
.replace(/\s+/g, " ")
|
63
98
|
.trim();
|
64
99
|
}
|
@@ -68,7 +103,10 @@ export function replaceImportsInJsCode_webpack(params: { jsCode: string; buildOp
|
|
68
103
|
.replace(...getReplaceArgs("js"))
|
69
104
|
.replace(...getReplaceArgs("css"))
|
70
105
|
.replace(
|
71
|
-
new RegExp(
|
106
|
+
new RegExp(
|
107
|
+
`[a-zA-Z]+\\.[a-zA-Z]+\\+"${staticDir.replace(/\//g, "\\/")}`,
|
108
|
+
"g"
|
109
|
+
),
|
72
110
|
`window.${nameOfTheGlobal}.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/${staticDir}`
|
73
111
|
);
|
74
112
|
|
package/src/bin/main.ts
CHANGED
@@ -10,12 +10,12 @@ export type CliCommandOptions = {
|
|
10
10
|
|
11
11
|
const program = termost<CliCommandOptions>(
|
12
12
|
{
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
name: "keycloakify",
|
14
|
+
description: "Keycloakify CLI",
|
15
|
+
version: readThisNpmPackageVersion()
|
16
16
|
},
|
17
17
|
{
|
18
|
-
|
18
|
+
onException: error => {
|
19
19
|
console.error(error);
|
20
20
|
process.exit(1);
|
21
21
|
}
|
@@ -25,8 +25,8 @@ const program = termost<CliCommandOptions>(
|
|
25
25
|
const optionsKeys: string[] = [];
|
26
26
|
|
27
27
|
program.option({
|
28
|
-
|
29
|
-
|
28
|
+
key: "reactAppRootDirPath",
|
29
|
+
name: (() => {
|
30
30
|
const long = "project";
|
31
31
|
const short = "p";
|
32
32
|
|
@@ -34,19 +34,25 @@ program.option({
|
|
34
34
|
|
35
35
|
return { long, short };
|
36
36
|
})(),
|
37
|
-
|
37
|
+
description: [
|
38
38
|
`For monorepos, path to the keycloakify project.`,
|
39
39
|
"Example: `npx keycloakify build --project packages/keycloak-theme`",
|
40
40
|
"https://docs.keycloakify.dev/build-options#project-or-p-cli-option"
|
41
41
|
].join(" "),
|
42
|
-
|
42
|
+
defaultValue: undefined
|
43
43
|
});
|
44
44
|
|
45
45
|
function skip(_context: any, argv: { options: Record<string, unknown> }) {
|
46
|
-
const unrecognizedOptionKey = Object.keys(argv.options).find(
|
46
|
+
const unrecognizedOptionKey = Object.keys(argv.options).find(
|
47
|
+
key => !optionsKeys.includes(key)
|
48
|
+
);
|
47
49
|
|
48
50
|
if (unrecognizedOptionKey !== undefined) {
|
49
|
-
console.error(
|
51
|
+
console.error(
|
52
|
+
`keycloakify: Unrecognized option: ${
|
53
|
+
unrecognizedOptionKey.length === 1 ? "-" : "--"
|
54
|
+
}${unrecognizedOptionKey}`
|
55
|
+
);
|
50
56
|
process.exit(1);
|
51
57
|
}
|
52
58
|
|
@@ -55,12 +61,12 @@ function skip(_context: any, argv: { options: Record<string, unknown> }) {
|
|
55
61
|
|
56
62
|
program
|
57
63
|
.command({
|
58
|
-
|
59
|
-
|
64
|
+
name: "build",
|
65
|
+
description: "Build the theme (default subcommand)."
|
60
66
|
})
|
61
67
|
.task({
|
62
68
|
skip,
|
63
|
-
|
69
|
+
handler: async cliCommandOptions => {
|
64
70
|
const { command } = await import("./keycloakify");
|
65
71
|
|
66
72
|
await command({ cliCommandOptions });
|
@@ -68,37 +74,60 @@ program
|
|
68
74
|
});
|
69
75
|
|
70
76
|
program
|
71
|
-
.command<{
|
72
|
-
|
73
|
-
|
77
|
+
.command<{
|
78
|
+
port: number;
|
79
|
+
keycloakVersion: string | undefined;
|
80
|
+
realmJsonFilePath: string | undefined;
|
81
|
+
}>({
|
82
|
+
name: "start-keycloak",
|
83
|
+
description:
|
84
|
+
"Spin up a pre configured Docker image of Keycloak to test your theme."
|
74
85
|
})
|
75
86
|
.option({
|
76
|
-
|
77
|
-
|
87
|
+
key: "port",
|
88
|
+
name: (() => {
|
78
89
|
const name = "port";
|
79
90
|
|
80
91
|
optionsKeys.push(name);
|
81
92
|
|
82
93
|
return name;
|
83
94
|
})(),
|
84
|
-
|
85
|
-
|
95
|
+
description: ["Keycloak server port.", "Example `--port 8085`"].join(" "),
|
96
|
+
defaultValue: 8080
|
86
97
|
})
|
87
98
|
.option({
|
88
|
-
|
89
|
-
|
99
|
+
key: "keycloakVersion",
|
100
|
+
name: (() => {
|
90
101
|
const name = "keycloak-version";
|
91
102
|
|
92
103
|
optionsKeys.push(name);
|
93
104
|
|
94
105
|
return name;
|
95
106
|
})(),
|
96
|
-
|
97
|
-
|
107
|
+
description: [
|
108
|
+
"Use a specific version of Keycloak.",
|
109
|
+
"Example `--keycloak-version 21.1.1`"
|
110
|
+
].join(" "),
|
111
|
+
defaultValue: undefined
|
112
|
+
})
|
113
|
+
.option({
|
114
|
+
key: "realmJsonFilePath",
|
115
|
+
name: (() => {
|
116
|
+
const name = "import";
|
117
|
+
|
118
|
+
optionsKeys.push(name);
|
119
|
+
|
120
|
+
return name;
|
121
|
+
})(),
|
122
|
+
defaultValue: undefined,
|
123
|
+
description: [
|
124
|
+
"Import your own realm configuration file",
|
125
|
+
"Example `--import path/to/myrealm-realm.json`"
|
126
|
+
].join(" ")
|
98
127
|
})
|
99
128
|
.task({
|
100
129
|
skip,
|
101
|
-
|
130
|
+
handler: async cliCommandOptions => {
|
102
131
|
const { command } = await import("./start-keycloak");
|
103
132
|
|
104
133
|
await command({ cliCommandOptions });
|
@@ -107,12 +136,12 @@ program
|
|
107
136
|
|
108
137
|
program
|
109
138
|
.command({
|
110
|
-
|
111
|
-
|
139
|
+
name: "download-keycloak-default-theme",
|
140
|
+
description: "Download the built-in Keycloak theme."
|
112
141
|
})
|
113
142
|
.task({
|
114
143
|
skip,
|
115
|
-
|
144
|
+
handler: async cliCommandOptions => {
|
116
145
|
const { command } = await import("./download-keycloak-default-theme");
|
117
146
|
|
118
147
|
await command({ cliCommandOptions });
|
@@ -121,12 +150,12 @@ program
|
|
121
150
|
|
122
151
|
program
|
123
152
|
.command({
|
124
|
-
|
125
|
-
|
153
|
+
name: "eject-page",
|
154
|
+
description: "Eject a Keycloak page."
|
126
155
|
})
|
127
156
|
.task({
|
128
157
|
skip,
|
129
|
-
|
158
|
+
handler: async cliCommandOptions => {
|
130
159
|
const { command } = await import("./eject-page");
|
131
160
|
|
132
161
|
await command({ cliCommandOptions });
|
@@ -135,12 +164,12 @@ program
|
|
135
164
|
|
136
165
|
program
|
137
166
|
.command({
|
138
|
-
|
139
|
-
|
167
|
+
name: "initialize-email-theme",
|
168
|
+
description: "Initialize an email theme."
|
140
169
|
})
|
141
170
|
.task({
|
142
171
|
skip,
|
143
|
-
|
172
|
+
handler: async cliCommandOptions => {
|
144
173
|
const { command } = await import("./initialize-email-theme");
|
145
174
|
|
146
175
|
await command({ cliCommandOptions });
|
@@ -149,12 +178,13 @@ program
|
|
149
178
|
|
150
179
|
program
|
151
180
|
.command({
|
152
|
-
|
153
|
-
|
181
|
+
name: "copy-keycloak-resources-to-public",
|
182
|
+
description:
|
183
|
+
"(Webpack/Create-React-App only) Copy Keycloak default theme resources to the public directory."
|
154
184
|
})
|
155
185
|
.task({
|
156
186
|
skip,
|
157
|
-
|
187
|
+
handler: async cliCommandOptions => {
|
158
188
|
const { command } = await import("./copy-keycloak-resources-to-public");
|
159
189
|
|
160
190
|
await command({ cliCommandOptions });
|
@@ -165,10 +195,17 @@ program
|
|
165
195
|
{
|
166
196
|
const [, , ...rest] = process.argv;
|
167
197
|
|
168
|
-
if (
|
169
|
-
|
170
|
-
|
171
|
-
|
198
|
+
if (
|
199
|
+
rest.length === 0 ||
|
200
|
+
(rest[0].startsWith("-") && rest[0] !== "--help" && rest[0] !== "-h")
|
201
|
+
) {
|
202
|
+
const { status } = child_process.spawnSync(
|
203
|
+
"npx",
|
204
|
+
["keycloakify", "build", ...rest],
|
205
|
+
{
|
206
|
+
stdio: "inherit"
|
207
|
+
}
|
208
|
+
);
|
172
209
|
|
173
210
|
process.exit(status ?? 1);
|
174
211
|
}
|
@@ -1,4 +1,6 @@
|
|
1
|
-
export type KeycloakVersionRange =
|
1
|
+
export type KeycloakVersionRange =
|
2
|
+
| KeycloakVersionRange.WithAccountTheme
|
3
|
+
| KeycloakVersionRange.WithoutAccountTheme;
|
2
4
|
|
3
5
|
export namespace KeycloakVersionRange {
|
4
6
|
export type WithoutAccountTheme = "21-and-below" | "22-and-above";
|